2022.05.13 02:09 [3114570] smart account 3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw > SELF 0.00000000 Waves

{ "type": 13, "id": "4SMZb6JX9L4vksojYTVgvyZMna548XanWSuvmYMDUKmD", "fee": 1000000, "feeAssetId": null, "timestamp": 1652396941098, "version": 2, "chainId": 87, "sender": "3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw", "senderPublicKey": "4MfTwwE7yP4BFGaifQrcc9Nwb5BA9t92WKhVb6Ton65k", "proofs": [ "rfyfXhvS8vB1vuCrX6596JaeYZfRKT6ZbSYZzmWE2xQHPSuT3SeZjhA9UE7NaLeNkMSNEkpR2vV1B66STzwVYDM" ], "script": "base64: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AAADZmVlCQAAawAAAAMFAAAABmFtb3VudAAAAAAAAAAAAQUAAAAHZmVlUmF0ZQkABRQAAAACCQAAZQAAAAIFAAAABmFtb3VudAUAAAADZmVlBQAAAANmZWUBAAAABmRvU3dhcAAAAAUAAAAEcG9vbAAAAAdwYXltZW50AAAADWFzc2V0UmVjZWl2ZWQAAAASZXN0QW1vdW50VG9SZWNlaXZlAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAAAtwb29sQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAAARwb29sBAAAAAx2ZXJzaW9uTWFqb3IJAQAAAA9wYXJzZUludE9yVGhyb3cAAAABCQABkQAAAAIJAAS1AAAAAgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAHdmVyc2lvbgIAAAABLgAAAAAAAAAAAAQAAAAPYXNzZXRSZWNlaXZlZElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAADWFzc2V0UmVjZWl2ZWQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABAgAAACNlc3RBbW91bnRUb1JlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAVwb29scwUAAAAEcG9vbAQAAAAKcG9vbEFzc2V0QQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQV9hc3NldF9pZAQAAAAKcG9vbEFzc2V0QgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQl9hc3NldF9pZAQAAAAMcG9vbEFzc2V0SWRBCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACnBvb2xBc3NldEEEAAAADHBvb2xBc3NldElkQgkBAAAACmdldEFzc2V0SWQAAAABBQAAAApwb29sQXNzZXRCBAAAAAskdDAyMzI4MjY3MgMDCQAAAAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAADHBvb2xBc3NldElkQgcJAAUUAAAAAgUAAAAMcG9vbEFzc2V0SWRBBQAAAAxwb29sQXNzZXRJZEIDAwkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAxwb29sQXNzZXRJZEIHCQAFFAAAAAIFAAAADHBvb2xBc3NldElkQgUAAAAMcG9vbEFzc2V0SWRBCQAAAgAAAAECAAAAF1Vuc3VwcG9ydGVkIGFzc2V0cyBwYWlyBAAAAAdhc3NldEluCAUAAAALJHQwMjMyODI2NzIAAAACXzEEAAAACGFzc2V0T3V0CAUAAAALJHQwMjMyODI2NzIAAAACXzIEAAAABGFyZ3MDCQAAAAAAAAIFAAAADHZlcnNpb25NYWpvcgAAAAAAAAAAAQkABEwAAAACAAAAAAAAAAABBQAAAANuaWwDCQAAAAAAAAIFAAAADHZlcnNpb25NYWpvcgAAAAAAAAAAAgMJAABnAAAAAgAAAAAAAAAAAAUAAAASZXN0QW1vdW50VG9SZWNlaXZlCQAAAgAAAAECAAAAI2VzdEFtb3VudFRvUmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAARc2xpcHBhZ2VUb2xlcmFuY2UGCQAAZgAAAAIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlAAAAAAAAAAPoCQAAAgAAAAECAAAARlNsaXBwYWdlIHRvbGVyYW5jZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMDAEAAAACW1pbkFtb3VudAkAAGUAAAACBQAAABJlc3RBbW91bnRUb1JlY2VpdmUJAABrAAAAAwUAAAASZXN0QW1vdW50VG9SZWNlaXZlBQAAABFzbGlwcGFnZVRvbGVyYW5jZQAAAAAAAAAD6AkABEwAAAACBQAAABJlc3RBbW91bnRUb1JlY2VpdmUJAARMAAAAAgMJAABmAAAAAgUAAAAJbWluQW1vdW50AAAAAAAAAAAABQAAAAltaW5BbW91bnQAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAWVW5rbm93biBwb29sIHZlcnNpb24gJwkAAaQAAAABBQAAAAx2ZXJzaW9uTWFqb3ICAAAAFicsIGJ1dCAxIG9yIDIgZXhwZWN0ZWQEAAAADWJhbGFuY2VCZWZvcmUJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAPYXNzZXRSZWNlaXZlZElkAwkAAAAAAAACBQAAAA1iYWxhbmNlQmVmb3JlBQAAAA1iYWxhbmNlQmVmb3JlBAAAAAZyZXN1bHQJAAP8AAAABAUAAAALcG9vbEFkZHJlc3MCAAAACGV4Y2hhbmdlBQAAAARhcmdzCQAETAAAAAIFAAAAB3BheW1lbnQFAAAAA25pbAMJAAAAAAAAAgUAAAAGcmVzdWx0BQAAAAZyZXN1bHQEAAAACHJlY2VpdmVkCQAAZQAAAAIJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAPYXNzZXRSZWNlaXZlZElkBQAAAA1iYWxhbmNlQmVmb3JlAwkAAAAAAAACBQAAAAhyZWNlaXZlZAUAAAAIcmVjZWl2ZWQDCQAAZwAAAAIAAAAAAAAAAAAFAAAACHJlY2VpdmVkCQAAAgAAAAECAAAAKlJlY2VpdmVkIGFtb3VudCBmcm9tIHBvb2wgbXVzdCBiZSBwb3NpdGl2ZQUAAAAIcmVjZWl2ZWQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAGcFBvb2xzBQAAAARwb29sBAAAAA1iYWxhbmNlQmVmb3JlCQEAAAAKZ2V0QmFsYW5jZQAAAAEFAAAAD2Fzc2V0UmVjZWl2ZWRJZAMJAAAAAAAAAgUAAAANYmFsYW5jZUJlZm9yZQUAAAANYmFsYW5jZUJlZm9yZQQAAAAGcmVzdWx0CQAD/AAAAAQFAAAAC3Bvb2xBZGRyZXNzAgAAAARzd2FwCQAETAAAAAIFAAAADWFzc2V0UmVjZWl2ZWQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsCQAE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", "height": 3114570, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Br13GfdXoTV3PEU4TidSB6CqinwYFiAgpjAZxyeRCJwh Next: 4gDfvLrBMCvU1PsJaV5X14hd2zpfk58bWuF432s4TpTx Diff:
OldNewDifferences
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)))
5+
6+
7+func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
58
69
710 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1215
1316 let collector = parseAddressOrThrow(getStringOrThrow(this, "collector"))
1417
18+let feeRate = getIntegerOrThrow(this, "fee-rate")
19+
1520 let oracle = parseAddressOrThrow(getStringOrThrow(this, "oracle"))
21+
22+let swopfiRouting = parseAddressOrThrow(getStringOrThrow(this, "swopfi-routing"))
1623
1724 let pools = split(getStringOrThrow(oracle, "pools"), ",")
1825
4451
4552
4653 func deductFee (amount) = {
47- let fee = fraction(amount, 1, 1000)
54+ let fee = fraction(amount, 1, feeRate)
4855 $Tuple2((amount - fee), fee)
4956 }
5057
6168 let poolAssetB = getStringOrThrow(poolAddress, "B_asset_id")
6269 let poolAssetIdA = getAssetId(poolAssetA)
6370 let poolAssetIdB = getAssetId(poolAssetB)
64- let $t020332377 = if (if ((payment.assetId == poolAssetIdA))
71+ let $t023282672 = if (if ((payment.assetId == poolAssetIdA))
6572 then (assetReceivedId == poolAssetIdB)
6673 else false)
6774 then $Tuple2(poolAssetIdA, poolAssetIdB)
7077 else false)
7178 then $Tuple2(poolAssetIdB, poolAssetIdA)
7279 else throw("Unsupported assets pair")
73- let assetIn = $t020332377._1
74- let assetOut = $t020332377._2
80+ let assetIn = $t023282672._1
81+ let assetOut = $t023282672._2
7582 let args = if ((versionMajor == 1))
7683 then [1]
7784 else if ((versionMajor == 2))
128135 }
129136
130137
131-func swapSeq (inv,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = {
138+@Callable(inv)
139+func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = {
132140 let pmt = if ((size(inv.payments) > 0))
133141 then inv.payments[0]
134142 else throw("Payment required")
164172 $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)
165173 }
166174 else throw("Path cannot be empty")
167- let $t050325084 = deductFee(final.amount)
168- let resultAfterFee = $t050325084._1
169- let fee = $t050325084._2
175+ let $t053225374 = deductFee(final.amount)
176+ let resultAfterFee = $t053225374._1
177+ let fee = $t053225374._2
170178 if ((0 >= final.amount))
171179 then throw((("Swap result " + toString(final.amount)) + " must be positive"))
172180 else if ((minReceived > resultAfterFee))
175183 }
176184
177185
178-@Callable(inv)
179-func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
180-
181-
182186
183187 @Callable(inv)
184-func testSeq (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
188+func swopfiSwap (exchangers,exchangersType,args1,args2,routingAssetsKeys,minAmountToReceive) = {
189+ let pmt = if ((size(inv.payments) > 0))
190+ then inv.payments[0]
191+ else throw("Payment required")
192+ let assetFinal = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(exchangers[(size(exchangers) - 1)]), ""), routingAssetsKeys[(size(routingAssetsKeys) - 1)]), "")
193+ let assetFinalId = getAssetId(assetFinal)
194+ let balanceBefore = getBalance(assetFinalId)
195+ if ((balanceBefore == balanceBefore))
196+ then {
197+ let result = invoke(swopfiRouting, "routingTrade", [exchangers, exchangersType, args1, args2, routingAssetsKeys, minAmountToReceive], [pmt])
198+ if ((result == result))
199+ then {
200+ let balanceAfter = getBalance(assetFinalId)
201+ if ((balanceAfter == balanceAfter))
202+ then {
203+ let delta = (balanceAfter - balanceBefore)
204+ let $t067756820 = deductFee(delta)
205+ let resultAfterFee = $t067756820._1
206+ let fee = $t067756820._2
207+ if ((0 >= delta))
208+ then throw((("Swap result " + toString(delta)) + " must be positive"))
209+ else if ((minAmountToReceive > resultAfterFee))
210+ then throw(((("Swap result " + toString(resultAfterFee)) + " is less then expected ") + toString(minAmountToReceive)))
211+ else [ScriptTransfer(inv.caller, resultAfterFee, assetFinalId), ScriptTransfer(collector, fee, assetFinalId)]
212+ }
213+ else throw("Strict value is not equal to itself.")
214+ }
215+ else throw("Strict value is not equal to itself.")
216+ }
217+ else throw("Strict value is not equal to itself.")
218+ }
185219
186220
187221
189223 func addPools (poolAddresses) = {
190224 func addIfDoesNotExist (pools,pool) = if (containsElement(pools, pool))
191225 then throw((("Pool '" + pool) + "' is already added"))
192- else (pools :+ parseAddressOrThrow(pool))
226+ else (pools :+ toString(parseAddressOrThrow(pool)))
193227
194228 if (!(containsElement([this, collector], inv.caller)))
195229 then throw("only self calls or by collector are allowed")
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)))
5+
6+
7+func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
58
69
710 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
811
912
1013 func parseIntOrThrow (maybeInt) = valueOrErrorMessage(parseInt(maybeInt), (("Can't parse integer from '" + maybeInt) + "'"))
1114
1215
1316 let collector = parseAddressOrThrow(getStringOrThrow(this, "collector"))
1417
18+let feeRate = getIntegerOrThrow(this, "fee-rate")
19+
1520 let oracle = parseAddressOrThrow(getStringOrThrow(this, "oracle"))
21+
22+let swopfiRouting = parseAddressOrThrow(getStringOrThrow(this, "swopfi-routing"))
1623
1724 let pools = split(getStringOrThrow(oracle, "pools"), ",")
1825
1926 let pPools = split(getStringOrThrow(this, "p-pools"), ",")
2027
2128 func getAssetId (asset) = if ((asset == "WAVES"))
2229 then unit
2330 else fromBase58String(asset)
2431
2532
2633 func assetIdToString (assetId) = match assetId {
2734 case asset: ByteVector =>
2835 toBase58String(asset)
2936 case waves: Unit =>
3037 "WAVES"
3138 case _ =>
3239 throw("Match error")
3340 }
3441
3542
3643 func getBalance (assetId) = match assetId {
3744 case asset: ByteVector =>
3845 assetBalance(this, asset)
3946 case waves: Unit =>
4047 wavesBalance(this).available
4148 case _ =>
4249 throw("Match error")
4350 }
4451
4552
4653 func deductFee (amount) = {
47- let fee = fraction(amount, 1, 1000)
54+ let fee = fraction(amount, 1, feeRate)
4855 $Tuple2((amount - fee), fee)
4956 }
5057
5158
5259 func doSwap (pool,payment,assetReceived,estAmountToReceive,slippageTolerance) = {
5360 let poolAddress = parseAddressOrThrow(pool)
5461 let versionMajor = parseIntOrThrow(split(getStringOrThrow(poolAddress, "version"), ".")[0])
5562 let assetReceivedId = getAssetId(assetReceived)
5663 if ((0 > estAmountToReceive))
5764 then throw("estAmountToReceive must be positive")
5865 else if (containsElement(pools, pool))
5966 then {
6067 let poolAssetA = getStringOrThrow(poolAddress, "A_asset_id")
6168 let poolAssetB = getStringOrThrow(poolAddress, "B_asset_id")
6269 let poolAssetIdA = getAssetId(poolAssetA)
6370 let poolAssetIdB = getAssetId(poolAssetB)
64- let $t020332377 = if (if ((payment.assetId == poolAssetIdA))
71+ let $t023282672 = if (if ((payment.assetId == poolAssetIdA))
6572 then (assetReceivedId == poolAssetIdB)
6673 else false)
6774 then $Tuple2(poolAssetIdA, poolAssetIdB)
6875 else if (if ((assetReceivedId == poolAssetIdA))
6976 then (payment.assetId == poolAssetIdB)
7077 else false)
7178 then $Tuple2(poolAssetIdB, poolAssetIdA)
7279 else throw("Unsupported assets pair")
73- let assetIn = $t020332377._1
74- let assetOut = $t020332377._2
80+ let assetIn = $t023282672._1
81+ let assetOut = $t023282672._2
7582 let args = if ((versionMajor == 1))
7683 then [1]
7784 else if ((versionMajor == 2))
7885 then if ((0 >= estAmountToReceive))
7986 then throw("estAmountToReceive must be positive")
8087 else if (if ((0 > slippageTolerance))
8188 then true
8289 else (slippageTolerance > 1000))
8390 then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
8491 else {
8592 let minAmount = (estAmountToReceive - fraction(estAmountToReceive, slippageTolerance, 1000))
8693 [estAmountToReceive, if ((minAmount > 0))
8794 then minAmount
8895 else 1]
8996 }
9097 else throw((("Unknown pool version '" + toString(versionMajor)) + "', but 1 or 2 expected"))
9198 let balanceBefore = getBalance(assetReceivedId)
9299 if ((balanceBefore == balanceBefore))
93100 then {
94101 let result = invoke(poolAddress, "exchange", args, [payment])
95102 if ((result == result))
96103 then {
97104 let received = (getBalance(assetReceivedId) - balanceBefore)
98105 if ((received == received))
99106 then if ((0 >= received))
100107 then throw("Received amount from pool must be positive")
101108 else received
102109 else throw("Strict value is not equal to itself.")
103110 }
104111 else throw("Strict value is not equal to itself.")
105112 }
106113 else throw("Strict value is not equal to itself.")
107114 }
108115 else if (containsElement(pPools, pool))
109116 then {
110117 let balanceBefore = getBalance(assetReceivedId)
111118 if ((balanceBefore == balanceBefore))
112119 then {
113120 let result = invoke(poolAddress, "swap", [assetReceived, 0], [payment])
114121 if ((result == result))
115122 then {
116123 let received = (getBalance(assetReceivedId) - balanceBefore)
117124 if ((received == received))
118125 then if ((0 >= received))
119126 then throw("Received amount from pool must be positive")
120127 else received
121128 else throw("Strict value is not equal to itself.")
122129 }
123130 else throw("Strict value is not equal to itself.")
124131 }
125132 else throw("Strict value is not equal to itself.")
126133 }
127134 else throw((("There is no pool at address '" + pool) + "'"))
128135 }
129136
130137
131-func swapSeq (inv,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = {
138+@Callable(inv)
139+func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = {
132140 let pmt = if ((size(inv.payments) > 0))
133141 then inv.payments[0]
134142 else throw("Payment required")
135143 let assetFinal = assetsToReceive[(size(assetsToReceive) - 1)]
136144 let assetFinalId = getAssetId(assetFinal)
137145 let indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
138146 func foldSwap (previousReceived,index) = if ((index >= size(addresses)))
139147 then previousReceived
140148 else {
141149 let assetReceived = assetsToReceive[index]
142150 let assetReceivedId = getAssetId(assetReceived)
143151 match doSwap(addresses[index], previousReceived, assetReceived, estReceived[index], slippageTolerance) {
144152 case income: Int =>
145153 AttachedPayment(assetReceivedId, income)
146154 case _ =>
147155 throw("Can't handle swap result")
148156 }
149157 }
150158
151159 let final = if ((size(addresses) > 0))
152160 then {
153161 let $l = indices
154162 let $s = size($l)
155163 let $acc0 = pmt
156164 func $f0_1 ($a,$i) = if (($i >= $s))
157165 then $a
158166 else foldSwap($a, $l[$i])
159167
160168 func $f0_2 ($a,$i) = if (($i >= $s))
161169 then $a
162170 else throw("List size exceeds 10")
163171
164172 $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)
165173 }
166174 else throw("Path cannot be empty")
167- let $t050325084 = deductFee(final.amount)
168- let resultAfterFee = $t050325084._1
169- let fee = $t050325084._2
175+ let $t053225374 = deductFee(final.amount)
176+ let resultAfterFee = $t053225374._1
177+ let fee = $t053225374._2
170178 if ((0 >= final.amount))
171179 then throw((("Swap result " + toString(final.amount)) + " must be positive"))
172180 else if ((minReceived > resultAfterFee))
173181 then throw(((("Swap result " + toString(resultAfterFee)) + " is less then expected ") + toString(minReceived)))
174182 else [ScriptTransfer(inv.caller, resultAfterFee, assetFinalId), ScriptTransfer(collector, fee, assetFinalId)]
175183 }
176184
177185
178-@Callable(inv)
179-func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
180-
181-
182186
183187 @Callable(inv)
184-func testSeq (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = swapSeq(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
188+func swopfiSwap (exchangers,exchangersType,args1,args2,routingAssetsKeys,minAmountToReceive) = {
189+ let pmt = if ((size(inv.payments) > 0))
190+ then inv.payments[0]
191+ else throw("Payment required")
192+ let assetFinal = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(exchangers[(size(exchangers) - 1)]), ""), routingAssetsKeys[(size(routingAssetsKeys) - 1)]), "")
193+ let assetFinalId = getAssetId(assetFinal)
194+ let balanceBefore = getBalance(assetFinalId)
195+ if ((balanceBefore == balanceBefore))
196+ then {
197+ let result = invoke(swopfiRouting, "routingTrade", [exchangers, exchangersType, args1, args2, routingAssetsKeys, minAmountToReceive], [pmt])
198+ if ((result == result))
199+ then {
200+ let balanceAfter = getBalance(assetFinalId)
201+ if ((balanceAfter == balanceAfter))
202+ then {
203+ let delta = (balanceAfter - balanceBefore)
204+ let $t067756820 = deductFee(delta)
205+ let resultAfterFee = $t067756820._1
206+ let fee = $t067756820._2
207+ if ((0 >= delta))
208+ then throw((("Swap result " + toString(delta)) + " must be positive"))
209+ else if ((minAmountToReceive > resultAfterFee))
210+ then throw(((("Swap result " + toString(resultAfterFee)) + " is less then expected ") + toString(minAmountToReceive)))
211+ else [ScriptTransfer(inv.caller, resultAfterFee, assetFinalId), ScriptTransfer(collector, fee, assetFinalId)]
212+ }
213+ else throw("Strict value is not equal to itself.")
214+ }
215+ else throw("Strict value is not equal to itself.")
216+ }
217+ else throw("Strict value is not equal to itself.")
218+ }
185219
186220
187221
188222 @Callable(inv)
189223 func addPools (poolAddresses) = {
190224 func addIfDoesNotExist (pools,pool) = if (containsElement(pools, pool))
191225 then throw((("Pool '" + pool) + "' is already added"))
192- else (pools :+ parseAddressOrThrow(pool))
226+ else (pools :+ toString(parseAddressOrThrow(pool)))
193227
194228 if (!(containsElement([this, collector], inv.caller)))
195229 then throw("only self calls or by collector are allowed")
196230 else [StringEntry("p-pools", makeString({
197231 let $l = poolAddresses
198232 let $s = size($l)
199233 let $acc0 = pPools
200234 func $f0_1 ($a,$i) = if (($i >= $s))
201235 then $a
202236 else addIfDoesNotExist($a, $l[$i])
203237
204238 func $f0_2 ($a,$i) = if (($i >= $s))
205239 then $a
206240 else throw("List size exceeds 10")
207241
208242 $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)
209243 }, ","))]
210244 }
211245
212246

github/deemru/w8io/786bc32 
78.51 ms