tx · 2HgwdxZSeApFuBkMquE1E6DgR8rZBnuF356Smo21vmUb

3PC63UyjuKYohBwBA2gaUEu4LXr6HB8acrm:  -0.01600000 Waves

2023.02.01 16:06 [3496146] smart account 3PC63UyjuKYohBwBA2gaUEu4LXr6HB8acrm > SELF 0.00000000 Waves

{ "type": 13, "id": "2HgwdxZSeApFuBkMquE1E6DgR8rZBnuF356Smo21vmUb", "fee": 1600000, "feeAssetId": null, "timestamp": 1675256635974, "version": 2, "chainId": 87, "sender": "3PC63UyjuKYohBwBA2gaUEu4LXr6HB8acrm", "senderPublicKey": "3h1iv2Yfaw1ryKh5jRMeTicLYmFqYU6Au1uJxRrSUC9L", "proofs": [ "we19QSAzAYggr7E8wbtfbVHrHPG5mn3nENfp74A4GXjSoE5qv7apQEQy7M8DaixMyPJmnJzJUgAashgEFHcNKjA" ], "script": "base64:BgIMCAISAwoBCBIDCgEIEQANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAEWtfZmFybWluZ19hZGRyZXNzAhFrX2Zhcm1pbmdfYWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAEmtfZ292ZXJuYW5jZV9hc3NldAILa19nb3ZfYXNzZXQADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ9nb3Zlcm5hbmNlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfZ292ZXJuYW5jZV9hc3NldAEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEOZmFybWluZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19mYXJtaW5nX2FkZHJlc3MCD0Zhcm1pbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAgFpAQppbml0aWFsaXplAQxfY29vcmRpbmF0b3IDAwkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECFFVuYWJsZSB0byBpbml0aWFsaXplCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDF9jb29yZGluYXRvcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpARNwZXJmb3JtSG91c2VrZWVwaW5nAQtfcGF5RnVuZGluZwQTZG9BY2tSZXdhcmRzU3Rha2luZwkA/AcECQEOc3Rha2luZ0FkZHJlc3MAAgphY2tSZXdhcmRzBQNuaWwFA25pbAMJAAACBRNkb0Fja1Jld2FyZHNTdGFraW5nBRNkb0Fja1Jld2FyZHNTdGFraW5nBBNkb0Fja1Jld2FyZHNGYXJtaW5nCQD8BwQJAQ5mYXJtaW5nQWRkcmVzcwACCmFja1Jld2FyZHMFA25pbAUDbmlsAwkAAAIFE2RvQWNrUmV3YXJkc0Zhcm1pbmcFE2RvQWNrUmV3YXJkc0Zhcm1pbmcEEWRvQWNrUmV3YXJkc1ZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgphY2tSZXdhcmRzBQNuaWwFA25pbAMJAAACBRFkb0Fja1Jld2FyZHNWYXVsdAURZG9BY2tSZXdhcmRzVmF1bHQEBGFtbXMJAQlzdHJUb0xpc3QBBQtfcGF5RnVuZGluZwoBB2NvbXB1dGUCBF9hY2MEX2FtbQQMZG9QYXlGdW5kaW5nCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0CCnBheUZ1bmRpbmcFA25pbAUDbmlsAwkAAAIFDGRvUGF5RnVuZGluZwUMZG9QYXlGdW5kaW5nBQRfYWNjCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgACJGwFBGFtbXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NvbXB1dGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEDmNvb3JkaW5hdG9yU3RyCQCdCAIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAwkBCWlzRGVmaW5lZAEFDmNvb3JkaW5hdG9yU3RyBAVhZG1pbgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQ5jb29yZGluYXRvclN0cgUPa19hZG1pbl9hZGRyZXNzAwkBCWlzRGVmaW5lZAEFBWFkbWluCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBWFkbWluCQCsAgIJAKwCAgkArAICAgdzdGF0dXNfCQClCAEFBHRoaXMCAV8JANgEAQgFAnR4AmlkBwkAAgECLnVuYWJsZSB0byB2ZXJpZnk6IGFkbWluIG5vdCBzZXQgaW4gY29vcmRpbmF0b3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkYiSm2", "height": 3496146, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 76k2YKjUtnJ9vXBGvsnWFf2bYSCQC1FXY85DVd3jz5ft Next: 63ac1YREq7HwiS18HhGHwEZuN1huwLzDSkkKPTw3Ybs1 Diff:
OldNewDifferences
99
1010 let k_farming_address = "k_farming_address"
1111
12+let k_vault_address = "k_vault_address"
13+
1214 let k_governance_asset = "k_gov_asset"
1315
1416 let k_quote_asset = "k_quote_asset"
15-
16-let k_admin_public_key = "k_admin_public_key"
1717
1818 let k_admin_address = "k_admin_address"
1919
2828 func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
2929
3030
31-func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
32-
33-
3431 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
3532
3633
4037 func stakingAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_staking_address)), "Staking not set")
4138
4239
43-func farmingAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_farming_address)), "Staking not set")
40+func farmingAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_farming_address)), "Farming not set")
41+
42+
43+func vaultAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_vault_address)), "Vault not set")
4444
4545
4646 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
4747
4848
4949 @Callable(i)
50-func initialize (_coordinator) = if (initialized())
51- then throw("Already initialized")
52- else [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)]
50+func initialize (_coordinator) = if (if (initialized())
51+ then true
52+ else (i.caller != this))
53+ then throw("Unable to initialize")
54+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), BooleanEntry(k_initialized, true)]
5355
5456
5557
6163 let doAckRewardsFarming = invoke(farmingAddress(), "ackRewards", nil, nil)
6264 if ((doAckRewardsFarming == doAckRewardsFarming))
6365 then {
64- let amms = strToList(_payFunding)
65- func compute (_acc,_amm) = {
66- let doPayFunding = invoke(addressFromStringValue(_amm), "payFunding", nil, nil)
67- if ((doPayFunding == doPayFunding))
68- then _acc
69- else throw("Strict value is not equal to itself.")
70- }
66+ let doAckRewardsVault = invoke(vaultAddress(), "ackRewards", nil, nil)
67+ if ((doAckRewardsVault == doAckRewardsVault))
68+ then {
69+ let amms = strToList(_payFunding)
70+ func compute (_acc,_amm) = {
71+ let doPayFunding = invoke(addressFromStringValue(_amm), "payFunding", nil, nil)
72+ if ((doPayFunding == doPayFunding))
73+ then _acc
74+ else throw("Strict value is not equal to itself.")
75+ }
7176
72- let $l = amms
73- let $s = size($l)
74- let $acc0 = nil
75- func $f0_1 ($a,$i) = if (($i >= $s))
76- then $a
77- else compute($a, $l[$i])
77+ let $l = amms
78+ let $s = size($l)
79+ let $acc0 = nil
80+ func $f0_1 ($a,$i) = if (($i >= $s))
81+ then $a
82+ else compute($a, $l[$i])
7883
79- func $f0_2 ($a,$i) = if (($i >= $s))
80- then $a
81- else throw("List size exceeds 20")
84+ func $f0_2 ($a,$i) = if (($i >= $s))
85+ then $a
86+ else throw("List size exceeds 20")
8287
83- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
88+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
89+ }
90+ else throw("Strict value is not equal to itself.")
8491 }
8592 else throw("Strict value is not equal to itself.")
8693 }
8996
9097
9198 @Verifier(tx)
92-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
99+func verify () = {
100+ let coordinatorStr = getString(this, k_coordinatorAddress)
101+ if (isDefined(coordinatorStr))
102+ then {
103+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
104+ if (isDefined(admin))
105+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
106+ else throw("unable to verify: admin not set in coordinator")
107+ }
108+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
109+ }
93110
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_initialized = "k_initialized"
55
66 let k_coordinatorAddress = "k_coordinatorAddress"
77
88 let k_staking_address = "k_staking_address"
99
1010 let k_farming_address = "k_farming_address"
1111
12+let k_vault_address = "k_vault_address"
13+
1214 let k_governance_asset = "k_gov_asset"
1315
1416 let k_quote_asset = "k_quote_asset"
15-
16-let k_admin_public_key = "k_admin_public_key"
1717
1818 let k_admin_address = "k_admin_address"
1919
2020 func strToList (_str) = if ((_str == ""))
2121 then nil
2222 else split(_str, ",")
2323
2424
2525 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
2626
2727
2828 func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
2929
3030
31-func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
32-
33-
3431 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
3532
3633
3734 func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
3835
3936
4037 func stakingAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_staking_address)), "Staking not set")
4138
4239
43-func farmingAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_farming_address)), "Staking not set")
40+func farmingAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_farming_address)), "Farming not set")
41+
42+
43+func vaultAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_vault_address)), "Vault not set")
4444
4545
4646 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
4747
4848
4949 @Callable(i)
50-func initialize (_coordinator) = if (initialized())
51- then throw("Already initialized")
52- else [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)]
50+func initialize (_coordinator) = if (if (initialized())
51+ then true
52+ else (i.caller != this))
53+ then throw("Unable to initialize")
54+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), BooleanEntry(k_initialized, true)]
5355
5456
5557
5658 @Callable(i)
5759 func performHousekeeping (_payFunding) = {
5860 let doAckRewardsStaking = invoke(stakingAddress(), "ackRewards", nil, nil)
5961 if ((doAckRewardsStaking == doAckRewardsStaking))
6062 then {
6163 let doAckRewardsFarming = invoke(farmingAddress(), "ackRewards", nil, nil)
6264 if ((doAckRewardsFarming == doAckRewardsFarming))
6365 then {
64- let amms = strToList(_payFunding)
65- func compute (_acc,_amm) = {
66- let doPayFunding = invoke(addressFromStringValue(_amm), "payFunding", nil, nil)
67- if ((doPayFunding == doPayFunding))
68- then _acc
69- else throw("Strict value is not equal to itself.")
70- }
66+ let doAckRewardsVault = invoke(vaultAddress(), "ackRewards", nil, nil)
67+ if ((doAckRewardsVault == doAckRewardsVault))
68+ then {
69+ let amms = strToList(_payFunding)
70+ func compute (_acc,_amm) = {
71+ let doPayFunding = invoke(addressFromStringValue(_amm), "payFunding", nil, nil)
72+ if ((doPayFunding == doPayFunding))
73+ then _acc
74+ else throw("Strict value is not equal to itself.")
75+ }
7176
72- let $l = amms
73- let $s = size($l)
74- let $acc0 = nil
75- func $f0_1 ($a,$i) = if (($i >= $s))
76- then $a
77- else compute($a, $l[$i])
77+ let $l = amms
78+ let $s = size($l)
79+ let $acc0 = nil
80+ func $f0_1 ($a,$i) = if (($i >= $s))
81+ then $a
82+ else compute($a, $l[$i])
7883
79- func $f0_2 ($a,$i) = if (($i >= $s))
80- then $a
81- else throw("List size exceeds 20")
84+ func $f0_2 ($a,$i) = if (($i >= $s))
85+ then $a
86+ else throw("List size exceeds 20")
8287
83- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
88+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
89+ }
90+ else throw("Strict value is not equal to itself.")
8491 }
8592 else throw("Strict value is not equal to itself.")
8693 }
8794 else throw("Strict value is not equal to itself.")
8895 }
8996
9097
9198 @Verifier(tx)
92-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
99+func verify () = {
100+ let coordinatorStr = getString(this, k_coordinatorAddress)
101+ if (isDefined(coordinatorStr))
102+ then {
103+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
104+ if (isDefined(admin))
105+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
106+ else throw("unable to verify: admin not set in coordinator")
107+ }
108+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
109+ }
93110

github/deemru/w8io/3ef1775 
37.14 ms