2023.09.19 17:27 [3828164] smart account 3PDETXtiaErZncMduS8h9G6aopcjT7wheqj > SELF 0.00000000 Waves
{ "type": 13, "id": "9juEfttsQu2w47yNc8qD9xxSgpLdJjoWUmWQW3iphBNJ", "fee": 500000, "feeAssetId": null, "timestamp": 1695133007456, "version": 2, "chainId": 87, "sender": "3PDETXtiaErZncMduS8h9G6aopcjT7wheqj", "senderPublicKey": "AKRGeAxnAWHSY1SsqmgYNW4LiBtkmVBqiqeRm5PgHZ18", "proofs": [ "VBiMtrjcqJ7JScrTmkasexT5V2d8v84N2oNRWcj2PnUbe1TPsEEVaJ6HGUc64Be27JFxda8ypBc6E3t59mRDHG1" ], "script": "base64:BgIpCAISAwoBCBIDCgEIEgMKAQgSAwoBARIAEgASAwoBCBIDCgEIEgMKAQEZAAlTRVBBUkFUT1ICAl9fAAhLRVlfSU5JVAIESU5JVAAMS0VZX01VTFRJU0lHAghNVUxUSVNJRwAKS0VZX1NUQVRVUwIGU1RBVFVTAAtLRVlfQ0xBSU1FUgIHQ0xBSU1FUgAQS0VZX0xBU1RfU1dBUF9BVAIMTEFTVF9TV0FQX0FUABZLRVlfV0FWRVNfREFPX0NPTlRSQUNUAhJXQVZFU19EQU9fQ09OVFJBQ1QAEUtFWV9TV0FQX0NPTlRSQUNUAg1TV0FQX0NPTlRSQUNUAA5LRVlfU1dBUF9MSU1JVAIKU1dBUF9MSU1JVAANRlVOQ19DTEFJTV9MUAIHY2xhaW1MUAAJRlVOQ19TV0FQAgRzd2FwABJPTkVfSE9VUl9JTl9CTE9DS1MAPAAMQ09NUEVOU0FUSU9OAKDCHgEQX3ZhbGlkYXRlQWRkcmVzcwEIYWRkcmVzc18EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAQxfdmFsaWRhdGVJbnQEBHZhbF8ObG93ZXJCb3VuZGFyeV8OdXBwZXJCb3VuZGFyeV8EZXJyXwMDCQBmAgUObG93ZXJCb3VuZGFyeV8FBHZhbF8GCQBmAgUEdmFsXwUOdXBwZXJCb3VuZGFyeV8JAAIBBQRlcnJfBgEVX2xvYWRXYXZlc0RBT0NvbnRyYWN0AAQHJG1hdGNoMAkAoggBBRZLRVlfV0FWRVNfREFPX0NPTlRSQUNUAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABFV9zYXZlV2F2ZXNEQU9Db250cmFjdAEEdmFsXwkAzAgCCQELU3RyaW5nRW50cnkCBRZLRVlfV0FWRVNfREFPX0NPTlRSQUNUCQClCAEFBHZhbF8FA25pbAERX2xvYWRTd2FwQ29udHJhY3QABAckbWF0Y2gwCQCiCAEFEUtFWV9TV0FQX0NPTlRSQUNUAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABEV9zYXZlU3dhcENvbnRyYWN0AQR2YWxfCQDMCAIJAQtTdHJpbmdFbnRyeQIFEUtFWV9TV0FQX0NPTlRSQUNUCQClCAEFBHZhbF8FA25pbAEPX2xvYWRMYXN0U3dhcEF0AAQHJG1hdGNoMAkAnwgBBRBLRVlfTEFTVF9TV0FQX0FUAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAQ9fc2F2ZUxhc3RTd2FwQXQBBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIFEEtFWV9MQVNUX1NXQVBfQVQFBHZhbF8FA25pbAEOX2xvYWRTd2FwTGltaXQABAckbWF0Y2gwCQCfCAEFDktFWV9TV0FQX0xJTUlUAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAQ5fc2F2ZVN3YXBMaW1pdAEEdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUOS0VZX1NXQVBfTElNSVQFBHZhbF8FA25pbAERX2dldFdBVkVTRExQQXNzZXQABAckbWF0Y2gwCQCdCAIJARVfbG9hZFdhdmVzREFPQ29udHJhY3QAAg0lc19fbHBBc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkA2QQBBQFhCQACAQIZX2dldFdBVkVTRExQQXNzZXQ6IHJldmVydAEVX2dldEF2YWlsYWJsZVdBVkVTRExQAAQHJG1hdGNoMAkAmggCCQEVX2xvYWRXYXZlc0RBT0NvbnRyYWN0AAkArAICAhElcyVzX19hdmFpbGFibGVfXwkApQgBBQR0aGlzAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAACQFpAQRpbml0AQhjbGFpbWVyXwQIbXVsdGlzaWcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBBQxLRVlfTVVMVElTSUcCFWluaXQ6IG5vIG11bHRpc2lnIHNldAMJAAACBQhtdWx0aXNpZwUIbXVsdGlzaWcEBGluaXQJAQt2YWx1ZU9yRWxzZQIJAKAIAQUIS0VZX0lOSVQHBANlcnIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhdpbml0OiBwZXJtaXNzaW9uIGRlbmllZAMFBGluaXQJAAIBAhlpbml0OiBhbHJlYWR5IGluaXRpYWxpemVkAwkBASEBCQEQX3ZhbGlkYXRlQWRkcmVzcwEFCGNsYWltZXJfCQACAQIdaW5pdDogaW52YWxpZCBjbGFpbWVyIGFkZHJlc3MFBHVuaXQDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIS0VZX0lOSVQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFC0tFWV9DTEFJTUVSBQhjbGFpbWVyXwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3NldE11bHRpc2lnAQltdWx0aXNpZ18EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHnNldE11bHRpc2lnOiBwZXJtaXNzaW9uIGRlbmllZAMJAQEhAQkBEF92YWxpZGF0ZUFkZHJlc3MBBQltdWx0aXNpZ18JAAIBAiVzZXRNdWx0aXNpZzogaW52YWxpZCBtdWx0aXNpZyBhZGRyZXNzBQR1bml0AwkAAAIFA2VycgUDZXJyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHBQltdWx0aXNpZ18FA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRDbGFpbWVyAQhjbGFpbWVyXwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIdc2V0Q2xhaW1lcjogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUIY2xhaW1lcl8JAAIBAiNzZXRDbGFpbWVyOiBpbnZhbGlkIGNsYWltZXIgYWRkcmVzcwUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFC0tFWV9DTEFJTUVSBQhjbGFpbWVyXwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBWNsYWltAQdhbW91bnRfAwkBAiE9AggFAWkGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBQtLRVlfQ0xBSU1FUgkAAgECGGNsYWltOiBwZXJtaXNzaW9uIGRlbmllZAMDCQBnAgAABQdhbW91bnRfBgkAZgIFB2Ftb3VudF8ICQDvBwEFBHRoaXMHcmVndWxhcgkAAgECFWNsYWltOiBpbnZhbGlkIGFtb3VudAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHYW1vdW50XwUEdW5pdAUDbmlsBQR1bml0AWkBFGdldEF2YWlsYWJsZVdBVkVTRExQAAkAlAoCBQNuaWwJARVfZ2V0QXZhaWxhYmxlV0FWRVNETFAAAWkBFGNsYWltQW5kU3dhcFdBVkVTRExQAAQFYXNzZXQJARFfZ2V0V0FWRVNETFBBc3NldAAECmludm9jYXRpb24JAPwHBAkBFV9sb2FkV2F2ZXNEQU9Db250cmFjdAAFDUZVTkNfQ0xBSU1fTFAFA25pbAUDbmlsAwkAAAIFCmludm9jYXRpb24FCmludm9jYXRpb24EC3RvdGFsQW1vdW50CQDwBwIFBHRoaXMFBWFzc2V0AwkAAAIFC3RvdGFsQW1vdW50BQt0b3RhbEFtb3VudAQJc3dhcExpbWl0CQEOX2xvYWRTd2FwTGltaXQABAxhbW91bnRUb1N3YXADCQBmAgULdG90YWxBbW91bnQFCXN3YXBMaW1pdAUJc3dhcExpbWl0BQt0b3RhbEFtb3VudAQGcmVzdWx0AwkAZgIFBmhlaWdodAkAZAIJAQ9fbG9hZExhc3RTd2FwQXQABRJPTkVfSE9VUl9JTl9CTE9DS1MJAPwHBAkBEV9sb2FkU3dhcENvbnRyYWN0AAUJRlVOQ19TV0FQCQDMCAIAAQkAzAgCAgAJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBWFzc2V0BQxhbW91bnRUb1N3YXAFA25pbAkAAgECH2NsYWltQW5kU3dhcFdBVkVTRExQOiB0b28gb2Z0ZW4DCQAAAgUGcmVzdWx0BQZyZXN1bHQEByRtYXRjaDAFBnJlc3VsdAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDADCQBmAgUBYQUMQ09NUEVOU0FUSU9OCQCUCgIJAM4IAgkBD19zYXZlTGFzdFN3YXBBdAEFBmhlaWdodAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDENPTVBFTlNBVElPTgUEdW5pdAUDbmlsBQR1bml0CQACAQIrY2xhaW1BbmRTd2FwV0FWRVNETFA6IHRvbyBsaXR0bGUgYW1vdW50IGdvdAkAAgECIWNsYWltQW5kU3dhcFdBVkVTRExQOiBzd2FwIHJldmVydAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNzZXRXYXZlc0RBT0NvbnRyYWN0AQhhZGRyZXNzXwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQImc2V0V2F2ZXNEQU9Db250cmFjdDogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUIYWRkcmVzc18JAAIBAiRzZXRXYXZlc0RBT0NvbnRyYWN0OiBpbnZhbGlkIGFkZHJlc3MFBHVuaXQDCQAAAgUDZXJyBQNlcnIJAJQKAgkBFV9zYXZlV2F2ZXNEQU9Db250cmFjdAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGFkZHJlc3NfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3NldFN3YXBDb250cmFjdAEIYWRkcmVzc18EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECInNldFN3YXBDb250cmFjdDogcGVybWlzc2lvbiBkZW5pZWQDCQEBIQEJARBfdmFsaWRhdGVBZGRyZXNzAQUIYWRkcmVzc18JAAIBAiBzZXRTd2FwQ29udHJhY3Q6IGludmFsaWQgYWRkcmVzcwUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQERX3NhdmVTd2FwQ29udHJhY3QBCQERQGV4dHJOYXRpdmUoMTA2MikBBQhhZGRyZXNzXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxzZXRTd2FwTGltaXQBBmxpbWl0XwQDZXJyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIfc2V0U3dhcExpbWl0OiBwZXJtaXNzaW9uIGRlbmllZAMJAGcCAAAFBmxpbWl0XwkAAgECG3NldFN3YXBMaW1pdDogaW52YWxpZCBsaW1pdAUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQEOX3NhdmVTd2FwTGltaXQBBQZsaW1pdF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleUV33H4=", "height": 3828164, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F7rWpNHKefzE4euZX8vLeEPUrAkLrxTiC9B8RT6o5GaD Next: none Diff:
Old | New | Differences | |
---|---|---|---|
102 | 102 | } | |
103 | 103 | ||
104 | 104 | ||
105 | - | func _claimWAVESDLP () = { | |
106 | - | let result = invoke(_loadWavesDAOContract(), FUNC_CLAIM_LP, nil, nil) | |
107 | - | if ((result == result)) | |
108 | - | then match result { | |
109 | - | case a: Int => | |
110 | - | a | |
111 | - | case _ => | |
112 | - | throw("_claimWAVESDLP: revert") | |
113 | - | } | |
114 | - | else throw("Strict value is not equal to itself.") | |
115 | - | } | |
116 | - | ||
117 | - | ||
118 | 105 | @Callable(i) | |
119 | 106 | func init (claimer_) = { | |
120 | 107 | let multisig = valueOrErrorMessage(getString(KEY_MULTISIG), "init: no multisig set") | |
184 | 171 | @Callable(i) | |
185 | 172 | func claimAndSwapWAVESDLP () = { | |
186 | 173 | let asset = _getWAVESDLPAsset() | |
187 | - | let | |
188 | - | if (( | |
174 | + | let invocation = invoke(_loadWavesDAOContract(), FUNC_CLAIM_LP, nil, nil) | |
175 | + | if ((invocation == invocation)) | |
189 | 176 | then { | |
190 | 177 | let totalAmount = assetBalance(this, asset) | |
191 | 178 | if ((totalAmount == totalAmount)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let SEPARATOR = "__" | |
5 | 5 | ||
6 | 6 | let KEY_INIT = "INIT" | |
7 | 7 | ||
8 | 8 | let KEY_MULTISIG = "MULTISIG" | |
9 | 9 | ||
10 | 10 | let KEY_STATUS = "STATUS" | |
11 | 11 | ||
12 | 12 | let KEY_CLAIMER = "CLAIMER" | |
13 | 13 | ||
14 | 14 | let KEY_LAST_SWAP_AT = "LAST_SWAP_AT" | |
15 | 15 | ||
16 | 16 | let KEY_WAVES_DAO_CONTRACT = "WAVES_DAO_CONTRACT" | |
17 | 17 | ||
18 | 18 | let KEY_SWAP_CONTRACT = "SWAP_CONTRACT" | |
19 | 19 | ||
20 | 20 | let KEY_SWAP_LIMIT = "SWAP_LIMIT" | |
21 | 21 | ||
22 | 22 | let FUNC_CLAIM_LP = "claimLP" | |
23 | 23 | ||
24 | 24 | let FUNC_SWAP = "swap" | |
25 | 25 | ||
26 | 26 | let ONE_HOUR_IN_BLOCKS = 60 | |
27 | 27 | ||
28 | 28 | let COMPENSATION = 500000 | |
29 | 29 | ||
30 | 30 | func _validateAddress (address_) = match addressFromString(address_) { | |
31 | 31 | case a: Address => | |
32 | 32 | true | |
33 | 33 | case _ => | |
34 | 34 | false | |
35 | 35 | } | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_)) | |
39 | 39 | then true | |
40 | 40 | else (val_ > upperBoundary_)) | |
41 | 41 | then throw(err_) | |
42 | 42 | else true | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func _loadWavesDAOContract () = match getString(KEY_WAVES_DAO_CONTRACT) { | |
46 | 46 | case a: String => | |
47 | 47 | addressFromStringValue(a) | |
48 | 48 | case _ => | |
49 | 49 | Address(base58'') | |
50 | 50 | } | |
51 | 51 | ||
52 | 52 | ||
53 | 53 | func _saveWavesDAOContract (val_) = [StringEntry(KEY_WAVES_DAO_CONTRACT, toString(val_))] | |
54 | 54 | ||
55 | 55 | ||
56 | 56 | func _loadSwapContract () = match getString(KEY_SWAP_CONTRACT) { | |
57 | 57 | case a: String => | |
58 | 58 | addressFromStringValue(a) | |
59 | 59 | case _ => | |
60 | 60 | Address(base58'') | |
61 | 61 | } | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | func _saveSwapContract (val_) = [StringEntry(KEY_SWAP_CONTRACT, toString(val_))] | |
65 | 65 | ||
66 | 66 | ||
67 | 67 | func _loadLastSwapAt () = match getInteger(KEY_LAST_SWAP_AT) { | |
68 | 68 | case a: Int => | |
69 | 69 | a | |
70 | 70 | case _ => | |
71 | 71 | 0 | |
72 | 72 | } | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | func _saveLastSwapAt (val_) = [IntegerEntry(KEY_LAST_SWAP_AT, val_)] | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func _loadSwapLimit () = match getInteger(KEY_SWAP_LIMIT) { | |
79 | 79 | case a: Int => | |
80 | 80 | a | |
81 | 81 | case _ => | |
82 | 82 | 0 | |
83 | 83 | } | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func _saveSwapLimit (val_) = [IntegerEntry(KEY_SWAP_LIMIT, val_)] | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | func _getWAVESDLPAsset () = match getString(_loadWavesDAOContract(), "%s__lpAssetId") { | |
90 | 90 | case a: String => | |
91 | 91 | fromBase58String(a) | |
92 | 92 | case _ => | |
93 | 93 | throw("_getWAVESDLPAsset: revert") | |
94 | 94 | } | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func _getAvailableWAVESDLP () = match getInteger(_loadWavesDAOContract(), ("%s%s__available__" + toString(this))) { | |
98 | 98 | case a: Int => | |
99 | 99 | a | |
100 | 100 | case _ => | |
101 | 101 | 0 | |
102 | 102 | } | |
103 | 103 | ||
104 | 104 | ||
105 | - | func _claimWAVESDLP () = { | |
106 | - | let result = invoke(_loadWavesDAOContract(), FUNC_CLAIM_LP, nil, nil) | |
107 | - | if ((result == result)) | |
108 | - | then match result { | |
109 | - | case a: Int => | |
110 | - | a | |
111 | - | case _ => | |
112 | - | throw("_claimWAVESDLP: revert") | |
113 | - | } | |
114 | - | else throw("Strict value is not equal to itself.") | |
115 | - | } | |
116 | - | ||
117 | - | ||
118 | 105 | @Callable(i) | |
119 | 106 | func init (claimer_) = { | |
120 | 107 | let multisig = valueOrErrorMessage(getString(KEY_MULTISIG), "init: no multisig set") | |
121 | 108 | if ((multisig == multisig)) | |
122 | 109 | then { | |
123 | 110 | let init = valueOrElse(getBoolean(KEY_INIT), false) | |
124 | 111 | let err = if ((i.caller != this)) | |
125 | 112 | then throw("init: permission denied") | |
126 | 113 | else if (init) | |
127 | 114 | then throw("init: already initialized") | |
128 | 115 | else if (!(_validateAddress(claimer_))) | |
129 | 116 | then throw("init: invalid claimer address") | |
130 | 117 | else unit | |
131 | 118 | if ((err == err)) | |
132 | 119 | then $Tuple2([BooleanEntry(KEY_INIT, true), StringEntry(KEY_CLAIMER, claimer_)], unit) | |
133 | 120 | else throw("Strict value is not equal to itself.") | |
134 | 121 | } | |
135 | 122 | else throw("Strict value is not equal to itself.") | |
136 | 123 | } | |
137 | 124 | ||
138 | 125 | ||
139 | 126 | ||
140 | 127 | @Callable(i) | |
141 | 128 | func setMultisig (multisig_) = { | |
142 | 129 | let err = if ((i.caller != this)) | |
143 | 130 | then throw("setMultisig: permission denied") | |
144 | 131 | else if (!(_validateAddress(multisig_))) | |
145 | 132 | then throw("setMultisig: invalid multisig address") | |
146 | 133 | else unit | |
147 | 134 | if ((err == err)) | |
148 | 135 | then $Tuple2([StringEntry(KEY_MULTISIG, multisig_)], unit) | |
149 | 136 | else throw("Strict value is not equal to itself.") | |
150 | 137 | } | |
151 | 138 | ||
152 | 139 | ||
153 | 140 | ||
154 | 141 | @Callable(i) | |
155 | 142 | func setClaimer (claimer_) = { | |
156 | 143 | let err = if ((i.caller != this)) | |
157 | 144 | then throw("setClaimer: permission denied") | |
158 | 145 | else if (!(_validateAddress(claimer_))) | |
159 | 146 | then throw("setClaimer: invalid claimer address") | |
160 | 147 | else unit | |
161 | 148 | if ((err == err)) | |
162 | 149 | then $Tuple2([StringEntry(KEY_CLAIMER, claimer_)], unit) | |
163 | 150 | else throw("Strict value is not equal to itself.") | |
164 | 151 | } | |
165 | 152 | ||
166 | 153 | ||
167 | 154 | ||
168 | 155 | @Callable(i) | |
169 | 156 | func claim (amount_) = if ((i.caller != addressFromStringValue(getStringValue(KEY_CLAIMER)))) | |
170 | 157 | then throw("claim: permission denied") | |
171 | 158 | else if (if ((0 >= amount_)) | |
172 | 159 | then true | |
173 | 160 | else (amount_ > wavesBalance(this).regular)) | |
174 | 161 | then throw("claim: invalid amount") | |
175 | 162 | else $Tuple2([ScriptTransfer(i.caller, amount_, unit)], unit) | |
176 | 163 | ||
177 | 164 | ||
178 | 165 | ||
179 | 166 | @Callable(i) | |
180 | 167 | func getAvailableWAVESDLP () = $Tuple2(nil, _getAvailableWAVESDLP()) | |
181 | 168 | ||
182 | 169 | ||
183 | 170 | ||
184 | 171 | @Callable(i) | |
185 | 172 | func claimAndSwapWAVESDLP () = { | |
186 | 173 | let asset = _getWAVESDLPAsset() | |
187 | - | let | |
188 | - | if (( | |
174 | + | let invocation = invoke(_loadWavesDAOContract(), FUNC_CLAIM_LP, nil, nil) | |
175 | + | if ((invocation == invocation)) | |
189 | 176 | then { | |
190 | 177 | let totalAmount = assetBalance(this, asset) | |
191 | 178 | if ((totalAmount == totalAmount)) | |
192 | 179 | then { | |
193 | 180 | let swapLimit = _loadSwapLimit() | |
194 | 181 | let amountToSwap = if ((totalAmount > swapLimit)) | |
195 | 182 | then swapLimit | |
196 | 183 | else totalAmount | |
197 | 184 | let result = if ((height > (_loadLastSwapAt() + ONE_HOUR_IN_BLOCKS))) | |
198 | 185 | then invoke(_loadSwapContract(), FUNC_SWAP, [1, "", toString(this)], [AttachedPayment(asset, amountToSwap)]) | |
199 | 186 | else throw("claimAndSwapWAVESDLP: too often") | |
200 | 187 | if ((result == result)) | |
201 | 188 | then match result { | |
202 | 189 | case a: Int => | |
203 | 190 | if ((a > COMPENSATION)) | |
204 | 191 | then $Tuple2((_saveLastSwapAt(height) ++ [ScriptTransfer(i.caller, COMPENSATION, unit)]), unit) | |
205 | 192 | else throw("claimAndSwapWAVESDLP: too little amount got") | |
206 | 193 | case _ => | |
207 | 194 | throw("claimAndSwapWAVESDLP: swap revert") | |
208 | 195 | } | |
209 | 196 | else throw("Strict value is not equal to itself.") | |
210 | 197 | } | |
211 | 198 | else throw("Strict value is not equal to itself.") | |
212 | 199 | } | |
213 | 200 | else throw("Strict value is not equal to itself.") | |
214 | 201 | } | |
215 | 202 | ||
216 | 203 | ||
217 | 204 | ||
218 | 205 | @Callable(i) | |
219 | 206 | func setWavesDAOContract (address_) = { | |
220 | 207 | let err = if ((i.caller != this)) | |
221 | 208 | then throw("setWavesDAOContract: permission denied") | |
222 | 209 | else if (!(_validateAddress(address_))) | |
223 | 210 | then throw("setWavesDAOContract: invalid address") | |
224 | 211 | else unit | |
225 | 212 | if ((err == err)) | |
226 | 213 | then $Tuple2(_saveWavesDAOContract(addressFromStringValue(address_)), unit) | |
227 | 214 | else throw("Strict value is not equal to itself.") | |
228 | 215 | } | |
229 | 216 | ||
230 | 217 | ||
231 | 218 | ||
232 | 219 | @Callable(i) | |
233 | 220 | func setSwapContract (address_) = { | |
234 | 221 | let err = if ((i.caller != this)) | |
235 | 222 | then throw("setSwapContract: permission denied") | |
236 | 223 | else if (!(_validateAddress(address_))) | |
237 | 224 | then throw("setSwapContract: invalid address") | |
238 | 225 | else unit | |
239 | 226 | if ((err == err)) | |
240 | 227 | then $Tuple2(_saveSwapContract(addressFromStringValue(address_)), unit) | |
241 | 228 | else throw("Strict value is not equal to itself.") | |
242 | 229 | } | |
243 | 230 | ||
244 | 231 | ||
245 | 232 | ||
246 | 233 | @Callable(i) | |
247 | 234 | func setSwapLimit (limit_) = { | |
248 | 235 | let err = if ((i.caller != this)) | |
249 | 236 | then throw("setSwapLimit: permission denied") | |
250 | 237 | else if ((0 >= limit_)) | |
251 | 238 | then throw("setSwapLimit: invalid limit") | |
252 | 239 | else unit | |
253 | 240 | if ((err == err)) | |
254 | 241 | then $Tuple2(_saveSwapLimit(limit_), unit) | |
255 | 242 | else throw("Strict value is not equal to itself.") | |
256 | 243 | } | |
257 | 244 | ||
258 | 245 | ||
259 | 246 | @Verifier(tx) | |
260 | 247 | func verify () = match getString(KEY_MULTISIG) { | |
261 | 248 | case multisig: String => | |
262 | 249 | valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false) | |
263 | 250 | case _ => | |
264 | 251 | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
265 | 252 | } | |
266 | 253 |
github/deemru/w8io/786bc32 34.35 ms ◑