tx · BcYFnD6sqhrjR6WKDdcJTuvbEvNZ8cCp6tUQVWLBgWcf 3PF8ihzUXp9QqvtcnpSveENQHqLDYGvbRvZ: -0.01000000 Waves 2023.03.10 17:58 [3549626] smart account 3PF8ihzUXp9QqvtcnpSveENQHqLDYGvbRvZ > SELF 0.00000000 Waves
{ "type": 13, "id": "BcYFnD6sqhrjR6WKDdcJTuvbEvNZ8cCp6tUQVWLBgWcf", "fee": 1000000, "feeAssetId": null, "timestamp": 1678460276725, "version": 2, "chainId": 87, "sender": "3PF8ihzUXp9QqvtcnpSveENQHqLDYGvbRvZ", "senderPublicKey": "9kcEZHonGr2aoSBCDgKiB7nf7C6dYThx4YnvpDKNSD77", "proofs": [ "5mzQjZyLNogntiQ7riXVzqMogGfeU97ra1CSRmKhQHaqfGGJqgg4s7PMBPEnEMMDNSFmdPkjPoCC1c99sw8kema4", "4GcUvEmVJoEuERANnSrXCaBUZKYD86H7JwtdyW1uMExXiQaw6aj3rfkrHZ2NvVhpjBLiLJi7kZRRMMgpzdTHJ6LX" ], "script": "base64:AAIFAAAAAAAAABUIAhIECgIBCBILCgkRGBgYAQEYAQgAAAAMAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEAAAAMbWF5YmVBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQUAAAAMbWF5YmVBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgYWRkcmVzcyBmcm9tICcFAAAADG1heWJlQWRkcmVzcwIAAAABJwEAAAAYa2V5X2xhc3RGZWVTd2FwVGltZXN0YW1wAAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgIAAAAERmVlXwUAAAAHYXNzZXRJZAIAAAASX2xhc3RTd2FwVGltZXN0YW1wAAAAAAxwcm94eUFkZHJlc3MJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAA1wcm94eS1hZGRyZXNzAQAAAApnZXRBc3NldElkAAAAAQAAAAVhc3NldAMJAAAAAAAAAgUAAAAFYXNzZXQCAAAABVdBVkVTBQAAAAR1bml0CAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEJAAJZAAAAAQUAAAAFYXNzZXQJAAEsAAAAAgIAAAARQ2FuJ3QgZmluZCBhc3NldCAFAAAABWFzc2V0AAAAAmlkAAAAABJmZWVQcmlvcml0eUFzc2V0SWQEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwIAAAARRmVlX3ByaW9yaXR5QXNzZXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAQcHJpb3JpdHlBc3NldFN0cgUAAAAHJG1hdGNoMAkAAlkAAAABBQAAABBwcmlvcml0eUFzc2V0U3RyCQAAAgAAAAECAAAAIFdBVkVTIGNhbm5vdCBiZSBhIHByaW9yaXR5IGFzc2V0AAAAABZmZWVQcmlvcml0eU1pblJlY2VpdmVkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMCAAAAF0ZlZV9wcmlvcml0eU1pblJlY2VpdmVkAAAAAAAAAAAAAAAAAApmZWVNYW5hZ2VyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMCAAAAFEZlZV9tYW5hZ2VyUHVibGljS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAD21heWJlRmVlTWFuYWdlcgUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAA9tYXliZUZlZU1hbmFnZXIFAAAABHVuaXQAAAAADHN3YXBGZWVMaW1pdAkABBoAAAACBQAAAAR0aGlzAgAAABBGZWVfc3dhcEZlZUxpbWl0AAAAABRmZWVBc3NldFN3YXBJbnRlcnZhbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzAgAAABVGZWVfYXNzZXRTd2FwSW50ZXJ2YWwAAAAAAAAAAAABAAAAF2dldExhc3RGZWVTd2FwVGltZXN0YW1wAAAAAQAAAAdhc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABhrZXlfbGFzdEZlZVN3YXBUaW1lc3RhbXAAAAABCQACWAAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAABAAAAF3NldExhc3RGZWVTd2FwVGltZXN0YW1wAAAAAgAAAAdhc3NldElkAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGGtleV9sYXN0RmVlU3dhcFRpbWVzdGFtcAAAAAEJAAJYAAAAAQUAAAAHYXNzZXRJZAUAAAAJdGltZXN0YW1wBQAAAANuaWwAAAACAAAAA2ludgEAAAATY2xhaW1SZWZlcnJlclJld2FyZAAAAAIAAAAGYW1vdW50AAAAB2Fzc2V0SWQEAAAABWFzc2V0CQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAAB2Fzc2V0SWQDCQEAAAACIT0AAAACBQAAAAxwcm94eUFkZHJlc3MIBQAAAANpbnYAAAAGY2FsbGVyCQAAAgAAAAECAAAAK29ubHkgc2VsZiBjYWxscyBvciBieSBjb2xsZWN0b3IgYXJlIGFsbG93ZWQDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAkAAAIAAAABAgAAABdJbmNvcnJlY3QgcmV3YXJkIGFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxwcm94eUFkZHJlc3MFAAAABmFtb3VudAUAAAAFYXNzZXQFAAAAA25pbAAAAANpbnYBAAAADFBSSVZBVEVfc3dhcAAAAAkAAAAJYW1vdW50c0luAAAACWFkZHJlc3NlcwAAAA9hc3NldHNUb1JlY2VpdmUAAAALZXN0UmVjZWl2ZWQAAAARc2xpcHBhZ2VUb2xlcmFuY2UAAAALbWluUmVjZWl2ZWQAAAAHb3B0aW9ucwAAAAlwbXRBbW91bnQAAAALcG10QXNzZXRTdHIEAAAACnBtdEFzc2V0SWQJAAJZAAAAAQUAAAALcG10QXNzZXRTdHIEAAAAA3BtdAMDCQAAAAAAAAIFAAAAC3BtdEFzc2V0U3RyAgAAAAVXQVZFUwYJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAASZmVlUHJpb3JpdHlBc3NldElkCQAAAgAAAAECAAAAJlVuYWJsZSB0byBzd2FwIFdBVkVTIG9yIHByaW9yaXR5IGFzc2V0AwkAAGcAAAACAAAAAAAAAAAABQAAAAlwbXRBbW91bnQJAAACAAAAAQIAAAAfUGF5bWVudCBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACXBtdEFtb3VudAMJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAG09ubHkgc2VsZiBjYWxscyBhcmUgYWxsb3dlZAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAACmZlZUFzc2V0SWQJAAACAAAAAQIAAAAhT25seSBXQVZFUyBhbGxvd2VkIGZvciBmZWVBc3NldElk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", "height": 3549626, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8QuLefVAT8YVkZsUzukK5XbrBdgk9jLqffkNBNVC5cdE Next: 2xGeHG3MYXDTeAgborR4LnPtXsBD82oHNPPFxEuGjtAp Diff:
Old | New | Differences | |
---|---|---|---|
56 | 56 | ||
57 | 57 | ||
58 | 58 | @Callable(inv) | |
59 | - | func PRIVATE_swap (amountsIn,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived,options) = { | |
60 | - | let | |
61 | - | | |
62 | - | | |
63 | - | | |
64 | - | | |
65 | - | | |
66 | - | | |
67 | - | | |
59 | + | func PRIVATE_swap (amountsIn,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived,options,pmtAmount,pmtAssetStr) = { | |
60 | + | let pmtAssetId = fromBase58String(pmtAssetStr) | |
61 | + | let pmt = if (if ((pmtAssetStr == "WAVES")) | |
62 | + | then true | |
63 | + | else (pmtAssetId == feePriorityAssetId)) | |
64 | + | then throw("Unable to swap WAVES or priority asset") | |
65 | + | else if ((0 >= pmtAmount)) | |
66 | + | then throw("Payment amount must be positive") | |
67 | + | else AttachedPayment(pmtAssetId, pmtAmount) | |
68 | 68 | if ((inv.caller != this)) | |
69 | 69 | then throw("Only self calls are allowed") | |
70 | 70 | else if (isDefined(inv.feeAssetId)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address))) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'")) | |
8 | 8 | ||
9 | 9 | ||
10 | 10 | func key_lastFeeSwapTimestamp (assetId) = (("Fee_" + assetId) + "_lastSwapTimestamp") | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | let proxyAddress = parseAddressOrThrow(getStringOrThrow(this, "proxy-address")) | |
14 | 14 | ||
15 | 15 | func getAssetId (asset) = if ((asset == "WAVES")) | |
16 | 16 | then unit | |
17 | 17 | else valueOrErrorMessage(assetInfo(fromBase58String(asset)), ("Can't find asset " + asset)).id | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | let feePriorityAssetId = match getString(this, "Fee_priorityAsset") { | |
21 | 21 | case priorityAssetStr: String => | |
22 | 22 | fromBase58String(priorityAssetStr) | |
23 | 23 | case _ => | |
24 | 24 | throw("WAVES cannot be a priority asset") | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | let feePriorityMinReceived = valueOrElse(getInteger(this, "Fee_priorityMinReceived"), 0) | |
28 | 28 | ||
29 | 29 | let feeManager = match getString(this, "Fee_managerPublicKey") { | |
30 | 30 | case maybeFeeManager: String => | |
31 | 31 | fromBase58String(maybeFeeManager) | |
32 | 32 | case _ => | |
33 | 33 | unit | |
34 | 34 | } | |
35 | 35 | ||
36 | 36 | let swapFeeLimit = getInteger(this, "Fee_swapFeeLimit") | |
37 | 37 | ||
38 | 38 | let feeAssetSwapInterval = valueOrElse(getInteger(this, "Fee_assetSwapInterval"), 0) | |
39 | 39 | ||
40 | 40 | func getLastFeeSwapTimestamp (assetId) = valueOrElse(getInteger(this, key_lastFeeSwapTimestamp(toBase58String(assetId))), 0) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func setLastFeeSwapTimestamp (assetId,timestamp) = [IntegerEntry(key_lastFeeSwapTimestamp(toBase58String(assetId)), timestamp)] | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | @Callable(inv) | |
47 | 47 | func claimReferrerReward (amount,assetId) = { | |
48 | 48 | let asset = getAssetId(assetId) | |
49 | 49 | if ((proxyAddress != inv.caller)) | |
50 | 50 | then throw("only self calls or by collector are allowed") | |
51 | 51 | else if ((0 >= amount)) | |
52 | 52 | then throw("Incorrect reward amount") | |
53 | 53 | else [ScriptTransfer(proxyAddress, amount, asset)] | |
54 | 54 | } | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | ||
58 | 58 | @Callable(inv) | |
59 | - | func PRIVATE_swap (amountsIn,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived,options) = { | |
60 | - | let | |
61 | - | | |
62 | - | | |
63 | - | | |
64 | - | | |
65 | - | | |
66 | - | | |
67 | - | | |
59 | + | func PRIVATE_swap (amountsIn,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived,options,pmtAmount,pmtAssetStr) = { | |
60 | + | let pmtAssetId = fromBase58String(pmtAssetStr) | |
61 | + | let pmt = if (if ((pmtAssetStr == "WAVES")) | |
62 | + | then true | |
63 | + | else (pmtAssetId == feePriorityAssetId)) | |
64 | + | then throw("Unable to swap WAVES or priority asset") | |
65 | + | else if ((0 >= pmtAmount)) | |
66 | + | then throw("Payment amount must be positive") | |
67 | + | else AttachedPayment(pmtAssetId, pmtAmount) | |
68 | 68 | if ((inv.caller != this)) | |
69 | 69 | then throw("Only self calls are allowed") | |
70 | 70 | else if (isDefined(inv.feeAssetId)) | |
71 | 71 | then throw("Only WAVES allowed for feeAssetId") | |
72 | 72 | else if (if (isDefined(swapFeeLimit)) | |
73 | 73 | then (inv.fee > value(swapFeeLimit)) | |
74 | 74 | else false) | |
75 | 75 | then throw((("Maximum fee (" + toString(value(swapFeeLimit))) + ") is exceeded")) | |
76 | 76 | else if ((feeAssetSwapInterval > (lastBlock.timestamp - getLastFeeSwapTimestamp(pmtAssetId)))) | |
77 | 77 | then throw((("Swap is only possible once every " + toString((feeAssetSwapInterval / 3600000))) + " hours")) | |
78 | 78 | else { | |
79 | 79 | let balanceBefore = assetBalance(this, feePriorityAssetId) | |
80 | 80 | if ((balanceBefore == balanceBefore)) | |
81 | 81 | then { | |
82 | 82 | let swap = invoke(proxyAddress, "swap", [amountsIn, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived, options], [pmt]) | |
83 | 83 | if ((swap == swap)) | |
84 | 84 | then { | |
85 | 85 | let balanceAfter = assetBalance(this, feePriorityAssetId) | |
86 | 86 | if ((balanceAfter == balanceAfter)) | |
87 | 87 | then { | |
88 | 88 | let received = (balanceAfter - balanceBefore) | |
89 | 89 | if ((0 >= received)) | |
90 | 90 | then throw("Swap is only allowed to the priority asset") | |
91 | 91 | else if ((feePriorityMinReceived > received)) | |
92 | 92 | then throw(("Swap result is less than " + toString(feePriorityMinReceived))) | |
93 | 93 | else setLastFeeSwapTimestamp(pmtAssetId, lastBlock.timestamp) | |
94 | 94 | } | |
95 | 95 | else throw("Strict value is not equal to itself.") | |
96 | 96 | } | |
97 | 97 | else throw("Strict value is not equal to itself.") | |
98 | 98 | } | |
99 | 99 | else throw("Strict value is not equal to itself.") | |
100 | 100 | } | |
101 | 101 | } | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | @Verifier(tx) | |
105 | 105 | func verify () = { | |
106 | 106 | let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), "")) | |
107 | 107 | let maybeAdminKeys = if (isDefined(maybeOracle)) | |
108 | 108 | then getString(value(maybeOracle), "AdminKeys") | |
109 | 109 | else unit | |
110 | 110 | let isFeeSwapInvoke = match tx { | |
111 | 111 | case tx: InvokeScriptTransaction => | |
112 | 112 | if ((tx.dApp == this)) | |
113 | 113 | then (tx.function == "PRIVATE_swap") | |
114 | 114 | else false | |
115 | 115 | case _ => | |
116 | 116 | false | |
117 | 117 | } | |
118 | 118 | if (if (isDefined(feeManager)) | |
119 | 119 | then isFeeSwapInvoke | |
120 | 120 | else false) | |
121 | 121 | then sigVerify(tx.bodyBytes, tx.proofs[0], value(feeManager)) | |
122 | 122 | else match maybeAdminKeys { | |
123 | 123 | case adminKeysStr: String => | |
124 | 124 | let adminKeys = { | |
125 | 125 | let stringKeys = split(adminKeysStr, ",") | |
126 | 126 | [fromBase58String(stringKeys[0]), fromBase58String(stringKeys[1]), fromBase58String(stringKeys[2])] | |
127 | 127 | } | |
128 | 128 | func verifyByAllKeys (proof) = if (sigVerify(tx.bodyBytes, proof, adminKeys[0])) | |
129 | 129 | then 1 | |
130 | 130 | else if (sigVerify(tx.bodyBytes, proof, adminKeys[1])) | |
131 | 131 | then 10 | |
132 | 132 | else if (sigVerify(tx.bodyBytes, proof, adminKeys[2])) | |
133 | 133 | then 100 | |
134 | 134 | else 0 | |
135 | 135 | ||
136 | 136 | containsElement([110, 101, 11], (verifyByAllKeys(tx.proofs[0]) + verifyByAllKeys(tx.proofs[1]))) | |
137 | 137 | case _ => | |
138 | 138 | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
139 | 139 | } | |
140 | 140 | } | |
141 | 141 |
github/deemru/w8io/3ef1775 39.67 ms ◑