2022.12.07 11:42 [3415160] smart account 3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp > SELF 0.00000000 Waves
{
"type": 13,
"id": "DzpYgnwEZ7n38gbBjQqVkb2KVXWUXRsMbqPWnmsyeVLs",
"fee": 700000,
"feeAssetId": null,
"timestamp": 1670402490756,
"version": 2,
"chainId": 87,
"sender": "3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp",
"senderPublicKey": "GTY8yEJ2S4heRompxyvbJoBN1Td5BM5Pp4JgVbj9tmCw",
"proofs": [
"",
"29Gy6UufzS2Sgqrg5fSDKQ5Qkuv9iv5EbmgwteHe8nzRc1irQb4AZzzX5R16DvaHKarY6EX6WH2mH1zp8tJ5yJUk",
"uZHSFEyYenPkEFat26676NAvDFuz7iidbczC5dDALtuX7mStW5fstEQAwpQvMSHhfGMyMBX178iYmjQkiueZ3KY"
],
"script": "base64:BgICCAITAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAMa0Zhcm1BZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MAD2tTdXJ2ZXlzQWRkcmVzcwIPc3VydmV5c19hZGRyZXNzAAxrUm91dGluZ0FkZHICD3JvdXRpbmdfYWRkcmVzcwAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwALYWRtaW5JbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5ABFnb3Zlcm5hbmNlQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtGYXJtQWRkcmVzcwAOc3VydmV5c0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rU3VydmV5c0FkZHJlc3MADnJvdXRpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1JvdXRpbmdBZGRyABFrZXlQcmVmaXhQb29sTmFtZQIFcG9vbF8AAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQNaXNSb3V0aW5nQ2FsbAMJAAACCAUDaW52BGRBcHAFDnJvdXRpbmdBZGRyZXNzCQAAAggFA2ludghmdW5jdGlvbgIMcm91dGluZ1RyYWRlBwQSaXNFeGNoYW5nZUNhbGxDUE1NAwMJAQlpc0RlZmluZWQBCQCdCAIFBm9yYWNsZQkArAICBRFrZXlQcmVmaXhQb29sTmFtZQkApQgBCQCkCAEIBQNpbnYEZEFwcAkAAAIIBQNpbnYIZnVuY3Rpb24CDGNhbGxGdW5jdGlvbgcJAAACCQCRAwIIBQNpbnYEYXJncwAAAghleGNoYW5nZQcEDmlzRXhjaGFuZ2VDYWxsAwkBCWlzRGVmaW5lZAEJAJ0IAgUGb3JhY2xlCQCsAgIFEWtleVByZWZpeFBvb2xOYW1lCQClCAEJAKQIAQgFA2ludgRkQXBwCQAAAggFA2ludghmdW5jdGlvbgIIZXhjaGFuZ2UHBA1pc0FpcmRyb3BDYWxsAwkAAAIIBQNpbnYEZEFwcAURZ292ZXJuYW5jZUFkZHJlc3MJAAACCAUDaW52CGZ1bmN0aW9uAgdhaXJEcm9wBwQTaXNVcGRhdGVXZWlnaHRzQ2FsbAMJAAACCAUDaW52BGRBcHAFEWdvdmVybmFuY2VBZGRyZXNzCQAAAggFA2ludghmdW5jdGlvbgINdXBkYXRlV2VpZ2h0cwcEFmlzVGFrZW5JbnRvQWNjb3VudENQTU0DAwkBCWlzRGVmaW5lZAEJAJ0IAgUGb3JhY2xlCQCsAgIFEWtleVByZWZpeFBvb2xOYW1lCQClCAEJAKQIAQgFA2ludgRkQXBwCQAAAggFA2ludghmdW5jdGlvbgIMY2FsbEZ1bmN0aW9uBwkAAAIJAJEDAggFA2ludgRhcmdzAAACGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMHBBJpc1Rha2VuSW50b0FjY291bnQDCQEJaXNEZWZpbmVkAQkAnQgCBQZvcmFjbGUJAKwCAgURa2V5UHJlZml4UG9vbE5hbWUJAKUIAQkApAgBCAUDaW52BGRBcHAJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQMaXNXcml0ZVRvdGFsAwkAAAIIBQNpbnYEZEFwcAUOc3VydmV5c0FkZHJlc3MJAAACCAUDaW52CGZ1bmN0aW9uAgt3cml0ZVRvdGFscwcEDXNpZ25lZEJ5QWRtaW4JAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFC2FkbWluSW52b2tlAwMDAwMDBQ5pc0V4Y2hhbmdlQ2FsbAYFEmlzRXhjaGFuZ2VDYWxsQ1BNTQYFDWlzQWlyZHJvcENhbGwGBQ1pc1JvdXRpbmdDYWxsCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAEHBgMDAwMFE2lzVXBkYXRlV2VpZ2h0c0NhbGwGBRJpc1Rha2VuSW50b0FjY291bnQGBRZpc1Rha2VuSW50b0FjY291bnRDUE1NBgUMaXNXcml0ZVRvdGFsCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAAHBQ1zaWduZWRCeUFkbWluBwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACxAFfRw==",
"height": 3415160,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: 7NUVt96p7snVmLDZmped7GLssoftvRd9NoaHUSJQr8kq
Next: GkSJdHJ915cB9pLCyzvuDvK5VocFHKWeHFrrt1zbcYfm
Diff:
Old | New | | Differences |
---|
25 | 25 | | |
---|
26 | 26 | | let kSurveysAddress = "surveys_address" |
---|
27 | 27 | | |
---|
| 28 | + | let kRoutingAddr = "routing_address" |
---|
| 29 | + | |
---|
28 | 30 | | let adminPubKey1 = getBase58FromOracle(kAdminPubKey1) |
---|
29 | 31 | | |
---|
30 | 32 | | let adminPubKey2 = getBase58FromOracle(kAdminPubKey2) |
---|
|
39 | 41 | | |
---|
40 | 42 | | let surveysAddress = Address(getBase58FromOracle(kSurveysAddress)) |
---|
41 | 43 | | |
---|
| 44 | + | let routingAddress = Address(getBase58FromOracle(kRoutingAddr)) |
---|
| 45 | + | |
---|
42 | 46 | | let keyPrefixPoolName = "pool_" |
---|
43 | 47 | | |
---|
44 | 48 | | |
---|
45 | 49 | | @Verifier(tx) |
---|
46 | 50 | | func verify () = match tx { |
---|
47 | 51 | | case inv: InvokeScriptTransaction => |
---|
48 | | - | let isExchangeCall = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 52 | + | let isRoutingCall = if ((inv.dApp == routingAddress)) |
---|
| 53 | + | then (inv.function == "routingTrade") |
---|
| 54 | + | else false |
---|
| 55 | + | let isExchangeCallCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
49 | 56 | | then (inv.function == "callFunction") |
---|
50 | 57 | | else false) |
---|
51 | 58 | | then (inv.args[0] == "exchange") |
---|
| 59 | + | else false |
---|
| 60 | + | let isExchangeCall = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 61 | + | then (inv.function == "exchange") |
---|
52 | 62 | | else false |
---|
53 | 63 | | let isAirdropCall = if ((inv.dApp == governanceAddress)) |
---|
54 | 64 | | then (inv.function == "airDrop") |
---|
|
56 | 66 | | let isUpdateWeightsCall = if ((inv.dApp == governanceAddress)) |
---|
57 | 67 | | then (inv.function == "updateWeights") |
---|
58 | 68 | | else false |
---|
59 | | - | let isUpdatePoolInterest = if ((inv.dApp == farmingAddress)) |
---|
60 | | - | then (inv.function == "updatePoolInterest") |
---|
61 | | - | else false |
---|
62 | | - | let isTakenIntoAccount = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 69 | + | let isTakenIntoAccountCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
63 | 70 | | then (inv.function == "callFunction") |
---|
64 | 71 | | else false) |
---|
65 | 72 | | then (inv.args[0] == "takeIntoAccountExtraFunds") |
---|
| 73 | + | else false |
---|
| 74 | + | let isTakenIntoAccount = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 75 | + | then (inv.function == "takeIntoAccountExtraFunds") |
---|
66 | 76 | | else false |
---|
67 | 77 | | let isWriteTotal = if ((inv.dApp == surveysAddress)) |
---|
68 | 78 | | then (inv.function == "writeTotals") |
---|
69 | 79 | | else false |
---|
70 | 80 | | let signedByAdmin = sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke) |
---|
71 | | - | if (if (if (if (isExchangeCall) |
---|
| 81 | + | if (if (if (if (if (if (isExchangeCall) |
---|
| 82 | + | then true |
---|
| 83 | + | else isExchangeCallCPMM) |
---|
72 | 84 | | then true |
---|
73 | 85 | | else isAirdropCall) |
---|
| 86 | + | then true |
---|
| 87 | + | else isRoutingCall) |
---|
74 | 88 | | then (size(inv.payments) == 1) |
---|
75 | 89 | | else false) |
---|
76 | 90 | | then true |
---|
77 | 91 | | else if (if (if (if (isUpdateWeightsCall) |
---|
78 | 92 | | then true |
---|
79 | | - | else isUpdatePoolInterest) |
---|
| 93 | + | else isTakenIntoAccount) |
---|
80 | 94 | | then true |
---|
81 | | - | else isTakenIntoAccount) |
---|
| 95 | + | else isTakenIntoAccountCPMM) |
---|
82 | 96 | | then true |
---|
83 | 97 | | else isWriteTotal) |
---|
84 | 98 | | then (size(inv.payments) == 0) |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 6 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom') |
---|
5 | 5 | | |
---|
6 | 6 | | func getBase58FromOracle (key) = match getString(oracle, key) { |
---|
7 | 7 | | case string: String => |
---|
8 | 8 | | fromBase58String(string) |
---|
9 | 9 | | case nothing => |
---|
10 | 10 | | throw((key + "is empty")) |
---|
11 | 11 | | } |
---|
12 | 12 | | |
---|
13 | 13 | | |
---|
14 | 14 | | let kAdminPubKey1 = "admin_pub_1" |
---|
15 | 15 | | |
---|
16 | 16 | | let kAdminPubKey2 = "admin_pub_2" |
---|
17 | 17 | | |
---|
18 | 18 | | let kAdminPubKey3 = "admin_pub_3" |
---|
19 | 19 | | |
---|
20 | 20 | | let kAdminInvokePubKey = "admin_invoke_pub" |
---|
21 | 21 | | |
---|
22 | 22 | | let kGovAddress = "governance_address" |
---|
23 | 23 | | |
---|
24 | 24 | | let kFarmAddress = "farming_address" |
---|
25 | 25 | | |
---|
26 | 26 | | let kSurveysAddress = "surveys_address" |
---|
27 | 27 | | |
---|
| 28 | + | let kRoutingAddr = "routing_address" |
---|
| 29 | + | |
---|
28 | 30 | | let adminPubKey1 = getBase58FromOracle(kAdminPubKey1) |
---|
29 | 31 | | |
---|
30 | 32 | | let adminPubKey2 = getBase58FromOracle(kAdminPubKey2) |
---|
31 | 33 | | |
---|
32 | 34 | | let adminPubKey3 = getBase58FromOracle(kAdminPubKey3) |
---|
33 | 35 | | |
---|
34 | 36 | | let adminInvoke = getBase58FromOracle(kAdminInvokePubKey) |
---|
35 | 37 | | |
---|
36 | 38 | | let governanceAddress = Address(getBase58FromOracle(kGovAddress)) |
---|
37 | 39 | | |
---|
38 | 40 | | let farmingAddress = Address(getBase58FromOracle(kFarmAddress)) |
---|
39 | 41 | | |
---|
40 | 42 | | let surveysAddress = Address(getBase58FromOracle(kSurveysAddress)) |
---|
41 | 43 | | |
---|
| 44 | + | let routingAddress = Address(getBase58FromOracle(kRoutingAddr)) |
---|
| 45 | + | |
---|
42 | 46 | | let keyPrefixPoolName = "pool_" |
---|
43 | 47 | | |
---|
44 | 48 | | |
---|
45 | 49 | | @Verifier(tx) |
---|
46 | 50 | | func verify () = match tx { |
---|
47 | 51 | | case inv: InvokeScriptTransaction => |
---|
48 | | - | let isExchangeCall = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 52 | + | let isRoutingCall = if ((inv.dApp == routingAddress)) |
---|
| 53 | + | then (inv.function == "routingTrade") |
---|
| 54 | + | else false |
---|
| 55 | + | let isExchangeCallCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
49 | 56 | | then (inv.function == "callFunction") |
---|
50 | 57 | | else false) |
---|
51 | 58 | | then (inv.args[0] == "exchange") |
---|
| 59 | + | else false |
---|
| 60 | + | let isExchangeCall = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 61 | + | then (inv.function == "exchange") |
---|
52 | 62 | | else false |
---|
53 | 63 | | let isAirdropCall = if ((inv.dApp == governanceAddress)) |
---|
54 | 64 | | then (inv.function == "airDrop") |
---|
55 | 65 | | else false |
---|
56 | 66 | | let isUpdateWeightsCall = if ((inv.dApp == governanceAddress)) |
---|
57 | 67 | | then (inv.function == "updateWeights") |
---|
58 | 68 | | else false |
---|
59 | | - | let isUpdatePoolInterest = if ((inv.dApp == farmingAddress)) |
---|
60 | | - | then (inv.function == "updatePoolInterest") |
---|
61 | | - | else false |
---|
62 | | - | let isTakenIntoAccount = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 69 | + | let isTakenIntoAccountCPMM = if (if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
63 | 70 | | then (inv.function == "callFunction") |
---|
64 | 71 | | else false) |
---|
65 | 72 | | then (inv.args[0] == "takeIntoAccountExtraFunds") |
---|
| 73 | + | else false |
---|
| 74 | + | let isTakenIntoAccount = if (isDefined(getString(oracle, (keyPrefixPoolName + toString(addressFromRecipient(inv.dApp)))))) |
---|
| 75 | + | then (inv.function == "takeIntoAccountExtraFunds") |
---|
66 | 76 | | else false |
---|
67 | 77 | | let isWriteTotal = if ((inv.dApp == surveysAddress)) |
---|
68 | 78 | | then (inv.function == "writeTotals") |
---|
69 | 79 | | else false |
---|
70 | 80 | | let signedByAdmin = sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke) |
---|
71 | | - | if (if (if (if (isExchangeCall) |
---|
| 81 | + | if (if (if (if (if (if (isExchangeCall) |
---|
| 82 | + | then true |
---|
| 83 | + | else isExchangeCallCPMM) |
---|
72 | 84 | | then true |
---|
73 | 85 | | else isAirdropCall) |
---|
| 86 | + | then true |
---|
| 87 | + | else isRoutingCall) |
---|
74 | 88 | | then (size(inv.payments) == 1) |
---|
75 | 89 | | else false) |
---|
76 | 90 | | then true |
---|
77 | 91 | | else if (if (if (if (isUpdateWeightsCall) |
---|
78 | 92 | | then true |
---|
79 | | - | else isUpdatePoolInterest) |
---|
| 93 | + | else isTakenIntoAccount) |
---|
80 | 94 | | then true |
---|
81 | | - | else isTakenIntoAccount) |
---|
| 95 | + | else isTakenIntoAccountCPMM) |
---|
82 | 96 | | then true |
---|
83 | 97 | | else isWriteTotal) |
---|
84 | 98 | | then (size(inv.payments) == 0) |
---|
85 | 99 | | else false) |
---|
86 | 100 | | then signedByAdmin |
---|
87 | 101 | | else false |
---|
88 | 102 | | case _ => |
---|
89 | 103 | | let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1)) |
---|
90 | 104 | | then 1 |
---|
91 | 105 | | else 0 |
---|
92 | 106 | | let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2)) |
---|
93 | 107 | | then 1 |
---|
94 | 108 | | else 0 |
---|
95 | 109 | | let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3)) |
---|
96 | 110 | | then 1 |
---|
97 | 111 | | else 0 |
---|
98 | 112 | | (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2) |
---|
99 | 113 | | } |
---|
100 | 114 | | |
---|