2021.03.18 14:13 [2507716] smart account 3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp > SELF 0.00000000 Waves

{ "type": 13, "id": "4gJ4pg5doqQi5mRxFz6YPnxCwtvWWsAVeCi1N2qmM4EH", "fee": 1400000, "feeAssetId": null, "timestamp": 1616065955517, "version": 2, "chainId": 87, "sender": "3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp", "senderPublicKey": "GTY8yEJ2S4heRompxyvbJoBN1Td5BM5Pp4JgVbj9tmCw", "proofs": [ "", "2ZTM26BHz1wMV54Pci4PMpyMphMua4eBmdLvVFW641kShvGFpJsXKbyJbt5ZtQrvsuLdvXwL76xownHCx18L1AYu", "2Y5nAP6RpZUH8kmysQH7bJSkMZX3NCo5fetjN67TCbPZ8ExWmMXUBvpAJzryWDk6WGPFH9YrWeXgbouXXVeJgbqV" ], "script": "base64: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", "height": 2507716, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GE7S8X7jzeh7k63tto64uJV7oJwKtDsYWBFi1QmcwYuT Next: 9E1chLu73D4ZGoPJfJv46dgh1cmvjTfbX56nKjaGDJim Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
4+let governanceAddress = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
55
6-let governanceContract = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
6+let oracleAddress = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
77
88 let adminInvoke = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
99
1313
1414 let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
1515
16-let exchangers = [getStringValue(oracle, "waves_usdn"), getStringValue(oracle, "btc_usdn"), getStringValue(oracle, "waves_btc"), getStringValue(oracle, "nsbt_usdn"), getStringValue(oracle, "wct_usdn"), getStringValue(oracle, "usdt_usdn"), getStringValue(oracle, "west_usdn"), getStringValue(oracle, "waves_eurn"), getStringValue(oracle, "usdtlp_usdn"), getStringValue(oracle, "swop_usdn"), getStringValue(oracle, "eth_usdn"), getStringValue(oracle, "usdc_usdn"), getStringValue(oracle, "usdclp_usdn"), getStringValue(oracle, "crv_usdn")]
16+let keyPrefixPoolName = "pool_"
1717
1818
1919 @Verifier(tx)
2020 func verify () = match tx {
2121 case invoke: InvokeScriptTransaction =>
22- let dAppIsExchanger = containsElement(exchangers, toBase58String(addressFromRecipient(invoke.dApp).bytes))
23- let dAppIsGovernance = (invoke.dApp == governanceContract)
24- let callExchange = (invoke.function == "exchange")
25- let callAirdrop = (invoke.function == "airDrop")
22+ let isExchangeCall = if (isDefined(getString(oracleAddress, (keyPrefixPoolName + toString(addressFromRecipient(invoke.dApp))))))
23+ then (invoke.function == "exchange")
24+ else false
25+ let isAirdropCall = if ((invoke.dApp == governanceAddress))
26+ then (invoke.function == "airDrop")
27+ else false
28+ let isUpdateWeightsCall = if ((invoke.dApp == governanceAddress))
29+ then (invoke.function == "updateWeights")
30+ else false
2631 let signedByAdmin = sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke)
27- if (if (if (if (dAppIsExchanger)
28- then callExchange
32+ if (if (if (if (isExchangeCall)
33+ then true
34+ else isAirdropCall)
35+ then (size(invoke.payments) == 1)
2936 else false)
3037 then true
31- else if (dAppIsGovernance)
32- then callAirdrop
38+ else if (isUpdateWeightsCall)
39+ then (size(invoke.payments) == 0)
3340 else false)
34- then (size(invoke.payments) == 1)
35- else false)
3641 then signedByAdmin
3742 else false
3843 case _ =>
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
4+let governanceAddress = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
55
6-let governanceContract = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
6+let oracleAddress = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
77
88 let adminInvoke = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
99
1010 let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
1111
1212 let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
1313
1414 let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
1515
16-let exchangers = [getStringValue(oracle, "waves_usdn"), getStringValue(oracle, "btc_usdn"), getStringValue(oracle, "waves_btc"), getStringValue(oracle, "nsbt_usdn"), getStringValue(oracle, "wct_usdn"), getStringValue(oracle, "usdt_usdn"), getStringValue(oracle, "west_usdn"), getStringValue(oracle, "waves_eurn"), getStringValue(oracle, "usdtlp_usdn"), getStringValue(oracle, "swop_usdn"), getStringValue(oracle, "eth_usdn"), getStringValue(oracle, "usdc_usdn"), getStringValue(oracle, "usdclp_usdn"), getStringValue(oracle, "crv_usdn")]
16+let keyPrefixPoolName = "pool_"
1717
1818
1919 @Verifier(tx)
2020 func verify () = match tx {
2121 case invoke: InvokeScriptTransaction =>
22- let dAppIsExchanger = containsElement(exchangers, toBase58String(addressFromRecipient(invoke.dApp).bytes))
23- let dAppIsGovernance = (invoke.dApp == governanceContract)
24- let callExchange = (invoke.function == "exchange")
25- let callAirdrop = (invoke.function == "airDrop")
22+ let isExchangeCall = if (isDefined(getString(oracleAddress, (keyPrefixPoolName + toString(addressFromRecipient(invoke.dApp))))))
23+ then (invoke.function == "exchange")
24+ else false
25+ let isAirdropCall = if ((invoke.dApp == governanceAddress))
26+ then (invoke.function == "airDrop")
27+ else false
28+ let isUpdateWeightsCall = if ((invoke.dApp == governanceAddress))
29+ then (invoke.function == "updateWeights")
30+ else false
2631 let signedByAdmin = sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke)
27- if (if (if (if (dAppIsExchanger)
28- then callExchange
32+ if (if (if (if (isExchangeCall)
33+ then true
34+ else isAirdropCall)
35+ then (size(invoke.payments) == 1)
2936 else false)
3037 then true
31- else if (dAppIsGovernance)
32- then callAirdrop
38+ else if (isUpdateWeightsCall)
39+ then (size(invoke.payments) == 0)
3340 else false)
34- then (size(invoke.payments) == 1)
35- else false)
3641 then signedByAdmin
3742 else false
3843 case _ =>
3944 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
4045 then 1
4146 else 0
4247 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
4348 then 1
4449 else 0
4550 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
4651 then 1
4752 else 0
4853 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
4954 }
5055

github/deemru/w8io/786bc32 
35.86 ms