tx · 9GWqbd8YPXCSzh7DhAEwLRcVg8ua6o5AvmPAaTHXfUoa

3PDrYPF6izza2sXWffzTPF7e2Fcir2CMpki:  -0.01400000 Waves

2021.11.08 11:27 [2846804] smart account 3PDrYPF6izza2sXWffzTPF7e2Fcir2CMpki > SELF 0.00000000 Waves

{ "type": 13, "id": "9GWqbd8YPXCSzh7DhAEwLRcVg8ua6o5AvmPAaTHXfUoa", "fee": 1400000, "feeAssetId": null, "timestamp": 1636360072230, "version": 2, "chainId": 87, "sender": "3PDrYPF6izza2sXWffzTPF7e2Fcir2CMpki", "senderPublicKey": "BHGZUnraSaYR29gbS4KuRhjkKjKbD22KfX6vjJdcMQd3", "proofs": [ "3TzNDCzKm6b7hN9RmVNFJa2crwKtt3rfZMKHWpPrz3zPY6rj9moEXKqDTxy87wMLmhNa7N7RsGpzBnPEhTaaJYNS" ], "script": "base64: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", "height": 2846804, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7mThaWQtcUuh8SW5BWby4osbyuYzgevkXYjukb3SBBg7 Next: FZBAL2bahWxToeWdNkdC9YatqdAnCK9bD3GHZPHjjVva Diff:
OldNewDifferences
285285
286286 func calculatePoolTokensAmount (payments) = {
287287 func handler (accum,pmt) = {
288- let assetId = value(pmt.assetId)
288+ let assetId = pmt.assetId
289289 func handler2 (accum,n) = if ((n == assetId))
290290 then value(indexOf(assetIds, n))
291291 else accum
365365 func swap (assetOut,minimum) = {
366366 let pmt = value(i.payments[0])
367367 let AmountIn = value(i.payments[0].amount)
368- let AssetIn = value(pmt.assetId)
368+ let AssetIn = pmt.assetId
369369 let AssetOut = fromBase58String(assetOut)
370370 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut)
371371 if ((minimum > AmountOut))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let T = 10
55
66 let assetIds = [unit, base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS', base58'5nk9JW8yRonyNBEwhChoksLxpBECVxbVLqaNuQs9EJn1', base58'Dfx6LJPndo1h5Umk9SofDhMDs6Gi8cHyT3873pSgoASU', base58'6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g', base58'7LMV3s1J4dKpMQZqge5sKYoFkZRLojnnU49aerqos4yg', base58'9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y', base58'4K35syPfY2tYrNWzjh1vbmH39qE4qPV7SwLwekrzD82r', base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p']
77
88 let AssetsWeights = [20, 20, 8, 8, 6, 6, 4, 4, 12, 12]
99
1010 let AssetsWeightsDecimals = 2
1111
1212 let PoolTokenDecimals = 8
1313
1414 let Decimals = [8, 8, 8, 8, 6, 8, 8, 6, 6, 6]
1515
1616 let Scales = [100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 1000000]
1717
1818 let Fee = 200
1919
2020 let Scale = 10000
2121
2222 let FeeScale = 10000
2323
2424 let feeAggregator = Address(base58'3PBmAwjkwsM83KQhjSMNZvgdFeYeLz9tdBD')
2525
2626 func tryGetInteger (key) = match getInteger(this, key) {
2727 case b: Int =>
2828 b
2929 case _ =>
3030 0
3131 }
3232
3333
3434 func tryGetBinary (key) = match getBinary(this, key) {
3535 case b: ByteVector =>
3636 b
3737 case _ =>
3838 base58''
3939 }
4040
4141
4242 func getAssetString (assetId) = match assetId {
4343 case b: ByteVector =>
4444 toBase58String(b)
4545 case _ =>
4646 "WAVES"
4747 }
4848
4949
5050 func getCurrentTokenBalance (tokenType) = {
5151 let tokenId = getAssetString(assetIds[tokenType])
5252 tryGetInteger((("global_" + tokenId) + "_balance"))
5353 }
5454
5555
5656 func calculatePIssued (amount,tokenId) = {
5757 let Psupply = tryGetInteger("global_poolToken_amount")
5858 let Balance = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
5959 fraction(amount, Psupply, Balance, DOWN)
6060 }
6161
6262
6363 func getMinPIssued (payments) = {
6464 func handler (accum,current) = {
6565 let PIssued = calculatePIssued(current.amount, value(current.assetId))
6666 if (if ((accum == 0))
6767 then true
6868 else (accum > PIssued))
6969 then PIssued
7070 else accum
7171 }
7272
7373 let minPIssed = {
7474 let $l = payments
7575 let $s = size($l)
7676 let $acc0 = 0
7777 func 1 ($a,$i) = if (($i >= $s))
7878 then $a
7979 else handler($a, $l[$i])
8080
8181 func 2 ($a,$i) = if (($i >= $s))
8282 then $a
8383 else throw("List size exceeds 10")
8484
8585 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
8686 }
8787 minPIssed
8888 }
8989
9090
9191 func checkTokensValidity (payments) = {
9292 func handler1 (accum,payment) = (accum ++ [value(payment.assetId)])
9393
9494 let ids = {
9595 let $l = payments
9696 let $s = size($l)
9797 let $acc0 = nil
9898 func 1 ($a,$i) = if (($i >= $s))
9999 then $a
100100 else handler1($a, $l[$i])
101101
102102 func 2 ($a,$i) = if (($i >= $s))
103103 then $a
104104 else throw("List size exceeds 10")
105105
106106 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
107107 }
108108 func handler2 (accum,assetId) = if ((indexOf(ids, assetId) != unit))
109109 then (accum + 1)
110110 else throw(("asset not attached: " + getAssetString(assetId)))
111111
112112 let checks = {
113113 let $l = assetIds
114114 let $s = size($l)
115115 let $acc0 = 0
116116 func 1 ($a,$i) = if (($i >= $s))
117117 then $a
118118 else handler2($a, $l[$i])
119119
120120 func 2 ($a,$i) = if (($i >= $s))
121121 then $a
122122 else throw("List size exceeds 10")
123123
124124 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
125125 }
126126 if ((checks == checks))
127127 then true
128128 else throw("Strict value is not equal to itself.")
129129 }
130130
131131
132132 func handlePoolTokensAdd (PIssued,payments,userAddress) = {
133133 func getTokenPaymentAmount (tokenId) = {
134134 func handler (accum,payment) = if ((payment.assetId == tokenId))
135135 then payment.amount
136136 else accum
137137
138138 let $l = payments
139139 let $s = size($l)
140140 let $acc0 = 0
141141 func 1 ($a,$i) = if (($i >= $s))
142142 then $a
143143 else handler($a, $l[$i])
144144
145145 func 2 ($a,$i) = if (($i >= $s))
146146 then $a
147147 else throw("List size exceeds 10")
148148
149149 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
150150 }
151151
152152 func handleTokenChange (accum,tokenId) = {
153153 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
154154 let PSupply = tryGetInteger("global_poolToken_amount")
155155 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
156156 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
157157 (accum ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk + Dk))])
158158 }
159159
160160 func handleTokenChange2 (accum,tokenId) = {
161161 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
162162 let PSupply = tryGetInteger("global_poolToken_amount")
163163 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
164164 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
165165 let paymentAmount = getTokenPaymentAmount(tokenId)
166166 let toReturn = ((if ((paymentAmount != 0))
167167 then paymentAmount
168168 else 0) - Dk)
169169 (accum ++ [ScriptTransfer(userAddress, toReturn, tokenId)])
170170 }
171171
172172 ({
173173 let $l = assetIds
174174 let $s = size($l)
175175 let $acc0 = nil
176176 func 1 ($a,$i) = if (($i >= $s))
177177 then $a
178178 else handleTokenChange($a, $l[$i])
179179
180180 func 2 ($a,$i) = if (($i >= $s))
181181 then $a
182182 else throw("List size exceeds 10")
183183
184184 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
185185 } ++ {
186186 let $l = assetIds
187187 let $s = size($l)
188188 let $acc0 = nil
189189 func 1 ($a,$i) = if (($i >= $s))
190190 then $a
191191 else handleTokenChange2($a, $l[$i])
192192
193193 func 2 ($a,$i) = if (($i >= $s))
194194 then $a
195195 else throw("List size exceeds 10")
196196
197197 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
198198 })
199199 }
200200
201201
202202 func handlePoolTokensRedeem (PRedeemed,userAddress) = {
203203 func handleTokenRedeem (accum,tokenId) = {
204204 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
205205 let PSupply = tryGetInteger("global_poolToken_amount")
206206 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
207207 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
208208 (accum ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk - amount))])
209209 }
210210
211211 func handleTokenRedeem2 (accum,tokenId) = {
212212 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
213213 let PSupply = tryGetInteger("global_poolToken_amount")
214214 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
215215 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
216216 (accum ++ [ScriptTransfer(userAddress, amount, tokenId)])
217217 }
218218
219219 ({
220220 let $l = assetIds
221221 let $s = size($l)
222222 let $acc0 = nil
223223 func 1 ($a,$i) = if (($i >= $s))
224224 then $a
225225 else handleTokenRedeem($a, $l[$i])
226226
227227 func 2 ($a,$i) = if (($i >= $s))
228228 then $a
229229 else throw("List size exceeds 10")
230230
231231 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232232 } ++ {
233233 let $l = assetIds
234234 let $s = size($l)
235235 let $acc0 = nil
236236 func 1 ($a,$i) = if (($i >= $s))
237237 then $a
238238 else handleTokenRedeem2($a, $l[$i])
239239
240240 func 2 ($a,$i) = if (($i >= $s))
241241 then $a
242242 else throw("List size exceeds 10")
243243
244244 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
245245 })
246246 }
247247
248248
249249 func calculateOutAmount (AmountIn,assetIn,assetOut) = {
250250 let IndexIn = value(indexOf(assetIds, assetIn))
251251 let IndexOut = value(indexOf(assetIds, assetOut))
252252 if ((IndexIn == IndexOut))
253253 then throw("inalid tokens pair")
254254 else {
255255 let BalanceIn = tryGetInteger((("global_" + getAssetString(assetIn)) + "_balance"))
256256 let BalanceOut = tryGetInteger((("global_" + getAssetString(assetOut)) + "_balance"))
257257 fraction(BalanceOut, (Scales[IndexOut] - pow(((BalanceIn * Scales[IndexIn]) / (BalanceIn + AmountIn)), Decimals[IndexIn], fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut]), 4, Decimals[IndexOut], FLOOR)), Scales[IndexOut], DOWN)
258258 }
259259 }
260260
261261
262262 @Callable(i)
263263 func preInit () = [IntegerEntry((("static_" + getAssetString(assetIds[0])) + "_scale"), Scales[0]), IntegerEntry((("static_" + getAssetString(assetIds[1])) + "_scale"), Scales[1]), IntegerEntry((("static_" + getAssetString(assetIds[2])) + "_scale"), Scales[2]), IntegerEntry((("static_" + getAssetString(assetIds[3])) + "_scale"), Scales[3]), IntegerEntry((("static_" + getAssetString(assetIds[4])) + "_scale"), Scales[4]), IntegerEntry((("static_" + getAssetString(assetIds[5])) + "_scale"), Scales[5]), IntegerEntry((("static_" + getAssetString(assetIds[6])) + "_scale"), Scales[6]), IntegerEntry((("static_" + getAssetString(assetIds[7])) + "_scale"), Scales[7]), IntegerEntry((("static_" + getAssetString(assetIds[8])) + "_scale"), Scales[8]), IntegerEntry((("static_" + getAssetString(assetIds[9])) + "_scale"), Scales[9]), IntegerEntry((("static_" + getAssetString(assetIds[0])) + "_weight"), AssetsWeights[0]), IntegerEntry((("static_" + getAssetString(assetIds[1])) + "_weight"), AssetsWeights[1]), IntegerEntry((("static_" + getAssetString(assetIds[2])) + "_weight"), AssetsWeights[2]), IntegerEntry((("static_" + getAssetString(assetIds[3])) + "_weight"), AssetsWeights[3]), IntegerEntry((("static_" + getAssetString(assetIds[4])) + "_weight"), AssetsWeights[4]), IntegerEntry((("static_" + getAssetString(assetIds[5])) + "_weight"), AssetsWeights[5]), IntegerEntry((("static_" + getAssetString(assetIds[6])) + "_weight"), AssetsWeights[6]), IntegerEntry((("static_" + getAssetString(assetIds[7])) + "_weight"), AssetsWeights[7]), IntegerEntry((("static_" + getAssetString(assetIds[8])) + "_weight"), AssetsWeights[8]), IntegerEntry((("static_" + getAssetString(assetIds[9])) + "_weight"), AssetsWeights[9])]
264264
265265
266266
267267 @Callable(i)
268268 func init () = {
269269 func prepareList () = {
270270 func handler (accum,n) = (accum ++ [IntegerEntry((("global_" + getAssetString(n.assetId)) + "_balance"), n.amount)])
271271
272272 let $l = i.payments
273273 let $s = size($l)
274274 let $acc0 = nil
275275 func 1 ($a,$i) = if (($i >= $s))
276276 then $a
277277 else handler($a, $l[$i])
278278
279279 func 2 ($a,$i) = if (($i >= $s))
280280 then $a
281281 else throw("List size exceeds 10")
282282
283283 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
284284 }
285285
286286 func calculatePoolTokensAmount (payments) = {
287287 func handler (accum,pmt) = {
288- let assetId = value(pmt.assetId)
288+ let assetId = pmt.assetId
289289 func handler2 (accum,n) = if ((n == assetId))
290290 then value(indexOf(assetIds, n))
291291 else accum
292292
293293 let Token = {
294294 let $l = assetIds
295295 let $s = size($l)
296296 let $acc0 = 1
297297 func 1 ($a,$i) = if (($i >= $s))
298298 then $a
299299 else handler2($a, $l[$i])
300300
301301 func 2 ($a,$i) = if (($i >= $s))
302302 then $a
303303 else throw("List size exceeds 10")
304304
305305 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
306306 }
307307 (accum * pow(pmt.amount, Decimals[Token], AssetsWeights[Token], AssetsWeightsDecimals, 1, FLOOR))
308308 }
309309
310310 let $l = payments
311311 let $s = size($l)
312312 let $acc0 = 1
313313 func 1 ($a,$i) = if (($i >= $s))
314314 then $a
315315 else handler($a, $l[$i])
316316
317317 func 2 ($a,$i) = if (($i >= $s))
318318 then $a
319319 else throw("List size exceeds 10")
320320
321321 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
322322 }
323323
324324 if ((tryGetInteger("global_wasInited") > 0))
325325 then throw("pool already inited")
326326 else {
327327 let initialPoolTokens = calculatePoolTokensAmount(i.payments)
328328 let poolTokenIssue = Issue("PZ-DeFi Index", "Puzzle Swap DeFi Pool Index", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
329329 let poolTokenId = calculateAssetId(poolTokenIssue)
330330 (prepareList() ++ [poolTokenIssue, IntegerEntry("global_poolToken_amount", initialPoolTokens), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", poolTokenId), ScriptTransfer(i.caller, initialPoolTokens, poolTokenId)])
331331 }
332332 }
333333
334334
335335
336336 @Callable(i)
337337 func addLiquidity () = if ((size(i.payments) != T))
338338 then throw(("you need to attach all pool tokens. amount of pool tokens: " + toString(T)))
339339 else if (!(checkTokensValidity(i.payments)))
340340 then throw("wrong assets attached")
341341 else {
342342 let PIssued = getMinPIssued(i.payments)
343343 let result = handlePoolTokensAdd(PIssued, i.payments, i.caller)
344344 let reissue = Reissue(tryGetBinary("global_poolToken_id"), PIssued, true)
345345 (result ++ [reissue, ScriptTransfer(i.caller, PIssued, tryGetBinary("global_poolToken_id")), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") + PIssued))])
346346 }
347347
348348
349349
350350 @Callable(i)
351351 func removeLiquidity () = {
352352 let pmt = i.payments[0]
353353 if ((pmt.assetId != tryGetBinary("global_poolToken_id")))
354354 then throw("please attach pool share token")
355355 else {
356356 let PRedeemed = pmt.amount
357357 let result = handlePoolTokensRedeem(PRedeemed, i.caller)
358358 (result ++ [Burn(tryGetBinary("global_poolToken_id"), PRedeemed), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") - PRedeemed))])
359359 }
360360 }
361361
362362
363363
364364 @Callable(i)
365365 func swap (assetOut,minimum) = {
366366 let pmt = value(i.payments[0])
367367 let AmountIn = value(i.payments[0].amount)
368- let AssetIn = value(pmt.assetId)
368+ let AssetIn = pmt.assetId
369369 let AssetOut = fromBase58String(assetOut)
370370 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut)
371371 if ((minimum > AmountOut))
372372 then throw(("amount to recieve it lower than given one: " + toString(AmountOut)))
373373 else if (((Scales[value(indexOf(assetIds, AssetIn))] / 10000) > AmountIn))
374374 then throw("sum to exchange is too small")
375375 else if ((0 > (tryGetInteger((("global_" + getAssetString(AssetOut)) + "_balance")) - AmountOut)))
376376 then throw("contract is out of reserves")
377377 else {
378378 let feeAmount = fraction(AmountOut, Fee, FeeScale)
379379 let cleanAmountOut = (AmountOut - feeAmount)
380380 [ScriptTransfer(feeAggregator, feeAmount, AssetOut), IntegerEntry((("global_" + getAssetString(AssetOut)) + "_balance"), (tryGetInteger((("global_" + getAssetString(AssetOut)) + "_balance")) - AmountOut)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), (tryGetInteger((("global_" + getAssetString(AssetIn)) + "_balance")) + AmountIn)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut)]
381381 }
382382 }
383383
384384
385385 @Verifier(tx)
386386 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
387387

github/deemru/w8io/873ac7e 
74.07 ms