tx · 2sXEhH3A8s1JcGYuWXjXS6ixxPugQuGWzd7uNTjkXhcg 3P5ShVRafZgjRoEbcJCdQzeAd4tNGmDZ9sm: -0.01400000 Waves 2021.03.16 10:26 [2504603] smart account 3P5ShVRafZgjRoEbcJCdQzeAd4tNGmDZ9sm > SELF 0.00000000 Waves
{ "type": 13, "id": "2sXEhH3A8s1JcGYuWXjXS6ixxPugQuGWzd7uNTjkXhcg", "fee": 1400000, "feeAssetId": null, "timestamp": 1615879588524, "version": 2, "chainId": 87, "sender": "3P5ShVRafZgjRoEbcJCdQzeAd4tNGmDZ9sm", "senderPublicKey": "7iC7YVBzBy3aFV4G9ENnGWPhBuqQ6Jp8hge5dfcb1SBG", "proofs": [ "4kBcxhawez6rRZe9Ci7c83RFPogCQe7JjWw7oYd1WwWhAm2RRzacicH6PUA7YeqfYx4vmPS7zCw22HQop8P7irDc" ], "script": "base64:AAIEAAAAAAAAAA4IAhIECgIICBIECgIICAAAAAkAAAAAEWdvdmVybmFuY2VBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXzEKtX+FkknKFdB08akerxRg1+9xbGfyYAAAAAAthZG1pbkludm9rZQEAAAAgsj2fHYY3mleF5iNR9OE3eyOPalgB3T7oDWjAjnR7WCgAAAAADGFkbWluUHViS2V5MQEAAAAgugnXO4lZpNFdoP/xuzPQquE5aQ/L4r2R1jvuT16o4BMAAAAADGFkbWluUHViS2V5MgEAAAAgwpFEmbPSsLQNIqWRWL2IvKE3uwjL/92M5pTvWxYOfkAAAAAADGFkbWluUHViS2V5MwEAAAAgjh4XLnixBzv0SE56Myhgdih3/JnlkjCjIMLPqKvpDlUAAAAAEWtleVByZWZpeFBvb2xOYW1lAgAAAAVwb29sXwEAAAAMaXNTZWxmSW52b2tlAAAAAQAAAAFpAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMFAAAABHVuaXQJAAACAAAAAQIAAAAvT25seSB0aGUgT3JhY2xlIGl0c2VsZiBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24BAAAAEHBhcnNlUG9vbEFkZHJlc3MAAAABAAAAB2FkZHJlc3MJAAQlAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAB2FkZHJlc3MCAAAAFEludmFsaWQgcG9vbCBhZGRyZXNzAQAAABJnZXRQb29sTmFtZUlmVmFsaWQAAAABAAAACHBvb2xOYW1lBAAAAA91bmRlcnNjb3JlSW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAASzAAAAAgUAAAAIcG9vbE5hbWUCAAAAAV8A//////////8EAAAAE3VuZGVyc2NvcmVMYXN0SW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAS3AAAAAgUAAAAIcG9vbE5hbWUCAAAAAV8A//////////8EAAAAE2hhc1NpbmdsZVVuZGVyc2NvcmUDAwkAAAAAAAACBQAAAA91bmRlcnNjb3JlSW5kZXgFAAAAE3VuZGVyc2NvcmVMYXN0SW5kZXgJAABmAAAAAgUAAAAPdW5kZXJzY29yZUluZGV4AAAAAAAAAAAABwkBAAAAAiE9AAAAAgUAAAAPdW5kZXJzY29yZUluZGV4CQAAZQAAAAIJAAExAAAAAQUAAAAIcG9vbE5hbWUAAAAAAAAAAAEHAwUAAAATaGFzU2luZ2xlVW5kZXJzY29yZQUAAAAIcG9vbE5hbWUJAAACAAAAAQIAAABOUG9vbCBuYW1lIG11c3QgY29uc2lzdCBvZiB0d28gYXNzZXQgbmFtZXMgc2VwYXJhdGVkIGJ5IGFuIHVuZGVyc2NvcmUgY2hhcmFjdGVyAAAAAgAAAAFpAQAAAAdhZGRQb29sAAAAAgAAAAtwb29sQWRkcmVzcwAAAAhwb29sTmFtZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAADGlzU2VsZkludm9rZQAAAAEFAAAAAWkEAAAAA2tleQkAASwAAAACBQAAABFrZXlQcmVmaXhQb29sTmFtZQkBAAAAEHBhcnNlUG9vbEFkZHJlc3MAAAABBQAAAAtwb29sQWRkcmVzcwQAAAAYcG9zc2libHlBbHJlYWR5QWRkZWRQb29sCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAQAAAAlpc0RlZmluZWQAAAABBQAAABhwb3NzaWJseUFscmVhZHlBZGRlZFBvb2wJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJQb29sIHdpdGggYWRkcmVzcyAFAAAAC3Bvb2xBZGRyZXNzAgAAAB8gaXMgYWxyZWFkeSBkZWZpbmVkIHdpdGggbmFtZSAiCQEAAAAFdmFsdWUAAAABBQAAABhwb3NzaWJseUFscmVhZHlBZGRlZFBvb2wCAAAAASIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5CQEAAAASZ2V0UG9vbE5hbWVJZlZhbGlkAAAAAQUAAAAIcG9vbE5hbWUFAAAAA25pbAAAAAFpAQAAAApyZW5hbWVQb29sAAAAAgAAAAtwb29sQWRkcmVzcwAAAAtuZXdQb29sTmFtZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAADGlzU2VsZkludm9rZQAAAAEFAAAAAWkEAAAAA2tleQkAASwAAAACBQAAABFrZXlQcmVmaXhQb29sTmFtZQkBAAAAEHBhcnNlUG9vbEFkZHJlc3MAAAABBQAAAAtwb29sQWRkcmVzcwQAAAAYcG9zc2libHlBbHJlYWR5QWRkZWRQb29sCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAQAAAAlpc0RlZmluZWQAAAABBQAAABhwb3NzaWJseUFscmVhZHlBZGRlZFBvb2wJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5CQEAAAASZ2V0UG9vbE5hbWVJZlZhbGlkAAAAAQUAAAALbmV3UG9vbE5hbWUFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAASUG9vbCB3aXRoIGFkZHJlc3MgBQAAAAtwb29sQWRkcmVzcwIAAAAXIGhhcyBub3QgeWV0IGJlZW4gYWRkZWQAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAAAABmludm9rZQUAAAAHJG1hdGNoMAQAAAAOaXNFeGNoYW5nZUNhbGwDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAEWtleVByZWZpeFBvb2xOYW1lCQAEJQAAAAEJAAQkAAAAAQgFAAAABmludm9rZQAAAARkQXBwCQAAAAAAAAIIBQAAAAZpbnZva2UAAAAIZnVuY3Rpb24CAAAACGV4Y2hhbmdlBwQAAAANaXNBaXJkcm9wQ2FsbAMJAAAAAAAAAggFAAAABmludm9rZQAAAARkQXBwBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwkAAAAAAAACCAUAAAAGaW52b2tlAAAACGZ1bmN0aW9uAgAAAAdhaXJEcm9wBwQAAAATaXNVcGRhdGVXZWlnaHRzQ2FsbAMJAAAAAAAAAggFAAAABmludm9rZQAAAARkQXBwBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwkAAAAAAAACCAUAAAAGaW52b2tlAAAACGZ1bmN0aW9uAgAAAA11cGRhdGVXZWlnaHRzBwQAAAAKaXNTZWxmQ2FsbAMJAAAAAAAAAggFAAAABmludm9rZQAAAARkQXBwBQAAAAR0aGlzCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACAgAAAAdhZGRQb29sCQAETAAAAAICAAAACnJlbmFtZVBvb2wFAAAAA25pbAgFAAAABmludm9rZQAAAAhmdW5jdGlvbgcEAAAADXNpZ25lZEJ5QWRtaW4JAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAthZG1pbkludm9rZQMDAwMFAAAADmlzRXhjaGFuZ2VDYWxsBgUAAAANaXNBaXJkcm9wQ2FsbAkAAAAAAAACCQABkAAAAAEIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAEHBgMDBQAAABNpc1VwZGF0ZVdlaWdodHNDYWxsBgUAAAAKaXNTZWxmQ2FsbAkAAAAAAAACCQABkAAAAAEIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAAHBQAAAA1zaWduZWRCeUFkbWluBwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAABAAAAIGOzgAF043oupDd2uphGM+V/EXtqs0AtYNf+v2aWwjVX+ofWPg==", "height": 2504603, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E354pAGTM8bZtRYwRbCJZc9JCQFwYg1JKorThDHBM4zR Next: EwYTP5KZhJAmgsThUa5FN8mvi1qzJH7jsXc7oaPFAd1A Diff:
Old | New | Differences | |
---|---|---|---|
65 | 65 | let isAirdropCall = if ((invoke.dApp == governanceAddress)) | |
66 | 66 | then (invoke.function == "airDrop") | |
67 | 67 | else false | |
68 | - | let | |
68 | + | let isUpdateWeightsCall = if ((invoke.dApp == governanceAddress)) | |
69 | 69 | then (invoke.function == "updateWeights") | |
70 | 70 | else false | |
71 | 71 | let isSelfCall = if ((invoke.dApp == this)) | |
72 | 72 | then containsElement(["addPool", "renamePool"], invoke.function) | |
73 | 73 | else false | |
74 | 74 | let signedByAdmin = sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke) | |
75 | - | if (if (if (if ( | |
75 | + | if (if (if (if (isExchangeCall) | |
76 | 76 | then true | |
77 | 77 | else isAirdropCall) | |
78 | - | then true | |
79 | - | else isUpdateWeights) | |
80 | 78 | then (size(invoke.payments) == 1) | |
81 | 79 | else false) | |
82 | 80 | then true | |
83 | - | else if (isSelfCall) | |
81 | + | else if (if (isUpdateWeightsCall) | |
82 | + | then true | |
83 | + | else isSelfCall) | |
84 | 84 | then (size(invoke.payments) == 0) | |
85 | 85 | else false) | |
86 | 86 | then signedByAdmin |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let governanceAddress = Address(base58'3PLYvTCK8LTRt87EqUULt428zTLteWWyf4b') | |
5 | 5 | ||
6 | 6 | let adminInvoke = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h' | |
7 | 7 | ||
8 | 8 | let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA' | |
9 | 9 | ||
10 | 10 | let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7' | |
11 | 11 | ||
12 | 12 | let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ' | |
13 | 13 | ||
14 | 14 | let keyPrefixPoolName = "pool_" | |
15 | 15 | ||
16 | 16 | func isSelfInvoke (i) = if ((i.caller == this)) | |
17 | 17 | then unit | |
18 | 18 | else throw("Only the Oracle itself can invoke this function") | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func parsePoolAddress (address) = toString(valueOrErrorMessage(addressFromString(address), "Invalid pool address")) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func getPoolNameIfValid (poolName) = { | |
25 | 25 | let underscoreIndex = valueOrElse(indexOf(poolName, "_"), -1) | |
26 | 26 | let underscoreLastIndex = valueOrElse(lastIndexOf(poolName, "_"), -1) | |
27 | 27 | let hasSingleUnderscore = if (if ((underscoreIndex == underscoreLastIndex)) | |
28 | 28 | then (underscoreIndex > 0) | |
29 | 29 | else false) | |
30 | 30 | then (underscoreIndex != (size(poolName) - 1)) | |
31 | 31 | else false | |
32 | 32 | if (hasSingleUnderscore) | |
33 | 33 | then poolName | |
34 | 34 | else throw("Pool name must consist of two asset names separated by an underscore character") | |
35 | 35 | } | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | @Callable(i) | |
39 | 39 | func addPool (poolAddress,poolName) = valueOrElse(isSelfInvoke(i), { | |
40 | 40 | let key = (keyPrefixPoolName + parsePoolAddress(poolAddress)) | |
41 | 41 | let possiblyAlreadyAddedPool = getString(this, key) | |
42 | 42 | if (isDefined(possiblyAlreadyAddedPool)) | |
43 | 43 | then throw((((("Pool with address " + poolAddress) + " is already defined with name \"") + value(possiblyAlreadyAddedPool)) + "\"")) | |
44 | 44 | else [StringEntry(key, getPoolNameIfValid(poolName))] | |
45 | 45 | }) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | ||
49 | 49 | @Callable(i) | |
50 | 50 | func renamePool (poolAddress,newPoolName) = valueOrElse(isSelfInvoke(i), { | |
51 | 51 | let key = (keyPrefixPoolName + parsePoolAddress(poolAddress)) | |
52 | 52 | let possiblyAlreadyAddedPool = getString(this, key) | |
53 | 53 | if (isDefined(possiblyAlreadyAddedPool)) | |
54 | 54 | then [StringEntry(key, getPoolNameIfValid(newPoolName))] | |
55 | 55 | else throw((("Pool with address " + poolAddress) + " has not yet been added")) | |
56 | 56 | }) | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | @Verifier(tx) | |
60 | 60 | func verify () = match tx { | |
61 | 61 | case invoke: InvokeScriptTransaction => | |
62 | 62 | let isExchangeCall = if (isDefined(getString(this, (keyPrefixPoolName + toString(addressFromRecipient(invoke.dApp)))))) | |
63 | 63 | then (invoke.function == "exchange") | |
64 | 64 | else false | |
65 | 65 | let isAirdropCall = if ((invoke.dApp == governanceAddress)) | |
66 | 66 | then (invoke.function == "airDrop") | |
67 | 67 | else false | |
68 | - | let | |
68 | + | let isUpdateWeightsCall = if ((invoke.dApp == governanceAddress)) | |
69 | 69 | then (invoke.function == "updateWeights") | |
70 | 70 | else false | |
71 | 71 | let isSelfCall = if ((invoke.dApp == this)) | |
72 | 72 | then containsElement(["addPool", "renamePool"], invoke.function) | |
73 | 73 | else false | |
74 | 74 | let signedByAdmin = sigVerify(tx.bodyBytes, tx.proofs[0], adminInvoke) | |
75 | - | if (if (if (if ( | |
75 | + | if (if (if (if (isExchangeCall) | |
76 | 76 | then true | |
77 | 77 | else isAirdropCall) | |
78 | - | then true | |
79 | - | else isUpdateWeights) | |
80 | 78 | then (size(invoke.payments) == 1) | |
81 | 79 | else false) | |
82 | 80 | then true | |
83 | - | else if (isSelfCall) | |
81 | + | else if (if (isUpdateWeightsCall) | |
82 | + | then true | |
83 | + | else isSelfCall) | |
84 | 84 | then (size(invoke.payments) == 0) | |
85 | 85 | else false) | |
86 | 86 | then signedByAdmin | |
87 | 87 | else false | |
88 | 88 | case _ => | |
89 | 89 | sigVerify(tx.bodyBytes, tx.proofs[0], base58'7iC7YVBzBy3aFV4G9ENnGWPhBuqQ6Jp8hge5dfcb1SBG') | |
90 | 90 | } | |
91 | 91 |
github/deemru/w8io/3ef1775 48.74 ms ◑![]()