tx · 2P8arehrT7Q2Ru9faMRyi6VFg7RtXf1Yq3Wbus4goaez

3N5xRJDevNVcgHnJ2pgKKS2DnxVmPrgzW1C:  -0.00400000 Waves

2024.04.28 20:54 [3083027] smart account 3N5xRJDevNVcgHnJ2pgKKS2DnxVmPrgzW1C > SELF 0.00000000 Waves

{ "type": 13, "id": "2P8arehrT7Q2Ru9faMRyi6VFg7RtXf1Yq3Wbus4goaez", "fee": 400000, "feeAssetId": null, "timestamp": 1714326870344, "version": 1, "sender": "3N5xRJDevNVcgHnJ2pgKKS2DnxVmPrgzW1C", "senderPublicKey": "FBgREu4TGNeHwhiwWQeUR6R9vA6FQHhY4dZwz5bLwMUN", "proofs": [ "4Y5WfVz2zxpT16a2h9hXzBzzUTo4qncWDkDnW7mJNXjM2LoFUVAQfGbqbFFW3kudS1iZVTZmdJahiLTBtiJMe7bF" ], "script": "base64:BgIdCAISBQoDCAgBEgcKBQgICBgBEgMKAQgSBAoCCAgIABFhZ2dyZWdhdG9yQWRkcmVzcwkBB0FkZHJlc3MBARoBVGbvGoVSrJoWnXZbsBvbqi3QEfyR0bKyNgAJd2hpdGVsaXN0CQDMCAIJAQdBZGRyZXNzAQEaAVS4FpldyjdSrhBwmtGUaR41Ia5EGsRAom0FA25pbAENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQ5nZXRBc3NldFN0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWICBVdBVkVTAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIBCmdldEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAQBeAUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkBBXZhbHVlAQUHYXNzZXRJZAEPZ2V0UmFuZG9tTnVtYmVyBAh2YXJpYW50cwR0eElkFGhhdGNoaW5nRmluaXNoSGVpZ2h0Bm9mZnNldAQPcmFuZG9tU2VlZEJsb2NrCQEFdmFsdWUBCQDtBwEJAGUCBRRoYXRjaGluZ0ZpbmlzaEhlaWdodAABBApyYW5kb21IYXNoCQD3AwEJAMsBAgUEdHhJZAkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYJAGoCCQCyCQIFCnJhbmRvbUhhc2gJAGgCBQZvZmZzZXQACAUIdmFyaWFudHMEAWkBFGV4Y2hhbmdlVGhlblRyYW5zZmVyAwthc3NldDFJZFN0cglyZWNpcGllbnQMbWluVG9SZWNlaXZlBAdyZXF1ZXN0CQCsAgIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkApAMBCQEPZ2V0UmFuZG9tTnVtYmVyBACAgKjsha/RsQEJANkEAQULYXNzZXQxSWRTdHIJAGUCBQZoZWlnaHQAAgUMbWluVG9SZWNlaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHcmVxdWVzdAIHX3NlbmRUbwUJcmVjaXBpZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHcmVxdWVzdAIHX3N0YXR1cwIEb3BlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdyZXF1ZXN0Ag1fbWluVG9SZWNlaXZlBQxtaW5Ub1JlY2VpdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgdhd2FpdHNfBQdyZXF1ZXN0CQCsAgIJAKwCAgkArAICCQCsAgIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIBLAkApAMBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAIBLAULYXNzZXQxSWRTdHIFA25pbAFpARJleGNoYW5nZVRoZW5JbnZva2UFC2Fzc2V0MUlkU3RyBGRBcHAIZnVuY3Rpb24EYXJncwxtaW5Ub1JlY2VpdmUEB3JlcXVlc3QJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3JlcXVlc3QCBV9kQXBwBQRkQXBwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHcmVxdWVzdAIJX2Z1bmN0aW9uBQhmdW5jdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3JlcXVlc3QCBV9hcmdzCQC5CQIFBGFyZ3MCA3x8fAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3JlcXVlc3QCB19zdGF0dXMCBG9wZW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHcmVxdWVzdAINX21pblRvUmVjZWl2ZQUMbWluVG9SZWNlaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHcmVxdWVzdAIHX3NlbmRUbwkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgdhd2FpdHNfBQdyZXF1ZXN0CQCsAgIJAKwCAgkArAICCQCsAgIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIBLAkApAMBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAIBLAULYXNzZXQxSWRTdHIFA25pbAFpAQ5jYW5jZWxFeGNoYW5nZQEHcmVxdWVzdAQJY2FuQ2FuY2VsAwkAAAIJAQx0cnlHZXRTdHJpbmcBCQCsAgIFB3JlcXVlc3QCB19zZW5kVG8JAKUIAQgFAWkGY2FsbGVyBgkAAAIJAKUIAQgFAWkGY2FsbGVyCQClCAEFBHRoaXMDBQljYW5DYW5jZWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdyZXF1ZXN0Agdfc2VuZFRvCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUHcmVxdWVzdAIHX3N0YXR1cwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICB2F3YWl0c18FB3JlcXVlc3QJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdyZXF1ZXN0AgVfZEFwcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3JlcXVlc3QCCV9mdW5jdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3JlcXVlc3QCBV9hcmdzBQNuaWwJAAIBAiZvbmx5IHJlcXVlc3Qgb3duZXIgY2FuIHVzZSB0aGlzIG1ldGhvZAFpAQpwdXp6bGVTd2FwAgdyZXF1ZXN0CHJvdXRlU3RyAwkAAAIJAM8IAgUJd2hpdGVsaXN0CAUBaQZjYWxsZXIFBHVuaXQJAAIBAg53aGl0ZWxpc3Qgb25seQMJAQIhPQIJAQx0cnlHZXRTdHJpbmcBCQCsAgIFB3JlcXVlc3QCB19zdGF0dXMCBG9wZW4JAAIBAhlvcGVyYXRpb24gaXMgbm90IHBvc3NpYmxlBAhzd2FwRGF0YQkAtQkCCQEMdHJ5R2V0U3RyaW5nAQkArAICAgdhd2FpdHNfBQdyZXF1ZXN0AgEsBA1iYWxhbmNlQmVmb3JlCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQkAkQMCBQhzd2FwRGF0YQACAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBRFhZ2dyZWdhdG9yQWRkcmVzcwIEc3dhcAkAzAgCBQhyb3V0ZVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBCQCRAwIFCHN3YXBEYXRhAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhzd2FwRGF0YQABBQNuaWwDCQAAAgUDaW52BQNpbnYEB2Ftb3VudDEJAGUCCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQkAkQMCBQhzd2FwRGF0YQACBQ1iYWxhbmNlQmVmb3JlAwkAAAIFB2Ftb3VudDEFB2Ftb3VudDEDCQBmAgkBDXRyeUdldEludGVnZXIBCQCsAgIFB3JlcXVlc3QCDV9taW5Ub1JlY2VpdmUFB2Ftb3VudDEJAAIBAh5hbW91bnQgdG8gcmVjZWl2ZSBpcyB0b28gc21hbGwECnNlbmRBY3Rpb24DCQAAAgkBDHRyeUdldFN0cmluZwEJAKwCAgUHcmVxdWVzdAIFX2RBcHACAAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3JlcXVlc3QCB19zZW5kVG8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDHRyeUdldFN0cmluZwEJAKwCAgUHcmVxdWVzdAIHX3NlbmRUbwUHYW1vdW50MQkBDWdldEFzc2V0Qnl0ZXMBCQCRAwIFCHN3YXBEYXRhAAIFA25pbAQEaW52MgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBCQEMdHJ5R2V0U3RyaW5nAQkArAICBQdyZXF1ZXN0AgVfZEFwcAkBDHRyeUdldFN0cmluZwEJAKwCAgUHcmVxdWVzdAIJX2Z1bmN0aW9uAwkAAAIJAQx0cnlHZXRTdHJpbmcBCQCsAgIFB3JlcXVlc3QCBV9hcmdzAgAFA25pbAkAtQkCCQEMdHJ5R2V0U3RyaW5nAQkArAICBQdyZXF1ZXN0AgVfYXJncwIDfHx8CQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEJAJEDAgUIc3dhcERhdGEAAgUHYW1vdW50MQUDbmlsAwkAAAIFBGludjIFBGludjIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdyZXF1ZXN0AgVfZEFwcAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3JlcXVlc3QCCV9mdW5jdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3JlcXVlc3QCBV9hcmdzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3JlcXVlc3QCB19zdGF0dXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAgdhd2FpdHNfBQdyZXF1ZXN0BQNuaWwFCnNlbmRBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5vAQ/5w==", "chainId": 84, "height": 3083027, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let aggregatorAddress = Address(base58'3MyJM8hLxAMYFrPzdh68QqeMdFSSWufQqw3')
5+
6+let whitelist = [Address(base58'3N6hTBRrwu9yRLLGZ8GM9bqfwD2zSEaxM5n')]
7+
8+func tryGetInteger (key) = match getInteger(this, key) {
9+ case b: Int =>
10+ b
11+ case _ =>
12+ 0
13+}
14+
15+
16+func tryGetString (key) = match getString(this, key) {
17+ case b: String =>
18+ b
19+ case _ =>
20+ ""
21+}
22+
23+
24+func getAssetString (assetId) = match assetId {
25+ case b: ByteVector =>
26+ toBase58String(b)
27+ case _ =>
28+ "WAVES"
29+}
30+
31+
32+func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
33+ then unit
34+ else fromBase58String(assetIdStr)
35+
36+
37+func getBalance (assetId) = match assetId {
38+ case x: Unit =>
39+ wavesBalance(this).available
40+ case _ =>
41+ assetBalance(this, value(assetId))
42+}
43+
44+
45+func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
46+ let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
47+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
48+ (toInt(randomHash, (offset * 8)) % variants)
49+ }
50+
51+
52+@Callable(i)
53+func exchangeThenTransfer (asset1IdStr,recipient,minToReceive) = {
54+ let request = (toBase58String(i.transactionId) + toString(getRandomNumber(100000000000000000, fromBase58String(asset1IdStr), (height - 2), minToReceive)))
55+[StringEntry((request + "_sendTo"), recipient), StringEntry((request + "_status"), "open"), IntegerEntry((request + "_minToReceive"), minToReceive), StringEntry(("awaits_" + request), ((((getAssetString(i.payments[0].assetId) + ",") + toString(i.payments[0].amount)) + ",") + asset1IdStr))]
56+ }
57+
58+
59+
60+@Callable(i)
61+func exchangeThenInvoke (asset1IdStr,dApp,function,args,minToReceive) = {
62+ let request = toBase58String(i.transactionId)
63+[StringEntry((request + "_dApp"), dApp), StringEntry((request + "_function"), function), StringEntry((request + "_args"), makeString(args, "|||")), StringEntry((request + "_status"), "open"), IntegerEntry((request + "_minToReceive"), minToReceive), StringEntry((request + "_sendTo"), toString(i.caller)), StringEntry(("awaits_" + request), ((((getAssetString(i.payments[0].assetId) + ",") + toString(i.payments[0].amount)) + ",") + asset1IdStr))]
64+ }
65+
66+
67+
68+@Callable(i)
69+func cancelExchange (request) = {
70+ let canCancel = if ((tryGetString((request + "_sendTo")) == toString(i.caller)))
71+ then true
72+ else (toString(i.caller) == toString(this))
73+ if (canCancel)
74+ then [DeleteEntry((request + "_sendTo")), DeleteEntry((request + "_status")), DeleteEntry(("awaits_" + request)), DeleteEntry((request + "_dApp")), DeleteEntry((request + "_function")), DeleteEntry((request + "_args"))]
75+ else throw("only request owner can use this method")
76+ }
77+
78+
79+
80+@Callable(i)
81+func puzzleSwap (request,routeStr) = if ((indexOf(whitelist, i.caller) == unit))
82+ then throw("whitelist only")
83+ else if ((tryGetString((request + "_status")) != "open"))
84+ then throw("operation is not possible")
85+ else {
86+ let swapData = split(tryGetString(("awaits_" + request)), ",")
87+ let balanceBefore = getBalance(getAssetBytes(swapData[2]))
88+ if ((balanceBefore == balanceBefore))
89+ then {
90+ let inv = invoke(aggregatorAddress, "swap", [routeStr, 0], [AttachedPayment(getAssetBytes(swapData[0]), parseIntValue(swapData[1]))])
91+ if ((inv == inv))
92+ then {
93+ let amount1 = (getBalance(getAssetBytes(swapData[2])) - balanceBefore)
94+ if ((amount1 == amount1))
95+ then if ((tryGetInteger((request + "_minToReceive")) > amount1))
96+ then throw("amount to receive is too small")
97+ else {
98+ let sendAction = if ((tryGetString((request + "_dApp")) == ""))
99+ then [DeleteEntry((request + "_sendTo")), ScriptTransfer(addressFromStringValue(tryGetString((request + "_sendTo"))), amount1, getAssetBytes(swapData[2]))]
100+ else {
101+ let inv2 = invoke(addressFromStringValue(tryGetString((request + "_dApp"))), tryGetString((request + "_function")), if ((tryGetString((request + "_args")) == ""))
102+ then nil
103+ else split(tryGetString((request + "_args")), "|||"), [AttachedPayment(getAssetBytes(swapData[2]), amount1)])
104+ if ((inv2 == inv2))
105+ then [DeleteEntry((request + "_dApp")), DeleteEntry((request + "_function")), DeleteEntry((request + "_args"))]
106+ else throw("Strict value is not equal to itself.")
107+ }
108+ ([DeleteEntry((request + "_status")), DeleteEntry(("awaits_" + request))] ++ sendAction)
109+ }
110+ else throw("Strict value is not equal to itself.")
111+ }
112+ else throw("Strict value is not equal to itself.")
113+ }
114+ else throw("Strict value is not equal to itself.")
115+ }
116+
117+
118+@Verifier(tx)
119+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
120+

github/deemru/w8io/3ef1775 
24.07 ms