2022.03.25 15:23 [3044622] smart account 3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw > SELF 0.00000000 Waves

{ "type": 13, "id": "Br13GfdXoTV3PEU4TidSB6CqinwYFiAgpjAZxyeRCJwh", "fee": 1000000, "feeAssetId": null, "timestamp": 1648211038382, "version": 1, "sender": "3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw", "senderPublicKey": "4MfTwwE7yP4BFGaifQrcc9Nwb5BA9t92WKhVb6Ton65k", "proofs": [ "U6Pb71dMcWxWiLnd7SmZTZEvcNLZLywHx1QBktwMQFSiYKmG3sogcze88Hs49b6pYgjCNFZytpqecSL88GCDmPm" ], "script": "base64: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LgAAAAAAAAAAAAQAAAAPYXNzZXRSZWNlaXZlZElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAADWFzc2V0UmVjZWl2ZWQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABAgAAACNlc3RBbW91bnRUb1JlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAVwb29scwUAAAAEcG9vbAQAAAAKcG9vbEFzc2V0QQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQV9hc3NldF9pZAQAAAAKcG9vbEFzc2V0QgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQl9hc3NldF9pZAQAAAAMcG9vbEFzc2V0SWRBCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACnBvb2xBc3NldEEEAAAADHBvb2xBc3NldElkQgkBAAAACmdldEFzc2V0SWQAAAABBQAAAApwb29sQXNzZXRCBAAAAAskdDAyMDMzMjM3NwMDCQAAAAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAADHBvb2xBc3NldElkQgcJAAUUAAAAAgUAAAAMcG9vbEFzc2V0SWRBBQAAAAxwb29sQXNzZXRJZEIDAwkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAxwb29sQXNzZXRJZEIHCQAFFAAAAAIFAAAADHBvb2xBc3NldElkQgUAAAAMcG9vbEFzc2V0SWRBCQAAAgAAAAECAAAAF1Vuc3VwcG9ydGVkIGFzc2V0cyBwYWlyBAAAAAdhc3NldEluCAUAAAALJHQwMjAzMzIzNzcAAAACXzEEAAAACGFzc2V0T3V0CAUAAAALJHQwMjAzMzIzNzcAAAACXzIEAAAABGFyZ3MDCQAAAAAAAAIFAAAADHZlcnNpb25NYWpvcgAAAAAAAAAAAQkABEwA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", "chainId": 87, "height": 3044622, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DyBTnroPAA8tcdTtimLMsCMRpH69QdgCx7JPqbBCxizh Next: 4SMZb6JX9L4vksojYTVgvyZMna548XanWSuvmYMDUKmD Diff:
OldNewDifferences
184184 func testSeq (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
185185
186186
187+
188+@Callable(inv)
189+func addPools (poolAddresses) = {
190+ func addIfDoesNotExist (pools,pool) = if (containsElement(pools, pool))
191+ then throw((("Pool '" + pool) + "' is already added"))
192+ else (pools :+ parseAddressOrThrow(pool))
193+
194+ if (!(containsElement([this, collector], inv.caller)))
195+ then throw("only self calls or by collector are allowed")
196+ else [StringEntry("p-pools", makeString({
197+ let $l = poolAddresses
198+ let $s = size($l)
199+ let $acc0 = pPools
200+ func $f0_1 ($a,$i) = if (($i >= $s))
201+ then $a
202+ else addIfDoesNotExist($a, $l[$i])
203+
204+ func $f0_2 ($a,$i) = if (($i >= $s))
205+ then $a
206+ else throw("List size exceeds 10")
207+
208+ $f0_2($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)
209+ }, ","))]
210+ }
211+
212+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
88
99
1010 func parseIntOrThrow (maybeInt) = valueOrErrorMessage(parseInt(maybeInt), (("Can't parse integer from '" + maybeInt) + "'"))
1111
1212
1313 let collector = parseAddressOrThrow(getStringOrThrow(this, "collector"))
1414
1515 let oracle = parseAddressOrThrow(getStringOrThrow(this, "oracle"))
1616
1717 let pools = split(getStringOrThrow(oracle, "pools"), ",")
1818
1919 let pPools = split(getStringOrThrow(this, "p-pools"), ",")
2020
2121 func getAssetId (asset) = if ((asset == "WAVES"))
2222 then unit
2323 else fromBase58String(asset)
2424
2525
2626 func assetIdToString (assetId) = match assetId {
2727 case asset: ByteVector =>
2828 toBase58String(asset)
2929 case waves: Unit =>
3030 "WAVES"
3131 case _ =>
3232 throw("Match error")
3333 }
3434
3535
3636 func getBalance (assetId) = match assetId {
3737 case asset: ByteVector =>
3838 assetBalance(this, asset)
3939 case waves: Unit =>
4040 wavesBalance(this).available
4141 case _ =>
4242 throw("Match error")
4343 }
4444
4545
4646 func deductFee (amount) = {
4747 let fee = fraction(amount, 1, 1000)
4848 $Tuple2((amount - fee), fee)
4949 }
5050
5151
5252 func doSwap (pool,payment,assetReceived,estAmountToReceive,slippageTolerance) = {
5353 let poolAddress = parseAddressOrThrow(pool)
5454 let versionMajor = parseIntOrThrow(split(getStringOrThrow(poolAddress, "version"), ".")[0])
5555 let assetReceivedId = getAssetId(assetReceived)
5656 if ((0 > estAmountToReceive))
5757 then throw("estAmountToReceive must be positive")
5858 else if (containsElement(pools, pool))
5959 then {
6060 let poolAssetA = getStringOrThrow(poolAddress, "A_asset_id")
6161 let poolAssetB = getStringOrThrow(poolAddress, "B_asset_id")
6262 let poolAssetIdA = getAssetId(poolAssetA)
6363 let poolAssetIdB = getAssetId(poolAssetB)
6464 let $t020332377 = if (if ((payment.assetId == poolAssetIdA))
6565 then (assetReceivedId == poolAssetIdB)
6666 else false)
6767 then $Tuple2(poolAssetIdA, poolAssetIdB)
6868 else if (if ((assetReceivedId == poolAssetIdA))
6969 then (payment.assetId == poolAssetIdB)
7070 else false)
7171 then $Tuple2(poolAssetIdB, poolAssetIdA)
7272 else throw("Unsupported assets pair")
7373 let assetIn = $t020332377._1
7474 let assetOut = $t020332377._2
7575 let args = if ((versionMajor == 1))
7676 then [1]
7777 else if ((versionMajor == 2))
7878 then if ((0 >= estAmountToReceive))
7979 then throw("estAmountToReceive must be positive")
8080 else if (if ((0 > slippageTolerance))
8181 then true
8282 else (slippageTolerance > 1000))
8383 then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
8484 else {
8585 let minAmount = (estAmountToReceive - fraction(estAmountToReceive, slippageTolerance, 1000))
8686 [estAmountToReceive, if ((minAmount > 0))
8787 then minAmount
8888 else 1]
8989 }
9090 else throw((("Unknown pool version '" + toString(versionMajor)) + "', but 1 or 2 expected"))
9191 let balanceBefore = getBalance(assetReceivedId)
9292 if ((balanceBefore == balanceBefore))
9393 then {
9494 let result = invoke(poolAddress, "exchange", args, [payment])
9595 if ((result == result))
9696 then {
9797 let received = (getBalance(assetReceivedId) - balanceBefore)
9898 if ((received == received))
9999 then if ((0 >= received))
100100 then throw("Received amount from pool must be positive")
101101 else received
102102 else throw("Strict value is not equal to itself.")
103103 }
104104 else throw("Strict value is not equal to itself.")
105105 }
106106 else throw("Strict value is not equal to itself.")
107107 }
108108 else if (containsElement(pPools, pool))
109109 then {
110110 let balanceBefore = getBalance(assetReceivedId)
111111 if ((balanceBefore == balanceBefore))
112112 then {
113113 let result = invoke(poolAddress, "swap", [assetReceived, 0], [payment])
114114 if ((result == result))
115115 then {
116116 let received = (getBalance(assetReceivedId) - balanceBefore)
117117 if ((received == received))
118118 then if ((0 >= received))
119119 then throw("Received amount from pool must be positive")
120120 else received
121121 else throw("Strict value is not equal to itself.")
122122 }
123123 else throw("Strict value is not equal to itself.")
124124 }
125125 else throw("Strict value is not equal to itself.")
126126 }
127127 else throw((("There is no pool at address '" + pool) + "'"))
128128 }
129129
130130
131131 func swapSeq (inv,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = {
132132 let pmt = if ((size(inv.payments) > 0))
133133 then inv.payments[0]
134134 else throw("Payment required")
135135 let assetFinal = assetsToReceive[(size(assetsToReceive) - 1)]
136136 let assetFinalId = getAssetId(assetFinal)
137137 let indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
138138 func foldSwap (previousReceived,index) = if ((index >= size(addresses)))
139139 then previousReceived
140140 else {
141141 let assetReceived = assetsToReceive[index]
142142 let assetReceivedId = getAssetId(assetReceived)
143143 match doSwap(addresses[index], previousReceived, assetReceived, estReceived[index], slippageTolerance) {
144144 case income: Int =>
145145 AttachedPayment(assetReceivedId, income)
146146 case _ =>
147147 throw("Can't handle swap result")
148148 }
149149 }
150150
151151 let final = if ((size(addresses) > 0))
152152 then {
153153 let $l = indices
154154 let $s = size($l)
155155 let $acc0 = pmt
156156 func $f0_1 ($a,$i) = if (($i >= $s))
157157 then $a
158158 else foldSwap($a, $l[$i])
159159
160160 func $f0_2 ($a,$i) = if (($i >= $s))
161161 then $a
162162 else throw("List size exceeds 10")
163163
164164 $f0_2($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)
165165 }
166166 else throw("Path cannot be empty")
167167 let $t050325084 = deductFee(final.amount)
168168 let resultAfterFee = $t050325084._1
169169 let fee = $t050325084._2
170170 if ((0 >= final.amount))
171171 then throw((("Swap result " + toString(final.amount)) + " must be positive"))
172172 else if ((minReceived > resultAfterFee))
173173 then throw(((("Swap result " + toString(resultAfterFee)) + " is less then expected ") + toString(minReceived)))
174174 else [ScriptTransfer(inv.caller, resultAfterFee, assetFinalId), ScriptTransfer(collector, fee, assetFinalId)]
175175 }
176176
177177
178178 @Callable(inv)
179179 func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
180180
181181
182182
183183 @Callable(inv)
184184 func testSeq (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
185185
186186
187+
188+@Callable(inv)
189+func addPools (poolAddresses) = {
190+ func addIfDoesNotExist (pools,pool) = if (containsElement(pools, pool))
191+ then throw((("Pool '" + pool) + "' is already added"))
192+ else (pools :+ parseAddressOrThrow(pool))
193+
194+ if (!(containsElement([this, collector], inv.caller)))
195+ then throw("only self calls or by collector are allowed")
196+ else [StringEntry("p-pools", makeString({
197+ let $l = poolAddresses
198+ let $s = size($l)
199+ let $acc0 = pPools
200+ func $f0_1 ($a,$i) = if (($i >= $s))
201+ then $a
202+ else addIfDoesNotExist($a, $l[$i])
203+
204+ func $f0_2 ($a,$i) = if (($i >= $s))
205+ then $a
206+ else throw("List size exceeds 10")
207+
208+ $f0_2($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)
209+ }, ","))]
210+ }
211+
212+

github/deemru/w8io/786bc32 
47.16 ms