tx · 6yGwMDsuKTzZDMHpc4DapLN2xUeCR4mgz59sDr2uCVja

3Mown6tyCBRFAXSRwAzUpW1YR9L61mM7FFu:  -0.01400000 Waves

2022.11.23 17:20 [2329859] smart account 3Mown6tyCBRFAXSRwAzUpW1YR9L61mM7FFu > SELF 0.00000000 Waves

{ "type": 13, "id": "6yGwMDsuKTzZDMHpc4DapLN2xUeCR4mgz59sDr2uCVja", "fee": 1400000, "feeAssetId": null, "timestamp": 1669213255561, "version": 2, "chainId": 84, "sender": "3Mown6tyCBRFAXSRwAzUpW1YR9L61mM7FFu", "senderPublicKey": "4oWUXkTfb3sTD75A8rRUWDDqjhEKp8wdoJ6AQgGZ6pnD", "proofs": [ "4oeiBMuFkghXpvGuihJGcoCjpoRQVgFou7cYAkKWX2BhSTDz9JcbC27kok5qZsLx3rrbBVVPxZt2hT6QH4CzqF78" ], "script": "base64:BgIsCAISBgoECAgIARIAEgMKAQESABIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQEZAAlTRVBBUkFUT1ICAl9fAAhLRVlfSU5JVAIESU5JVAAMS0VZX01VTFRJU0lHAghNVUxUSVNJRwAKS0VZX1NUQVRVUwIGU1RBVFVTAApLRVlfVEFSR0VUAgZUQVJHRVQAC0tFWV9BREFQVEVFAgdBREFQVEVFAAtLRVlfTUFOQUdFUgIHTUFOQUdFUgAMS0VZX0ZFRV9SQVRFAghGRUVfUkFURQAOS0VZX0xBU1RfQ0xBSU0CCkxBU1RfQ0xBSU0ADEtFWV9MRUFTRV9JRAIITEVBU0VfSUQAEEtFWV9MRUFTRV9BTU9VTlQCDExFQVNFX0FNT1VOVAAKRlVOQ19DTEFJTQIFY2xhaW0ACklOVk9LRV9GRUUAoMIeAAxDT01QRU5TQVRJT04FCklOVk9LRV9GRUUADkNMQUlNX0lOVEVSVkFMAKALAA5QRVJDRU5UX0ZBQ1RPUgCQTgEQX3ZhbGlkYXRlQWRkcmVzcwEIYWRkcmVzc18EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAQtfbG9hZFRhcmdldAAEByRtYXRjaDAJAKIIAQUKS0VZX1RBUkdFVAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAAIBAh5fbG9hZFRhcmdldDogbm8gdGFyZ2V0IGFkZHJlc3MBDF9sb2FkQWRhcHRlZQAEByRtYXRjaDAJAKIIAQULS0VZX0FEQVBURUUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQACAQIgX2xvYWRBZGFwdGVlOiBubyBhZGFwdGVlIGFkZHJlc3MBDF9sb2FkTWFuYWdlcgAEByRtYXRjaDAJAKIIAQULS0VZX01BTkFHRVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQACAQIgX2xvYWRNYW5hZ2VyOiBubyBtYW5hZ2VyIGFkZHJlc3MBDF9sb2FkRmVlUmF0ZQAEByRtYXRjaDAJAJ8IAQUMS0VZX0ZFRV9SQVRFAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQkAAgECGV9sb2FkRmVlUmF0ZTogbm8gZmVlIHJhdGUBDl9sb2FkTGFzdENsYWltAAQHJG1hdGNoMAkAnwgBBQ5LRVlfTEFTVF9DTEFJTQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEJAAIBAh1fbG9hZExhc3RDbGFpbTogbm8gbGFzdCBjbGFpbQEIX2xvYWRJbnQCBGtleV8IZGVmYXVsdF8EByRtYXRjaDAJAJ8IAQUEa2V5XwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEFCGRlZmF1bHRfAQ5fdXBkYXRlTGVhc2luZwIHYW1vdW50XwpsZWFzZU5vZGVfBAdsZWFzZUlkCQChCAEFDEtFWV9MRUFTRV9JRAQLbGVhc2VBbW91bnQJAQhfbG9hZEludAIFEEtFWV9MRUFTRV9BTU9VTlQAAAQObmV3TGVhc2VBbW91bnQJAGQCBQtsZWFzZUFtb3VudAUHYW1vdW50XwQOdW5sZWFzZU9yRW1wdHkDCQEJaXNEZWZpbmVkAQUHbGVhc2VJZAkAzAgCCQELTGVhc2VDYW5jZWwBCQEFdmFsdWUBBQdsZWFzZUlkBQNuaWwFA25pbAQMbGVhc2VBY3Rpb25zAwkAZgIFDm5ld0xlYXNlQW1vdW50AAAEBWxlYXNlCQDECAIFCmxlYXNlTm9kZV8FDm5ld0xlYXNlQW1vdW50CQDMCAIFBWxlYXNlCQDMCAIJAQtCaW5hcnlFbnRyeQIFDEtFWV9MRUFTRV9JRAkAuQgBBQVsZWFzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQS0VZX0xFQVNFX0FNT1VOVAUObmV3TGVhc2VBbW91bnQFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBBQxLRVlfTEVBU0VfSUQJAMwIAgkBDEludGVnZXJFbnRyeQIFEEtFWV9MRUFTRV9BTU9VTlQAAAUDbmlsCQDOCAIFDnVubGVhc2VPckVtcHR5BQxsZWFzZUFjdGlvbnMBEF9jbGFpbWFibGVSZXdhcmQABAlsYXN0Q2xhaW0JAQ5fbG9hZExhc3RDbGFpbQAECWxlYXNlTm9kZQkBDF9sb2FkQWRhcHRlZQAEC2NsYWltQW1vdW50CAkA7wcBBQlsZWFzZU5vZGUHcmVndWxhcgQHZmVlUmF0ZQkBDF9sb2FkRmVlUmF0ZQAEA2ZlZQkAawMFC2NsYWltQW1vdW50BQdmZWVSYXRlBQ5QRVJDRU5UX0ZBQ1RPUgQMcmV3YXJkQW1vdW50CQBlAgULY2xhaW1BbW91bnQFA2ZlZQMJAGcCBQxDT01QRU5TQVRJT04FDHJld2FyZEFtb3VudAkAlgoEBwAAAAAAAAMJAGYCCQBkAgUJbGFzdENsYWltBQ5DTEFJTV9JTlRFUlZBTAUGaGVpZ2h0CQCWCgQHAAAAAAAABAppbnZvY2F0aW9uCQD8BwQFCWxlYXNlTm9kZQUKRlVOQ19DTEFJTQkAzAgCBQtjbGFpbUFtb3VudAUDbmlsBQNuaWwDCQAAAgUKaW52b2NhdGlvbgUKaW52b2NhdGlvbgkAlgoEBgkAZQIFDHJld2FyZEFtb3VudAUMQ09NUEVOU0FUSU9OBQxDT01QRU5TQVRJT04FA2ZlZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBaQEEaW5pdAQHdGFyZ2V0XwhhZGFwdGVlXwhtYW5hZ2VyXwhmZWVSYXRlXwQIbXVsdGlzaWcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBBQxLRVlfTVVMVElTSUcCFWluaXQ6IG5vIG11bHRpc2lnIHNldAQEaW5pdAkBC3ZhbHVlT3JFbHNlAgkAoAgBBQhLRVlfSU5JVAcEA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECF2luaXQ6IHBlcm1pc3Npb24gZGVuaWVkAwUEaW5pdAkAAgECGWluaXQ6IGFscmVhZHkgaW5pdGlhbGl6ZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUHdGFyZ2V0XwkAAgECHGluaXQ6IGludmFsaWQgdGFyZ2V0IGFkZHJlc3MDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUIYWRhcHRlZV8JAAIBAh1pbml0OiBpbnZhbGlkIGFkYXB0ZWUgYWRkcmVzcwMJAQEhAQkBEF92YWxpZGF0ZUFkZHJlc3MBBQhtYW5hZ2VyXwkAAgECHWluaXQ6IGludmFsaWQgbWFuYWdlciBhZGRyZXNzAwMJAGYCAAAFCGZlZVJhdGVfBgkAZgIFCGZlZVJhdGVfBQ5QRVJDRU5UX0ZBQ1RPUgkAAgECFmluaXQ6IGludmFsaWQgZmVlIHJhdGUFBHVuaXQDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIS0VZX0lOSVQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFCktFWV9UQVJHRVQFB3RhcmdldF8JAMwIAgkBC1N0cmluZ0VudHJ5AgULS0VZX0FEQVBURUUFCGFkYXB0ZWVfCQDMCAIJAQtTdHJpbmdFbnRyeQIFC0tFWV9NQU5BR0VSBQhtYW5hZ2VyXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUMS0VZX0ZFRV9SQVRFBQhmZWVSYXRlXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUOS0VZX0xBU1RfQ0xBSU0FBmhlaWdodAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXN0YWtlAAQDZXJyAwkBAiE9AggFAWkGY2FsbGVyCQELX2xvYWRUYXJnZXQACQACAQIYc3Rha2U6IHBlcm1pc3Npb24gZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISc3Rha2U6IG5vIHBheW1lbnRzAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0CQACAQIec3Rha2U6IHBheW1lbnQgaXMgbm90IGluIHdhdmVzAwkAZwIAAAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAAIBAh1zdGFrZTogaW52YWxpZCBwYXltZW50IGFtb3VudAUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQEOX3VwZGF0ZUxlYXNpbmcCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkBDF9sb2FkQWRhcHRlZQAFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5zdGFrZQEHYW1vdW50XwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyCQELX2xvYWRUYXJnZXQACQACAQIadW5zdGFrZTogcGVybWlzc2lvbiBkZW5pZWQDCQBnAgAABQdhbW91bnRfCQACAQIXdW5zdGFrZTogaW52YWxpZCBhbW91bnQFBHVuaXQDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzQgCCQEOX3VwZGF0ZUxlYXNpbmcCCQBoAgD///////////8BBQdhbW91bnRfCQEMX2xvYWRBZGFwdGVlAAkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdhbW91bnRfBQR1bml0BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2NsYWltUmV3YXJkAAQGcmV3YXJkCQEQX2NsYWltYWJsZVJld2FyZAADCQECIT0CCAUBaQZjYWxsZXIJAQtfbG9hZFRhcmdldAAJAAIBAh5jbGFpbVJld2FyZDogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEIBQZyZXdhcmQCXzEJAJQKAgUDbmlsBQR1bml0CQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBkAggFBnJld2FyZAJfMggFBnJld2FyZAJfMwUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEMX2xvYWRNYW5hZ2VyAAgFBnJld2FyZAJfNAUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOS0VZX0xBU1RfQ0xBSU0FBmhlaWdodAUDbmlsCQCVCgMIBQZyZXdhcmQCXzIIBQZyZXdhcmQCXzMFDkNMQUlNX0lOVEVSVkFMAWkBC3NldE11bHRpc2lnAQltdWx0aXNpZ18EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHnNldE11bHRpc2lnOiBwZXJtaXNzaW9uIGRlbmllZAMJAQEhAQkBEF92YWxpZGF0ZUFkZHJlc3MBBQltdWx0aXNpZ18JAAIBAiVzZXRNdWx0aXNpZzogaW52YWxpZCBtdWx0aXNpZyBhZGRyZXNzBQR1bml0AwkAAAIFA2VycgUDZXJyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHBQltdWx0aXNpZ18FA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlzZXRUYXJnZXQBB3RhcmdldF8EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHHNldFRhcmdldDogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUHdGFyZ2V0XwkAAgECIXNldFRhcmdldDogaW52YWxpZCB0YXJnZXQgYWRkcmVzcwUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCktFWV9UQVJHRVQFB3RhcmdldF8FA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRBZGFwdGVlAQhhZGFwdGVlXwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIdc2V0QWRhcHRlZTogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUIYWRhcHRlZV8JAAIBAiJzZXRBZGFwdGVlOiBpbnZhbGlkIHRhcmdldCBhZGRyZXNzBQR1bml0AwkAAAIFA2VycgUDZXJyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgULS0VZX0FEQVBURUUFCGFkYXB0ZWVfBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0TWFuYWdlcgEIbWFuYWdlcl8EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHXNldE1hbmFnZXI6IHBlcm1pc3Npb24gZGVuaWVkAwkBASEBCQEQX3ZhbGlkYXRlQWRkcmVzcwEFCG1hbmFnZXJfCQACAQIic2V0TWFuYWdlcjogaW52YWxpZCB0YXJnZXQgYWRkcmVzcwUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFC0tFWV9NQU5BR0VSBQhtYW5hZ2VyXwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnNldEZlZVJhdGUBCGZlZVJhdGVfBANlcnIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh1zZXRGZWVSYXRlOiBwZXJtaXNzaW9uIGRlbmllZAMDCQBmAgAABQhmZWVSYXRlXwYJAGYCBQhmZWVSYXRlXwUOUEVSQ0VOVF9GQUNUT1IJAAIBAiZzZXRGZWVSYXRlOiBpbnZhbGlkIGluZnJhc3RydWN0dXJlIGZlZQUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxLRVlfRkVFX1JBVEUFCGZlZVJhdGVfBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlefOcsjU=", "height": 2329859, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEPARATOR = "__"
5+
6+let KEY_INIT = "INIT"
7+
8+let KEY_MULTISIG = "MULTISIG"
9+
10+let KEY_STATUS = "STATUS"
11+
12+let KEY_TARGET = "TARGET"
13+
14+let KEY_ADAPTEE = "ADAPTEE"
15+
16+let KEY_MANAGER = "MANAGER"
17+
18+let KEY_FEE_RATE = "FEE_RATE"
19+
20+let KEY_LAST_CLAIM = "LAST_CLAIM"
21+
22+let KEY_LEASE_ID = "LEASE_ID"
23+
24+let KEY_LEASE_AMOUNT = "LEASE_AMOUNT"
25+
26+let FUNC_CLAIM = "claim"
27+
28+let INVOKE_FEE = 500000
29+
30+let COMPENSATION = INVOKE_FEE
31+
32+let CLAIM_INTERVAL = 1440
33+
34+let PERCENT_FACTOR = 10000
35+
36+func _validateAddress (address_) = match addressFromString(address_) {
37+ case a: Address =>
38+ true
39+ case _ =>
40+ false
41+}
42+
43+
44+func _loadTarget () = match getString(KEY_TARGET) {
45+ case a: String =>
46+ addressFromStringValue(a)
47+ case _ =>
48+ throw("_loadTarget: no target address")
49+}
50+
51+
52+func _loadAdaptee () = match getString(KEY_ADAPTEE) {
53+ case a: String =>
54+ addressFromStringValue(a)
55+ case _ =>
56+ throw("_loadAdaptee: no adaptee address")
57+}
58+
59+
60+func _loadManager () = match getString(KEY_MANAGER) {
61+ case a: String =>
62+ addressFromStringValue(a)
63+ case _ =>
64+ throw("_loadManager: no manager address")
65+}
66+
67+
68+func _loadFeeRate () = match getInteger(KEY_FEE_RATE) {
69+ case a: Int =>
70+ a
71+ case _ =>
72+ throw("_loadFeeRate: no fee rate")
73+}
74+
75+
76+func _loadLastClaim () = match getInteger(KEY_LAST_CLAIM) {
77+ case a: Int =>
78+ a
79+ case _ =>
80+ throw("_loadLastClaim: no last claim")
81+}
82+
83+
84+func _loadInt (key_,default_) = match getInteger(key_) {
85+ case a: Int =>
86+ a
87+ case _ =>
88+ default_
89+}
90+
91+
92+func _updateLeasing (amount_,leaseNode_) = {
93+ let leaseId = getBinary(KEY_LEASE_ID)
94+ let leaseAmount = _loadInt(KEY_LEASE_AMOUNT, 0)
95+ let newLeaseAmount = (leaseAmount + amount_)
96+ let unleaseOrEmpty = if (isDefined(leaseId))
97+ then [LeaseCancel(value(leaseId))]
98+ else nil
99+ let leaseActions = if ((newLeaseAmount > 0))
100+ then {
101+ let lease = Lease(leaseNode_, newLeaseAmount)
102+[lease, BinaryEntry(KEY_LEASE_ID, calculateLeaseId(lease)), IntegerEntry(KEY_LEASE_AMOUNT, newLeaseAmount)]
103+ }
104+ else [DeleteEntry(KEY_LEASE_ID), IntegerEntry(KEY_LEASE_AMOUNT, 0)]
105+ (unleaseOrEmpty ++ leaseActions)
106+ }
107+
108+
109+func _claimableReward () = {
110+ let lastClaim = _loadLastClaim()
111+ let leaseNode = _loadAdaptee()
112+ let claimAmount = wavesBalance(leaseNode).regular
113+ let feeRate = _loadFeeRate()
114+ let fee = fraction(claimAmount, feeRate, PERCENT_FACTOR)
115+ let rewardAmount = (claimAmount - fee)
116+ if ((COMPENSATION >= rewardAmount))
117+ then $Tuple4(false, 0, 0, 0)
118+ else if (((lastClaim + CLAIM_INTERVAL) > height))
119+ then $Tuple4(false, 0, 0, 0)
120+ else {
121+ let invocation = invoke(leaseNode, FUNC_CLAIM, [claimAmount], nil)
122+ if ((invocation == invocation))
123+ then $Tuple4(true, (rewardAmount - COMPENSATION), COMPENSATION, fee)
124+ else throw("Strict value is not equal to itself.")
125+ }
126+ }
127+
128+
129+@Callable(i)
130+func init (target_,adaptee_,manager_,feeRate_) = {
131+ let multisig = valueOrErrorMessage(getString(KEY_MULTISIG), "init: no multisig set")
132+ let init = valueOrElse(getBoolean(KEY_INIT), false)
133+ let err = if ((i.caller != this))
134+ then throw("init: permission denied")
135+ else if (init)
136+ then throw("init: already initialized")
137+ else if (!(_validateAddress(target_)))
138+ then throw("init: invalid target address")
139+ else if (!(_validateAddress(adaptee_)))
140+ then throw("init: invalid adaptee address")
141+ else if (!(_validateAddress(manager_)))
142+ then throw("init: invalid manager address")
143+ else if (if ((0 > feeRate_))
144+ then true
145+ else (feeRate_ > PERCENT_FACTOR))
146+ then throw("init: invalid fee rate")
147+ else unit
148+ if ((err == err))
149+ then $Tuple2([BooleanEntry(KEY_INIT, true), StringEntry(KEY_TARGET, target_), StringEntry(KEY_ADAPTEE, adaptee_), StringEntry(KEY_MANAGER, manager_), IntegerEntry(KEY_FEE_RATE, feeRate_), IntegerEntry(KEY_LAST_CLAIM, height)], unit)
150+ else throw("Strict value is not equal to itself.")
151+ }
152+
153+
154+
155+@Callable(i)
156+func stake () = {
157+ let err = if ((i.caller != _loadTarget()))
158+ then throw("stake: permission denied")
159+ else if ((size(i.payments) != 1))
160+ then throw("stake: no payments")
161+ else if ((i.payments[0].assetId != unit))
162+ then throw("stake: payment is not in waves")
163+ else if ((0 >= i.payments[0].amount))
164+ then throw("stake: invalid payment amount")
165+ else unit
166+ if ((err == err))
167+ then $Tuple2(_updateLeasing(i.payments[0].amount, _loadAdaptee()), unit)
168+ else throw("Strict value is not equal to itself.")
169+ }
170+
171+
172+
173+@Callable(i)
174+func unstake (amount_) = {
175+ let err = if ((i.caller != _loadTarget()))
176+ then throw("unstake: permission denied")
177+ else if ((0 >= amount_))
178+ then throw("unstake: invalid amount")
179+ else unit
180+ if ((err == err))
181+ then $Tuple2((_updateLeasing((-1 * amount_), _loadAdaptee()) :+ ScriptTransfer(i.caller, amount_, unit)), unit)
182+ else throw("Strict value is not equal to itself.")
183+ }
184+
185+
186+
187+@Callable(i)
188+func claimReward () = {
189+ let reward = _claimableReward()
190+ if ((i.caller != _loadTarget()))
191+ then throw("claimReward: permission denied")
192+ else if (!(reward._1))
193+ then $Tuple2(nil, unit)
194+ else $Tuple2([ScriptTransfer(i.caller, (reward._2 + reward._3), unit), ScriptTransfer(_loadManager(), reward._4, unit), IntegerEntry(KEY_LAST_CLAIM, height)], $Tuple3(reward._2, reward._3, CLAIM_INTERVAL))
195+ }
196+
197+
198+
199+@Callable(i)
200+func setMultisig (multisig_) = {
201+ let err = if ((i.caller != this))
202+ then throw("setMultisig: permission denied")
203+ else if (!(_validateAddress(multisig_)))
204+ then throw("setMultisig: invalid multisig address")
205+ else unit
206+ if ((err == err))
207+ then $Tuple2([StringEntry(KEY_MULTISIG, multisig_)], unit)
208+ else throw("Strict value is not equal to itself.")
209+ }
210+
211+
212+
213+@Callable(i)
214+func setTarget (target_) = {
215+ let err = if ((i.caller != this))
216+ then throw("setTarget: permission denied")
217+ else if (!(_validateAddress(target_)))
218+ then throw("setTarget: invalid target address")
219+ else unit
220+ if ((err == err))
221+ then $Tuple2([StringEntry(KEY_TARGET, target_)], unit)
222+ else throw("Strict value is not equal to itself.")
223+ }
224+
225+
226+
227+@Callable(i)
228+func setAdaptee (adaptee_) = {
229+ let err = if ((i.caller != this))
230+ then throw("setAdaptee: permission denied")
231+ else if (!(_validateAddress(adaptee_)))
232+ then throw("setAdaptee: invalid target address")
233+ else unit
234+ if ((err == err))
235+ then $Tuple2([StringEntry(KEY_ADAPTEE, adaptee_)], unit)
236+ else throw("Strict value is not equal to itself.")
237+ }
238+
239+
240+
241+@Callable(i)
242+func setManager (manager_) = {
243+ let err = if ((i.caller != this))
244+ then throw("setManager: permission denied")
245+ else if (!(_validateAddress(manager_)))
246+ then throw("setManager: invalid target address")
247+ else unit
248+ if ((err == err))
249+ then $Tuple2([StringEntry(KEY_MANAGER, manager_)], unit)
250+ else throw("Strict value is not equal to itself.")
251+ }
252+
253+
254+
255+@Callable(i)
256+func setFeeRate (feeRate_) = {
257+ let err = if ((i.caller != this))
258+ then throw("setFeeRate: permission denied")
259+ else if (if ((0 > feeRate_))
260+ then true
261+ else (feeRate_ > PERCENT_FACTOR))
262+ then throw("setFeeRate: invalid infrastructure fee")
263+ else unit
264+ if ((err == err))
265+ then $Tuple2([IntegerEntry(KEY_FEE_RATE, feeRate_)], unit)
266+ else throw("Strict value is not equal to itself.")
267+ }
268+
269+
270+@Verifier(tx)
271+func verify () = match getString(KEY_MULTISIG) {
272+ case multisig: String =>
273+ valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
274+ case _ =>
275+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
276+}
277+

github/deemru/w8io/026f985 
25.45 ms