2023.01.23 17:09 [3483212] smart account 3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU > SELF 0.00000000 Waves

{ "type": 13, "id": "EXw88XAUPj6WruszQtgPrBbFEbxktd2bDHuRXQwUWhR", "fee": 1300000, "feeAssetId": null, "timestamp": 1674482984160, "version": 2, "chainId": 87, "sender": "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU", "senderPublicKey": "Dmn1fWHxpwN789LPfoMHFj7uSYKSsb5VFfyNQyQ629f9", "proofs": [ "5d6KNQJd74gUtVFKfbLwfp6o5vkX2KXRQzu1RcWPM3KksppBh9WfrNcBPkLWDydvunTUzJs4zW9JxNRwG1WdsQCb" ], "script": "base64:AAIFAAAAAAAAABUIAhIECgIIARIFCgMIAQgSBAoCCAgAAAAIAAAAAAl1c2RuSWRTdHICAAAALERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAAAAAZ1c2RuSWQBAAAAILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgIAAAAAAQAAAA5nZXRBc3NldFN0cmluZwAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABYgUAAAAHJG1hdGNoMAkAAlgAAAABBQAAAAFiAgAAAAVXQVZFUwEAAAANZ2V0QXNzZXRCeXRlcwAAAAEAAAAKYXNzZXRJZFN0cgMJAAAAAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAKYXNzZXRJZFN0cgEAAAAKZ2V0QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABeAUAAAAHJG1hdGNoMAgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUJAAPwAAAAAgUAAAAEdGhpcwkBAAAABXZhbHVlAAAAAQUAAAAHYXNzZXRJZAEAAAAGc3dhcFdYAAAAAwAAAAZhc3NldDAAAAAGYXNzZXQxAAAAB2Ftb3VudDAEAAAACnByaWNlQXNzZXQDAwkAAAAAAAACBQAAAAZhc3NldDAFAAAACXVzZG5JZFN0cgYJAAAAAAAAAgUAAAAGYXNzZXQxBQAAAAl1c2RuSWRTdHIFAAAACXVzZG5JZFN0cgMDCQAAAAAAAAIFAAAABmFzc2V0MAIAAAAsOExRVzhmN1A1ZDVQWk03R3RaRUJnYXFSUEdTelMzRGZQdWlYclVSSjRBSlMGCQAAAAAAAAIFAAAABmFzc2V0MQIAAAAsOExRVzhmN1A1ZDVQWk03R3RaRUJnYXFSUEdTelMzRGZQdWlYclVSSjRBSlMCAAAALDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTAwMJAAAAAAAAAgUAAAAGYXNzZXQwAgAAAAVXQVZFUwYJAAAAAAAAAgUAAAAGYXNzZXQxAgAAAAVXQVZFUwIAAAAFV0FWRVMCAAAALDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKBAAAAA5mYWN0b3J5QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBV3hb3oq+USquizHqbxOQJb70qbiiuwkCQQQAAAAIYXNzZXRJbnQJAAGkAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAOZmFjdG9yeUFkZHJlc3MJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwMJAQAAAAIhPQAAAAIFAAAABmFzc2V0MQUAAAAKcHJpY2VBc3NldAUAAAAGYXNzZXQxBQAAAAZhc3NldDAEAAAAB3VzZG5JbnQJAAGkAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAOZmFjdG9yeUFkZHJlc3MJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAKcHJpY2VBc3NldAQAAAAKcG9vbENvbmZpZwkABLUAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAA5mYWN0b3J5QWRkcmVzcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAAIYXNzZXRJbnQCAAAAAl9fBQAAAAd1c2RuSW50AgAAAAhfX2NvbmZpZwIAAAACX18EAAAAC3Bvb2xBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcAAAAAAAAAAAEEAAAAC3Bvb2xBc3NldElkCQEAAAANZ2V0QXNzZXRCeXRlcwAA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YWxPdXQFAAAACWZlZUFtb3VudAMJAABmAAAAAgUAAAAMbWluVG9SZWNlaXZlBQAAABBjbGVhblRvdGFsQW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAAAtYW1vdW50IHRvIHJlY2VpdmUgaXMgbG93ZXIgdGhhbiBleHBlY3RlZCBvbmUgCQABpAAAAAEFAAAAEGNsZWFuVG90YWxBbW91bnQEAAAAB3VzZG5GZWUDCQAAAAAAAAIFAAAABmFzc2V0MQUAAAAGdXNkbklkBQAAAAlmZWVBbW91bnQEAAAADnBvb2xBZGRyZXNzU3RyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAADXN0YXRpY19hc3NldF8FAAAACWFzc2V0MVN0cgIAAAALX3B1enpsZVBvb2wDCQAAAAAAAAIFAAAADnBvb2xBZGRyZXNzU3RyAgAAAAAAAAAAAAAAAAAEAAAAEXVzZG5CYWxhbmNlQmVmb3JlCQEAAAAKZ2V0QmFsYW5jZQAAAAEFAAAABnVzZG5JZAMJAAAAAAAAAgUAAAARdXNkbkJhbGFuY2VCZWZvcmUFAAAAEXVzZG5CYWxhbmNlQmVmb3JlBAAAAAxjb252ZXJ0ZWRGZWUJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAOcG9vbEFkZHJlc3NTdHICAAAABHN3YXAJAARMAAAAAgUAAAAJdXNkbklkU3RyCQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAGYXNzZXQxBQAAAAlmZWVBbW91bnQFAAAAA25pbAMJAAAAAAAAAgUAAAAMY29udmVydGVkRmVlBQAAAAxjb252ZXJ0ZWRGZWUEAAAAEHVzZG5CYWxhbmNlQWZ0ZXIJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAGdXNkbklkAwkAAAAAAAACBQAAABB1c2RuQmFsYW5jZUFmdGVyBQAAABB1c2RuQmFsYW5jZUFmdGVyCQAAZQAAAAIFAAAAEHVzZG5CYWxhbmNlQWZ0ZXIFAAAAEXVzZG5CYWxhbmNlQmVmb3JlCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwg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", "height": 3483212, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 88BaFMYbro6zqB29Xnb3iDjg9s9rqfdLwMXvyJ7WrXcL Next: H7W2ES2WUishoNLfiFRowTSusMyvJAWWZENAkJvB3RLN Diff:
OldNewDifferences
5656 let poolConfig = split(getStringValue(factoryAddress, (((("%d%d%s__" + assetInt) + "__") + usdnInt) + "__config")), "__")
5757 let poolAddress = addressFromStringValue(poolConfig[1])
5858 let poolAssetId = getAssetBytes(poolConfig[3])
59- let inv1 = invoke(poolAddress, "putOneTkn", [0, false], [AttachedPayment(getAssetBytes(asset0), amount0)])
59+ let inv1 = invoke(poolAddress, "putOneTkn", [0, true], [AttachedPayment(getAssetBytes(asset0), amount0)])
6060 if ((inv1 == inv1))
6161 then {
62- let poolTokenAmount = getBalance(poolAssetId)
62+ let poolTokenAmount = {
63+ let @ = inv1
64+ if ($isInstanceOf(@, "Int"))
65+ then @
66+ else throw("Couldn't cast Any to Int")
67+ }
6368 if ((poolTokenAmount == poolTokenAmount))
6469 then {
6570 let asset1BalanceBefore = getBalance(getAssetBytes(asset1))
6671 if ((asset1BalanceBefore == asset1BalanceBefore))
6772 then {
68- let inv2 = invoke(poolAddress, "getOneTkn", [asset1, 0], [AttachedPayment(poolAssetId, poolTokenAmount)])
73+ let inv2 = invoke(poolAddress, "unstakeAndGetOneTkn", [poolTokenAmount, asset1, 0], nil)
6974 if ((inv2 == inv2))
7075 then {
7176 let amount1 = (getBalance(getAssetBytes(asset1)) - asset1BalanceBefore)
8691 func swapInternal (i,routesStr,minToReceive,refKey) = {
8792 func doSwap (amount,swap) = {
8893 let swapLi = split(swap, ",")
89- let $t024232504 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
90- let dApp = $t024232504._1
91- let dAppType = $t024232504._2
92- let t0Str = $t024232504._3
93- let t1Str = $t024232504._4
94+ let $t023982479 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
95+ let dApp = $t023982479._1
96+ let dAppType = $t023982479._2
97+ let t0Str = $t023982479._3
98+ let t1Str = $t023982479._4
9499 let t0 = getAssetBytes(t0Str)
95100 let amount0 = if ((amount != 0))
96101 then amount
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let usdnIdStr = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
55
66 let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
77
88 func tryGetString (key) = match getString(this, key) {
99 case b: String =>
1010 b
1111 case _ =>
1212 ""
1313 }
1414
1515
1616 func getAssetString (assetId) = match assetId {
1717 case b: ByteVector =>
1818 toBase58String(b)
1919 case _ =>
2020 "WAVES"
2121 }
2222
2323
2424 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
2525 then unit
2626 else fromBase58String(assetIdStr)
2727
2828
2929 func getBalance (assetId) = match assetId {
3030 case x: Unit =>
3131 wavesBalance(this).available
3232 case _ =>
3333 assetBalance(this, value(assetId))
3434 }
3535
3636
3737 func swapWX (asset0,asset1,amount0) = {
3838 let priceAsset = if (if ((asset0 == usdnIdStr))
3939 then true
4040 else (asset1 == usdnIdStr))
4141 then usdnIdStr
4242 else if (if ((asset0 == "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS"))
4343 then true
4444 else (asset1 == "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS"))
4545 then "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS"
4646 else if (if ((asset0 == "WAVES"))
4747 then true
4848 else (asset1 == "WAVES"))
4949 then "WAVES"
5050 else "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
5151 let factoryAddress = Address(base58'3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv')
5252 let assetInt = toString(getIntegerValue(factoryAddress, ("%s%s%s__mappings__baseAsset2internalId__" + (if ((asset1 != priceAsset))
5353 then asset1
5454 else asset0))))
5555 let usdnInt = toString(getIntegerValue(factoryAddress, ("%s%s%s__mappings__baseAsset2internalId__" + priceAsset)))
5656 let poolConfig = split(getStringValue(factoryAddress, (((("%d%d%s__" + assetInt) + "__") + usdnInt) + "__config")), "__")
5757 let poolAddress = addressFromStringValue(poolConfig[1])
5858 let poolAssetId = getAssetBytes(poolConfig[3])
59- let inv1 = invoke(poolAddress, "putOneTkn", [0, false], [AttachedPayment(getAssetBytes(asset0), amount0)])
59+ let inv1 = invoke(poolAddress, "putOneTkn", [0, true], [AttachedPayment(getAssetBytes(asset0), amount0)])
6060 if ((inv1 == inv1))
6161 then {
62- let poolTokenAmount = getBalance(poolAssetId)
62+ let poolTokenAmount = {
63+ let @ = inv1
64+ if ($isInstanceOf(@, "Int"))
65+ then @
66+ else throw("Couldn't cast Any to Int")
67+ }
6368 if ((poolTokenAmount == poolTokenAmount))
6469 then {
6570 let asset1BalanceBefore = getBalance(getAssetBytes(asset1))
6671 if ((asset1BalanceBefore == asset1BalanceBefore))
6772 then {
68- let inv2 = invoke(poolAddress, "getOneTkn", [asset1, 0], [AttachedPayment(poolAssetId, poolTokenAmount)])
73+ let inv2 = invoke(poolAddress, "unstakeAndGetOneTkn", [poolTokenAmount, asset1, 0], nil)
6974 if ((inv2 == inv2))
7075 then {
7176 let amount1 = (getBalance(getAssetBytes(asset1)) - asset1BalanceBefore)
7277 if ((amount1 == amount1))
7378 then amount1
7479 else throw("Strict value is not equal to itself.")
7580 }
7681 else throw("Strict value is not equal to itself.")
7782 }
7883 else throw("Strict value is not equal to itself.")
7984 }
8085 else throw("Strict value is not equal to itself.")
8186 }
8287 else throw("Strict value is not equal to itself.")
8388 }
8489
8590
8691 func swapInternal (i,routesStr,minToReceive,refKey) = {
8792 func doSwap (amount,swap) = {
8893 let swapLi = split(swap, ",")
89- let $t024232504 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
90- let dApp = $t024232504._1
91- let dAppType = $t024232504._2
92- let t0Str = $t024232504._3
93- let t1Str = $t024232504._4
94+ let $t023982479 = $Tuple4(swapLi[0], swapLi[1], swapLi[2], swapLi[3])
95+ let dApp = $t023982479._1
96+ let dAppType = $t023982479._2
97+ let t0Str = $t023982479._3
98+ let t1Str = $t023982479._4
9499 let t0 = getAssetBytes(t0Str)
95100 let amount0 = if ((amount != 0))
96101 then amount
97102 else getBalance(t0)
98103 let i1 = if ((dAppType == "swopfi"))
99104 then invoke(Address(fromBase58String(dApp)), "exchange", [1], [AttachedPayment(t0, amount0)])
100105 else if ((dAppType == "puzzle"))
101106 then invoke(Address(fromBase58String(dApp)), "swap", [t1Str, 0], [AttachedPayment(t0, amount0)])
102107 else if ((dAppType == "wx"))
103108 then swapWX(t0Str, t1Str, amount0)
104109 else throw("internal aggregator issue: unknow pool type")
105110 if ((i1 == i1))
106111 then 0
107112 else throw("Strict value is not equal to itself.")
108113 }
109114
110115 func doRoute (accum,route) = {
111116 let amountIn = parseIntValue(split(route, "/")[0])
112117 let swaps = split(split(route, "/")[1], ";")
113118 let swapsResult = {
114119 let $l = swaps
115120 let $s = size($l)
116121 let $acc0 = amountIn
117122 func $f0_1 ($a,$i) = if (($i >= $s))
118123 then $a
119124 else doSwap($a, $l[$i])
120125
121126 func $f0_2 ($a,$i) = if (($i >= $s))
122127 then $a
123128 else throw("List size exceeds 3")
124129
125130 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
126131 }
127132 if ((swapsResult == swapsResult))
128133 then (accum + swapsResult)
129134 else throw("Strict value is not equal to itself.")
130135 }
131136
132137 let asset1Str = split(routesStr, ",")[(size(split(routesStr, ",")) - 1)]
133138 let asset1 = getAssetBytes(asset1Str)
134139 let routes = split(routesStr, "|")
135140 let swaps = {
136141 let $l = routes
137142 let $s = size($l)
138143 let $acc0 = 0
139144 func $f0_1 ($a,$i) = if (($i >= $s))
140145 then $a
141146 else doRoute($a, $l[$i])
142147
143148 func $f0_2 ($a,$i) = if (($i >= $s))
144149 then $a
145150 else throw("List size exceeds 4")
146151
147152 $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
148153 }
149154 if ((swaps == swaps))
150155 then {
151156 let totalOut = getBalance(asset1)
152157 let feeAmount = fraction(totalOut, 29, 10000)
153158 let cleanTotalAmount = (totalOut - feeAmount)
154159 if ((minToReceive > cleanTotalAmount))
155160 then throw(("amount to receive is lower than expected one " + toString(cleanTotalAmount)))
156161 else {
157162 let usdnFee = if ((asset1 == usdnId))
158163 then feeAmount
159164 else {
160165 let poolAddressStr = tryGetString((("static_asset_" + asset1Str) + "_puzzlePool"))
161166 if ((poolAddressStr == ""))
162167 then 0
163168 else {
164169 let usdnBalanceBefore = getBalance(usdnId)
165170 if ((usdnBalanceBefore == usdnBalanceBefore))
166171 then {
167172 let convertedFee = invoke(addressFromStringValue(poolAddressStr), "swap", [usdnIdStr, 0], [AttachedPayment(asset1, feeAmount)])
168173 if ((convertedFee == convertedFee))
169174 then {
170175 let usdnBalanceAfter = getBalance(usdnId)
171176 if ((usdnBalanceAfter == usdnBalanceAfter))
172177 then (usdnBalanceAfter - usdnBalanceBefore)
173178 else throw("Strict value is not equal to itself.")
174179 }
175180 else throw("Strict value is not equal to itself.")
176181 }
177182 else throw("Strict value is not equal to itself.")
178183 }
179184 }
180185 if ((usdnFee == usdnFee))
181186 then {
182187 let referralAddress = if ((refKey == "muna"))
183188 then Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
184189 else if ((refKey == "keeper"))
185190 then Address(base58'3PNgw6Db2TGUQbjnV7ekve6q126xBC1e7eM')
186191 else if ((refKey == "tci"))
187192 then Address(base58'3P93R2GBkTGVehRPhytHr7sdxYww93jkbhm')
188193 else Address(base58'3PQxXXiQXpWsjDwQLYxyuoPiaLnVHjJguFo')
189194 let refUsdnShare = if ((refKey == "noref"))
190195 then 0
191196 else fraction(usdnFee, 2, 10)
192197 let topUp = invoke(Address(base58'3PKUxbZaSYfsR7wu2HaAgiirHYwAMupDrYW'), "topUpReward", nil, [AttachedPayment(usdnId, (usdnFee - refUsdnShare))])
193198 if ((topUp == topUp))
194199 then {
195200 let asset0 = i.payments[0].assetId
196201 let amount0 = (getBalance(asset0) - (if ((asset0 == usdnId))
197202 then refUsdnShare
198203 else 0))
199204 let amount1 = (getBalance(asset1) - (if ((asset1 == usdnId))
200205 then refUsdnShare
201206 else 0))
202207 (([ScriptTransfer(i.caller, amount1, asset1)] ++ (if ((refUsdnShare != 0))
203208 then [ScriptTransfer(referralAddress, refUsdnShare, usdnId)]
204209 else nil)) ++ (if ((amount0 != 0))
205210 then [ScriptTransfer(i.caller, amount0, asset0)]
206211 else nil))
207212 }
208213 else throw("Strict value is not equal to itself.")
209214 }
210215 else throw("Strict value is not equal to itself.")
211216 }
212217 }
213218 else throw("Strict value is not equal to itself.")
214219 }
215220
216221
217222 @Callable(i)
218223 func swap (routesStr,minToReceive) = swapInternal(i, routesStr, minToReceive, "noref")
219224
220225
221226
222227 @Callable(i)
223228 func swapWithReferral (routesStr,minToReceive,refKey) = swapInternal(i, routesStr, minToReceive, refKey)
224229
225230
226231
227232 @Callable(i)
228233 func addTokenPuzzlePool (assetIdStr,poolAddressStr) = if ((i.caller != Address(base58'3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd')))
229234 then throw("admin only")
230235 else [StringEntry((("static_asset_" + assetIdStr) + "_puzzlePool"), poolAddressStr)]
231236
232237
233238 @Verifier(tx)
234239 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
235240

github/deemru/w8io/786bc32 
47.93 ms