tx · J2DMxezfqgViwjspp1h55dBuFpyFabwac4nMEjM7wxNR

3N11gzZic4yASFhatzjC8zvLnpNhDo2B1Rv:  -0.01000000 Waves

2023.10.06 13:34 [2786644] smart account 3N11gzZic4yASFhatzjC8zvLnpNhDo2B1Rv > SELF 0.00000000 Waves

{ "type": 13, "id": "J2DMxezfqgViwjspp1h55dBuFpyFabwac4nMEjM7wxNR", "fee": 1000000, "feeAssetId": null, "timestamp": 1696588469206, "version": 2, "chainId": 84, "sender": "3N11gzZic4yASFhatzjC8zvLnpNhDo2B1Rv", "senderPublicKey": "EnUXxxhBK8wUfh1FveDYv9G5HBMXop6YwZWzVrBrLo2i", "proofs": [ "G6xq6NvoCAJ3ZuatvxvJVnQZwFH7DSD56Nj1Gfxw3X3Pfe7VJdVgeUkBepwQh6vSQcdbvQYKgbY4GQESQNx2hwo" ], "script": "base64:BgIiCAISAwoBCBIICgYBAQgIGBgSBAoCCAgSBAoCCAESAwoBCAoADGFkbWluQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAgVhZG1pbgIAAA13eFN3YXBBZGRyZXNzAiMzUDY4ek5pdWZzdTF2aVpwdTFhWTNjZGFoUlJLY3ZWNU45MwELd3JpdGVTdHJpbmcCA2tleQtzdHJpbmdWYWx1ZQkBC1N0cmluZ0VudHJ5AgUDa2V5BQtzdHJpbmdWYWx1ZQEMd3JpdGVJbnRlZ2VyAgNrZXkMaW50ZWdlclZhbHVlCQEMSW50ZWdlckVudHJ5AgUDa2V5BQxpbnRlZ2VyVmFsdWUBB2lzQWRtaW4BDWNhbGxlckFkZHJlc3MDCQAAAgUNY2FsbGVyQWRkcmVzcwkA2QQBBQxhZG1pbkFkZHJlc3MGBwENc3BsaXRDZm1tSnNvbgEFZW50cnkJALUJAgUFZW50cnkCAS8BEWRldGVybWluZVBsYXRmb3JtAwRjZm1tCXRva2VuSWRJbgp0b2tlbklkT3V0BARpdGVtCQENc3BsaXRDZm1tSnNvbgEFBGNmbW0EC2lucHV0QW1vdW50CQC2CQEJAJEDAgUEaXRlbQACBAckbWF0Y2gwBQtpbnB1dEFtb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEC2lucHV0QW1vdW50BQckbWF0Y2gwAwkAAAIJAJEDAgUEaXRlbQAAAgRTV09QCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUEaXRlbQABAghleGNoYW5nZQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQl0b2tlbklkSW4FC2lucHV0QW1vdW50BQNuaWwDCQAAAgkAkQMCBQRpdGVtAAACDldhdmVzIEV4Y2hhbmdlCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDXd4U3dhcEFkZHJlc3MCBHN3YXAJAMwIAgABCQDMCAIFCnRva2VuSWRPdXQJAMwIAgUMYWRtaW5BZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUJdG9rZW5JZEluBQtpbnB1dEFtb3VudAUDbmlsAwkAAAIJAJEDAgUEaXRlbQAAAgtQdXp6bGUgU3dh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AAgJARRkaXN0cmlidXRlRGlmZmVyZW5jZQIFBXN3YXBzBQRkaWZmAl8xBQVzd2FwcwUNYWRqdXN0ZWRTd2FwcwUBaQEFc2V0dXABBWFkbWluAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzAgVhZG1pbgkAzAgCCQELd3JpdGVTdHJpbmcCAgVhZG1pbgUFYWRtaW4FA25pbAkAAgECE0RhcHAgYWxyZWFkeSBzZXR1cCEBaQEIYmFzaWNBcmIGC3N0YXJ0QW1vdW50DnNlY29uZEFtb3VudEluCmZpcnN0VG9rZW4Lc2Vjb25kVG9rZW4JZmlyc3RTd2FwCnNlY29uZFN3YXADCQEHaXNBZG1pbgEICAUBaQZjYWxsZXIFYnl0ZXMEDGZpcnN0VG9rZW5JZAQDdElkCQDZBAEFCmZpcnN0VG9rZW4EByRtYXRjaDAFA3RJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAN0SWQFByRtYXRjaDAFA3RJZAkAAgECEEludmFsaWQgZGF0YXR5cGUEGWF2YWlsYWJsZUFtb3VudEZpcnN0VG9rZW4JAPAHAgUEdGhpcwUMZmlyc3RUb2tlbklkAwkAZwIFGWF2YWlsYWJsZUFtb3VudEZpcnN0VG9rZW4FC3N0YXJ0QW1vdW50BAZyZXN1bHQJAQxwcm9jZXNzQ2ZtbXMDBQlmaXJzdFN3YXAFCmZpcnN0VG9rZW4FC3NlY29uZFRva2VuBA1zZWNvbmRUb2tlbklkBAJpZAkA2QQBBQtzZWNvbmRUb2tlbgQHJG1hdGNoMAUCaWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAFAmlkCQACAQIQSW52YWxpZCBkYXRhdHlwZQQaYXZhaWxhYmxlQW1vdW50U2Vjb25kVG9rZW4JAPAHAgUEdGhpcwUNc2Vjb25kVG9rZW5JZAQLc2Vjb25kU3dhcHMDCQAAAgUaYXZhaWxhYmxlQW1vdW50U2Vjb25kVG9rZW4FDnNlY29uZEFtb3VudEluBQpzZWNvbmRTd2FwCQEXaGFuZGxlU2Vjb25kSW5wdXRBbW91bnQDBQ5zZWNvbmRBbW91bnRJbgUaYXZhaWxhYmxlQW1vdW50U2Vjb25kVG9rZW4FCnNlY29uZFN3YXAECXJlc3VsdFR3bwkBDHByb2Nlc3NDZm1tcwMFC3NlY29uZFN3YXBzBQtzZWNvbmRUb2tlbgUKZmlyc3RUb2tlbgQYY3VycmVudFN0YXJ0VG9rZW5CYWxhbmNlCQDwBwIFBHRoaXMFDGZpcnN0VG9rZW5JZAMJAGYCBRhjdXJyZW50U3RhcnRUb2tlbkJhbGFuY2UFC3N0YXJ0QW1vdW50BQNuaWwJAAIBAhlUcmFkZSB3YXMgbm90IHByb2ZpdGFibGUhCQACAQIpQXZhaWxhYmxlIGlucHV0IGFtb3VudCBpcyBub3Qgc3VmZmljaWVudCEJAAIBAipBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdpdGggYWRtaW4gYWRkcmVzcyEBaQERdXBkYXRlU3RyaW5nRW50cnkCA2tleQtzdHJpbmdWYWx1ZQMJAQdpc0FkbWluAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELd3JpdGVTdHJpbmcCBQNrZXkFC3N0cmluZ1ZhbHVlBQNuaWwJAAIBAipBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdpdGggYWRtaW4gYWRkcmVzcyEBaQESdXBkYXRlSW50ZWdlckVudHJ5AgNrZXkMaW50ZWdlclZhbHVlAwkBB2lzQWRtaW4BCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQx3cml0ZUludGVnZXICBQNrZXkFDGludGVnZXJWYWx1ZQUDbmlsCQACAQIqQWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aXRoIGFkbWluIGFkZHJlc3MhAWkBEmRlbGV0ZVN0b3JhZ2VFbnRyeQEDa2V5AwkBB2lzQWRtaW4BCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtEZWxldGVFbnRyeQEFA2tleQUDbmlsCQACAQIqQWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aXRoIGFkbWluIGFkZHJlc3MhAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleeZQUnE=", "height": 2786644, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 5WAd5iLZ9EVt2AjjapnsEVyA8G9vgfFQUfAXJNYCijME Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let adminAddress = valueOrElse(getString(this, "admin"), "")
5+
6+let wxSwapAddress = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
7+
8+func writeString (key,stringValue) = StringEntry(key, stringValue)
9+
10+
11+func writeInteger (key,integerValue) = IntegerEntry(key, integerValue)
12+
13+
14+func isAdmin (callerAddress) = if ((callerAddress == fromBase58String(adminAddress)))
15+ then true
16+ else false
17+
18+
19+func splitCfmmJson (entry) = split(entry, "/")
20+
21+
22+func determinePlatform (cfmm,tokenIdIn,tokenIdOut) = {
23+ let item = splitCfmmJson(cfmm)
24+ let inputAmount = parseInt(item[2])
25+ match inputAmount {
26+ case inputAmount: Int =>
27+ if ((item[0] == "SWOP"))
28+ then invoke(addressFromStringValue(item[1]), "exchange", [1], [AttachedPayment(fromBase58String(tokenIdIn), inputAmount)])
29+ else if ((item[0] == "Waves Exchange"))
30+ then invoke(addressFromStringValue(wxSwapAddress), "swap", [1, tokenIdOut, adminAddress], [AttachedPayment(fromBase58String(tokenIdIn), inputAmount)])
31+ else if ((item[0] == "Puzzle Swap"))
32+ then invoke(addressFromStringValue(item[1]), "swap", [tokenIdOut, 1], [AttachedPayment(fromBase58String(tokenIdIn), inputAmount)])
33+ else throw("Platform id does not match!")
34+ case _ =>
35+ throw("value is not an int!")
36+ }
37+ }
38+
39+
40+func processCfmms (swaps,tokenIdIn,tokenIdOut) = {
41+ func invokeSwap (accum,next) = {
42+ let $t022642291 = accum
43+ let result = $t022642291._1
44+ let index = $t022642291._2
45+ if ((size(swaps) > index))
46+ then $Tuple2(determinePlatform(next, tokenIdIn, tokenIdOut), (index + 1))
47+ else $Tuple2(result, index)
48+ }
49+
50+ let $l = swaps
51+ let $s = size($l)
52+ let $acc0 = $Tuple2(nil, 0)
53+ func $f0_1 ($a,$i) = if (($i >= $s))
54+ then $a
55+ else invokeSwap($a, $l[$i])
56+
57+ func $f0_2 ($a,$i) = if (($i >= $s))
58+ then $a
59+ else throw("List size exceeds 40")
60+
61+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
62+ }
63+
64+
65+func distributeDifference (swaps,diff) = {
66+ let totalSwaps = size(swaps)
67+ func adjustAmounts (accum,next) = {
68+ let $t026322674 = accum
69+ let adjustedSwaps = $t026322674._1
70+ let remainingDiff = $t026322674._2
71+ let item = splitCfmmJson(next)
72+ let inputAmount = parseInt(item[2])
73+ match inputAmount {
74+ case input: Int =>
75+ let amountToAdjust = {
76+ let remainDiff = (remainingDiff / ((totalSwaps - size(adjustedSwaps)) + 1))
77+ match remainDiff {
78+ case x: Int =>
79+ if ((remainingDiff > 0))
80+ then min([input, x])
81+ else if ((0 > remainingDiff))
82+ then max([(-(input) + 1), x])
83+ else 0
84+ case _ =>
85+ throw("Wrong datatype")
86+ }
87+ }
88+ let newInputAmount = max([1, (input + amountToAdjust)])
89+ let newItem = ((((item[0] + "/") + item[1]) + "/") + toString(newInputAmount))
90+ $Tuple2((adjustedSwaps :+ newItem), (remainingDiff - (amountToAdjust * ((totalSwaps - size(adjustedSwaps)) + 1))))
91+ case _ =>
92+ throw("Input has wrong datatype!")
93+ }
94+ }
95+
96+ let $l = swaps
97+ let $s = size($l)
98+ let $acc0 = $Tuple2(nil, diff)
99+ func $f0_1 ($a,$i) = if (($i >= $s))
100+ then $a
101+ else adjustAmounts($a, $l[$i])
102+
103+ func $f0_2 ($a,$i) = if (($i >= $s))
104+ then $a
105+ else throw("List size exceeds 40")
106+
107+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40)
108+ }
109+
110+
111+func handleSecondInputAmount (predeterminedAmount,availableAmount,swaps) = {
112+ let diff = (availableAmount - predeterminedAmount)
113+ let adjustedSwaps = if ((diff != 0))
114+ then distributeDifference(swaps, diff)._1
115+ else swaps
116+ adjustedSwaps
117+ }
118+
119+
120+@Callable(i)
121+func setup (admin) = if (!(isDefined(getString(this, "admin"))))
122+ then [writeString("admin", admin)]
123+ else throw("Dapp already setup!")
124+
125+
126+
127+@Callable(i)
128+func basicArb (startAmount,secondAmountIn,firstToken,secondToken,firstSwap,secondSwap) = if (isAdmin(i.caller.bytes))
129+ then {
130+ let firstTokenId = {
131+ let tId = fromBase58String(firstToken)
132+ match tId {
133+ case tId: ByteVector =>
134+ tId
135+ case _ =>
136+ throw("Invalid datatype")
137+ }
138+ }
139+ let availableAmountFirstToken = assetBalance(this, firstTokenId)
140+ if ((availableAmountFirstToken >= startAmount))
141+ then {
142+ let result = processCfmms(firstSwap, firstToken, secondToken)
143+ let secondTokenId = {
144+ let id = fromBase58String(secondToken)
145+ match id {
146+ case id: ByteVector =>
147+ id
148+ case _ =>
149+ throw("Invalid datatype")
150+ }
151+ }
152+ let availableAmountSecondToken = assetBalance(this, secondTokenId)
153+ let secondSwaps = if ((availableAmountSecondToken == secondAmountIn))
154+ then secondSwap
155+ else handleSecondInputAmount(secondAmountIn, availableAmountSecondToken, secondSwap)
156+ let resultTwo = processCfmms(secondSwaps, secondToken, firstToken)
157+ let currentStartTokenBalance = assetBalance(this, firstTokenId)
158+ if ((currentStartTokenBalance > startAmount))
159+ then nil
160+ else throw("Trade was not profitable!")
161+ }
162+ else throw("Available input amount is not sufficient!")
163+ }
164+ else throw("Address does not match with admin address!")
165+
166+
167+
168+@Callable(i)
169+func updateStringEntry (key,stringValue) = if (isAdmin(i.caller.bytes))
170+ then [writeString(key, stringValue)]
171+ else throw("Address does not match with admin address!")
172+
173+
174+
175+@Callable(i)
176+func updateIntegerEntry (key,integerValue) = if (isAdmin(i.caller.bytes))
177+ then [writeInteger(key, integerValue)]
178+ else throw("Address does not match with admin address!")
179+
180+
181+
182+@Callable(i)
183+func deleteStorageEntry (key) = if (isAdmin(i.caller.bytes))
184+ then [DeleteEntry(key)]
185+ else throw("Address does not match with admin address!")
186+
187+
188+@Verifier(tx)
189+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
190+

github/deemru/w8io/873ac7e 
38.93 ms