tx · 5LF2VpEugC1jMdxK558BdQbWAiehHSZv1JqAkjs3AcwV 3MupUouLsuV3aTwaZv2TM69VkDBUSQ6Xw9D: -0.03400000 Waves 2023.03.03 23:02 [2474332] smart account 3MupUouLsuV3aTwaZv2TM69VkDBUSQ6Xw9D > SELF 0.00000000 Waves
{ "type": 13, "id": "5LF2VpEugC1jMdxK558BdQbWAiehHSZv1JqAkjs3AcwV", "fee": 3400000, "feeAssetId": null, "timestamp": 1677873853717, "version": 2, "chainId": 84, "sender": "3MupUouLsuV3aTwaZv2TM69VkDBUSQ6Xw9D", "senderPublicKey": "EjqRoq1WePrhXmPrEaqyCJtYr88atkFmDM8pvro1tFun", "proofs": [ "4tjsR5A7DDnPHHuKikVxKJmChW2FCCLLJvkPgLZ2xNw9QmtSmAmzbYSEhnVfShEhb3po62ePxmWAwwt7qtSbSoCh" ], "script": "base64:BgIiCAISBgoECAgICBIECgIICBIECgIIARIAEgMKAQgSAwoBCBIAB2tfZnVuZHMCB2tfZnVuZHMAD2tfdmlyZXNfYWRkcmVzcwIPa192aXJlc19hZGRyZXNzAA1rX3ZpcmVzX3ZhdWx0Ag1rX3ZpcmVzX3ZhdWx0ABZrX2Fzc2V0X2NsYWltZWRfcHJvZml0AhZrX2Fzc2V0X2NsYWltZWRfcHJvZml0ABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwAPa19hZG1pbl9hZGRyZXNzAg9rX2FkbWluX2FkZHJlc3MADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBCWJhbGFuY2VPZgEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUHa19mdW5kcwUIX2Fzc2V0SWQAAAELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCJ0Nvb3JkaW5hdG9yIG5vdCBzZXQgVmlyZXMgQXNzZXQgTWFuYWdlcgEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQCD01hbmFnZXIgbm90IHNldAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEMdmlyZXNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFD2tfdmlyZXNfYWRkcmVzcwINVmlyZXMgbm90IHNldAEKdmlyZXNWYXVsdAEIX2Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUNa192aXJlc192YXVsdAUIX2Fzc2V0SWQJAKwCAgITTm8gdmF1bHQgZm9yIHRva2VuIAUIX2Fzc2V0SWQJAKwCAgIaSW52YWxpZCBhZGRyZXNzIGZvciB0b2tlbiAFCF9hc3NldElkAQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAAACBQhfYWRkcmVzcwkApQgBCQEObWFuYWdlckFkZHJlc3MAAQt1cGRhdGVGdW5kcwIIX2Fzc2V0SWQGX3ZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQdrX2Z1bmRzBQhfYXNzZXRJZAUGX3ZhbHVlBQNuaWwGAWkBCmluaXRpYWxpemUEDF9jb29yZGluYXRvcg1fdmlyZXNBZGRyZXNzDV9xdW90ZUFzc2V0SWQQX3F1b3RlQXNzZXRWYXVsdAMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVW5hYmxlIHRvIGluaXRpYWxpemUJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tfdmlyZXNfYWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1fdmlyZXNBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdmlyZXNfdmF1bHQFDV9xdW90ZUFzc2V0SWQJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUQX3F1b3RlQXNzZXRWYXVsdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQ1hZGRUb2tlblZhdWx0AghfYXNzZXRJZA1fdmF1bHRBZGRyZXNzAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhxJbnZhbGlkIGFkZFRva2VuVmF1bHQgcGFyYW1zCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdmlyZXNfdmF1bHQFCF9hc3NldElkCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDV92YXVsdEFkZHJlc3MFA25pbAFpAQh3aXRoZHJhdwIIX2Fzc2V0SWQHX2Ftb3VudAMDAwkBASEBCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAGYCBQdfYW1vdW50CQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAi5JbnZhbGlkIHdpdGhkcmF3IHBhcmFtcyAodmlyZXMgYXNzZXQgbWFuYWdlcikgCQCkAwEFB19hbW91bnQCAyA+IAkApAMBCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQEB3Vuc3Rha2UJAPwHBAkBDHZpcmVzQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFCF9hc3NldElkCQDMCAIFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEE2N1cnJlbnRBc3NldEJhbGFuY2UJAGUCCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQFB19hbW91bnQJAM4IAgkBC3VwZGF0ZUZ1bmRzAgUIX2Fzc2V0SWQFE2N1cnJlbnRBc3NldEJhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdfYW1vdW50CQDZBAEFCF9hc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHZGVwb3NpdAAEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIKTm8gYXNzZXRJZAMDCQEBIQEJAQtpbml0aWFsaXplZAAGAwkBASEBCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAcJAAIBAixJbnZhbGlkIGRlcG9zaXQgcGFyYW1zICh2aXJlcyBhc3NldCBtYW5hZ2VyKQQFdmF1bHQJAQp2aXJlc1ZhdWx0AQUIX2Fzc2V0SWQEBXN0YWtlCQD8BwQJAQx2aXJlc0FkZHJlc3MAAgdkZXBvc2l0CQDMCAIJAKUIAQUFdmF1bHQJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBNjdXJyZW50QXNzZXRCYWxhbmNlCQBkAgkBCWJhbGFuY2VPZgEFCF9hc3NldElkBQdfYW1vdW50CQELdXBkYXRlRnVuZHMCBQhfYXNzZXRJZAUTY3VycmVudEFzc2V0QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjbGFpbVByb2ZpdAEIX2Fzc2V0SWQDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyCQEObWFuYWdlckFkZHJlc3MACQACAQIwSW52YWxpZCBjbGFpbVByb2ZpdCBwYXJhbXMgKHZpcmVzIGFzc2V0IG1hbmFnZXIpBA1jdXJyZW50QW1vdW50CQD8BwQJAQp2aXJlc1ZhdWx0AQUIX2Fzc2V0SWQCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQ1jdXJyZW50QW1vdW50BQ1jdXJyZW50QW1vdW50BBNjdXJyZW50QXNzZXRCYWxhbmNlBAckbWF0Y2gwBQ1jdXJyZW50QW1vdW50AwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwCAUBdAJfMwkAAgECGkludmFsaWQgY3VycmVudEFtb3VudCB0eXBlBAZwcm9maXQJAGUCBRNjdXJyZW50QXNzZXRCYWxhbmNlCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQEB3Vuc3Rha2UJAPwHBAkBDHZpcmVzQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFCF9hc3NldElkCQDMCAIFBnByb2ZpdAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGcHJvZml0CQDZBAEFCF9hc3NldElkBQNuaWwFBnByb2ZpdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARB2aWV3X2NsYWltUHJvZml0AQhfYXNzZXRJZAMJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECNUludmFsaWQgdmlld19jbGFpbVByb2ZpdCBwYXJhbXMgKHZpcmVzIGFzc2V0IG1hbmFnZXIpBA1jdXJyZW50QW1vdW50CQD8BwQJAQp2aXJlc1ZhdWx0AQUIX2Fzc2V0SWQCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQ1jdXJyZW50QW1vdW50BQ1jdXJyZW50QW1vdW50BBNjdXJyZW50QXNzZXRCYWxhbmNlBAckbWF0Y2gwBQ1jdXJyZW50QW1vdW50AwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwCAUBdAJfMwkAAgECGkludmFsaWQgY3VycmVudEFtb3VudCB0eXBlBAZwcm9maXQJAGUCBRNjdXJyZW50QXNzZXRCYWxhbmNlCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQkBCWJhbGFuY2VPZgEFCF9hc3NldElkAgEsCQCkAwEFE2N1cnJlbnRBc3NldEJhbGFuY2UCASwJAKQDAQUGcHJvZml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleefC3L8=", "height": 2474332, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let k_funds = "k_funds" | |
5 | + | ||
6 | + | let k_vires_address = "k_vires_address" | |
7 | + | ||
8 | + | let k_vires_vault = "k_vires_vault" | |
9 | + | ||
10 | + | let k_asset_claimed_profit = "k_asset_claimed_profit" | |
11 | + | ||
12 | + | let k_coordinatorAddress = "k_coordinatorAddress" | |
13 | + | ||
14 | + | let k_manager_address = "k_manager_address" | |
15 | + | ||
16 | + | let k_admin_address = "k_admin_address" | |
17 | + | ||
18 | + | let k_initialized = "k_initialized" | |
19 | + | ||
20 | + | func toCompositeKey (_key,_address) = ((_key + "_") + _address) | |
21 | + | ||
22 | + | ||
23 | + | func balanceOf (_assetId) = valueOrElse(getInteger(this, toCompositeKey(k_funds, _assetId)), 0) | |
24 | + | ||
25 | + | ||
26 | + | func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set Vires Asset Manager") | |
27 | + | ||
28 | + | ||
29 | + | func managerAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_manager_address), "Manager not set")), "Manager not set") | |
30 | + | ||
31 | + | ||
32 | + | func initialized () = valueOrElse(getBoolean(this, k_initialized), false) | |
33 | + | ||
34 | + | ||
35 | + | func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address)) | |
36 | + | ||
37 | + | ||
38 | + | func viresAddress () = valueOrErrorMessage(addressFromString(getStringValue(this, k_vires_address)), "Vires not set") | |
39 | + | ||
40 | + | ||
41 | + | func viresVault (_assetId) = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, toCompositeKey(k_vires_vault, _assetId)), ("No vault for token " + _assetId))), ("Invalid address for token " + _assetId)) | |
42 | + | ||
43 | + | ||
44 | + | func isWhitelist (_address) = (_address == toString(managerAddress())) | |
45 | + | ||
46 | + | ||
47 | + | func updateFunds (_assetId,_value) = [IntegerEntry(toCompositeKey(k_funds, _assetId), _value)] | |
48 | + | ||
49 | + | ||
50 | + | @Callable(i) | |
51 | + | func initialize (_coordinator,_viresAddress,_quoteAssetId,_quoteAssetVault) = if (if (initialized()) | |
52 | + | then true | |
53 | + | else (i.caller != this)) | |
54 | + | then throw("Unable to initialize") | |
55 | + | else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), StringEntry(k_vires_address, toString(addressFromStringValue(_viresAddress))), StringEntry(toCompositeKey(k_vires_vault, _quoteAssetId), toString(addressFromStringValue(_quoteAssetVault))), BooleanEntry(k_initialized, true)] | |
56 | + | ||
57 | + | ||
58 | + | ||
59 | + | @Callable(i) | |
60 | + | func addTokenVault (_assetId,_vaultAddress) = if (if (!(initialized())) | |
61 | + | then true | |
62 | + | else (i.caller != adminAddress())) | |
63 | + | then throw("Invalid addTokenVault params") | |
64 | + | else [StringEntry(toCompositeKey(k_vires_vault, _assetId), toString(addressFromStringValue(_vaultAddress)))] | |
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | @Callable(i) | |
69 | + | func withdraw (_assetId,_amount) = if (if (if (!(isWhitelist(toString(i.caller)))) | |
70 | + | then true | |
71 | + | else !(initialized())) | |
72 | + | then true | |
73 | + | else (_amount > balanceOf(_assetId))) | |
74 | + | then throw(((("Invalid withdraw params (vires asset manager) " + toString(_amount)) + " > ") + toString(balanceOf(_assetId)))) | |
75 | + | else { | |
76 | + | let unstake = invoke(viresAddress(), "withdraw", [_assetId, _amount], nil) | |
77 | + | if ((unstake == unstake)) | |
78 | + | then { | |
79 | + | let currentAssetBalance = (balanceOf(_assetId) - _amount) | |
80 | + | (updateFunds(_assetId, currentAssetBalance) ++ [ScriptTransfer(i.caller, _amount, fromBase58String(_assetId))]) | |
81 | + | } | |
82 | + | else throw("Strict value is not equal to itself.") | |
83 | + | } | |
84 | + | ||
85 | + | ||
86 | + | ||
87 | + | @Callable(i) | |
88 | + | func deposit () = { | |
89 | + | let _amount = i.payments[0].amount | |
90 | + | let _assetId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "No assetId")) | |
91 | + | if (if (!(initialized())) | |
92 | + | then true | |
93 | + | else if (!(isWhitelist(toString(i.caller)))) | |
94 | + | then (i.caller != adminAddress()) | |
95 | + | else false) | |
96 | + | then throw("Invalid deposit params (vires asset manager)") | |
97 | + | else { | |
98 | + | let vault = viresVault(_assetId) | |
99 | + | let stake = invoke(viresAddress(), "deposit", [toString(vault), false], [AttachedPayment(i.payments[0].assetId, _amount)]) | |
100 | + | if ((stake == stake)) | |
101 | + | then { | |
102 | + | let currentAssetBalance = (balanceOf(_assetId) + _amount) | |
103 | + | updateFunds(_assetId, currentAssetBalance) | |
104 | + | } | |
105 | + | else throw("Strict value is not equal to itself.") | |
106 | + | } | |
107 | + | } | |
108 | + | ||
109 | + | ||
110 | + | ||
111 | + | @Callable(i) | |
112 | + | func claimProfit (_assetId) = if (if (!(initialized())) | |
113 | + | then true | |
114 | + | else (i.caller != managerAddress())) | |
115 | + | then throw("Invalid claimProfit params (vires asset manager)") | |
116 | + | else { | |
117 | + | let currentAmount = invoke(viresVault(_assetId), "getCurrentTotals", [toString(this)], nil) | |
118 | + | if ((currentAmount == currentAmount)) | |
119 | + | then { | |
120 | + | let currentAssetBalance = match currentAmount { | |
121 | + | case t: (Int, Int, Int, Int) => | |
122 | + | t._3 | |
123 | + | case _ => | |
124 | + | throw("Invalid currentAmount type") | |
125 | + | } | |
126 | + | let profit = (currentAssetBalance - balanceOf(_assetId)) | |
127 | + | let unstake = invoke(viresAddress(), "withdraw", [_assetId, profit], nil) | |
128 | + | if ((unstake == unstake)) | |
129 | + | then $Tuple2([ScriptTransfer(i.caller, profit, fromBase58String(_assetId))], profit) | |
130 | + | else throw("Strict value is not equal to itself.") | |
131 | + | } | |
132 | + | else throw("Strict value is not equal to itself.") | |
133 | + | } | |
134 | + | ||
135 | + | ||
136 | + | ||
137 | + | @Callable(i) | |
138 | + | func view_claimProfit (_assetId) = if (!(initialized())) | |
139 | + | then throw("Invalid view_claimProfit params (vires asset manager)") | |
140 | + | else { | |
141 | + | let currentAmount = invoke(viresVault(_assetId), "getCurrentTotals", [toString(this)], nil) | |
142 | + | if ((currentAmount == currentAmount)) | |
143 | + | then { | |
144 | + | let currentAssetBalance = match currentAmount { | |
145 | + | case t: (Int, Int, Int, Int) => | |
146 | + | t._3 | |
147 | + | case _ => | |
148 | + | throw("Invalid currentAmount type") | |
149 | + | } | |
150 | + | let profit = (currentAssetBalance - balanceOf(_assetId)) | |
151 | + | throw(((((toString(balanceOf(_assetId)) + ",") + toString(currentAssetBalance)) + ",") + toString(profit))) | |
152 | + | } | |
153 | + | else throw("Strict value is not equal to itself.") | |
154 | + | } | |
155 | + | ||
156 | + | ||
157 | + | @Verifier(tx) | |
158 | + | func verify () = { | |
159 | + | let coordinatorStr = getString(this, k_coordinatorAddress) | |
160 | + | if (isDefined(coordinatorStr)) | |
161 | + | then { | |
162 | + | let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address) | |
163 | + | if (isDefined(admin)) | |
164 | + | then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false) | |
165 | + | else throw("unable to verify: admin not set in coordinator") | |
166 | + | } | |
167 | + | else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
168 | + | } | |
169 | + |
github/deemru/w8io/169f3d6 24.67 ms ◑![]()