tx · 6mYTNyXVbgaU2T5epzmKT7EzQaU7UiXzkRoaweBLp5bi

3PDrYPF6izza2sXWffzTPF7e2Fcir2CMpki:  -0.01400000 Waves

2021.11.25 23:40 [2871990] smart account 3PDrYPF6izza2sXWffzTPF7e2Fcir2CMpki > SELF 0.00000000 Waves

{ "type": 13, "id": "6mYTNyXVbgaU2T5epzmKT7EzQaU7UiXzkRoaweBLp5bi", "fee": 1400000, "feeAssetId": null, "timestamp": 1637872837773, "version": 2, "chainId": 87, "sender": "3PDrYPF6izza2sXWffzTPF7e2Fcir2CMpki", "senderPublicKey": "BHGZUnraSaYR29gbS4KuRhjkKjKbD22KfX6vjJdcMQd3", "proofs": [ "4KbuHgrvvB2rqRuoBEvXnmnhRr9PfAjKz7qbwJPpqamMgoKcyokhvT2rkMP7ZVHsAdCJwWYDNRZc9xXMgLXtGT97" ], "script": "base64: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LAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB3Rva2VuSWQCAAAACF9iYWxhbmNlBAAAAAdQU3VwcGx5CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50BAAAAA10b2tlbkRlY2ltYWxzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0aWNfCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAd0b2tlbklkAgAAAAZfc2NhbGUEAAAABmFtb3VudAkBAAAACGZyYWN0aW9uAAAABAkAAGUAAAACBQAAAA10b2tlbkRlY2ltYWxzCQEAAAAIZnJhY3Rpb24AAAAECQAAZQAAAAIFAAAAB1BTdXBwbHkFAAAACVBSZWRlZW1lZAUAAAANdG9rZW5EZWNpbWFscwUAAAAHUFN1cHBseQUAAAAERE9XTgUAAAACQmsFAAAADXRva2VuRGVjaW1hbHMFAAAABERPV04JAAROAAAAAgUAAAAFYWNjdW0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAd0b2tlbklkAgAAAAhfYmFsYW5jZQkAAGUAAAACBQAAAAJCawUAAAAGYW1vdW50BQAAAANuaWwKAQAAABJoYW5kbGVUb2tlblJlZGVlbTIAAAACAAAABWFjY3VtAAAAB3Rva2VuSWQEAAAAAkJrCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAd0b2tlbklkAgAAAAhfYmFsYW5jZQQAAAAHUFN1cHBseQkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAQAAAANdG9rZW5EZWNpbWFscwkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdGljXwkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAAH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BQAAAAdJbmRleEluAAAAAAAAACcQCQABkQAAAAIFAAAADUFzc2V0c1dlaWdodHMFAAAACEluZGV4T3V0AAAAAAAAAAAECQABkQAAAAIFAAAACERlY2ltYWxzBQAAAAhJbmRleE91dAUAAAAFRkxPT1IJAAGRAAAAAgUAAAAGU2NhbGVzBQAAAAhJbmRleE91dAUAAAAERE9XTgEAAAAPZ2V0VG9rZW5CYWxhbmNlAAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAF0BQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAABHRoaXMFAAAAAXQICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlAQAAAB1jYWxjdWxhdGVDdXJyZW50QXNzZXRJbnRlcmVzdAAAAAQAAAAHYXNzZXRJZAAAAAphc3NldElkU3RyAAAACGFCYWxhbmNlAAAAFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sEAAAAC3RvdGFsU3Rha2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAEmdsb2JhbF9pbmRleFN0YWtlZAQAAAAVdG9rZW5CYWxhbmNlTGFzdENoZWNrBQAAABZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrBAAAABNjdXJyZW50QmFsYW5jZURlbHRhCQAAZQAAAAIJAQAAAA9nZXRUb2tlbkJhbGFuY2UAAAABBQAAAAdhc3NldElkBQAAAAhhQmFsYW5jZQQAAAAUY3VycmVudFRva2VuRWFybmluZ3MDCQAAZgAAAAIFAAAAE2N1cnJlbnRCYWxhbmNlRGVsdGEFAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawUAAAATY3VycmVudEJhbGFuY2VEZWx0YQUAAAAVdG9rZW5CYWxhbmNlTGFzdENoZWNrBAAAAAtuZXdFYXJuaW5ncwkAAGUAAAACBQAAABRjdXJyZW50VG9rZW5FYXJuaW5ncwUAAAAVdG9rZW5CYWxhbmNlTGFzdENoZWNrBAAAAAtuZXdJbnRlcmVzdAMJAAAAAAAAAgUAAAALdG90YWxTdGFrZWQAAAAAAAAAAAAAAAAAAAAAAAAJAABrAAAAAwUAAAALbmV3RWFybmluZ3MFAAAABlNjYWxlOAUAAAALdG90YWxTdGFrZWQEAAAAEWxhc3RDaGVja0ludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFnbG9iYWxfbGFzdENoZWNrXwUAAAAKYXNzZXRJZFN0cgIAAAAJX2ludGVyZXN0CQAAZAAAAAIFAAAAEWxhc3RDaGVja0ludGVyZXN0BQAAAAtuZXdJbnRlcmVzdAEAAAALY2xhaW1SZXN1bHQAAAABAAAAB2FkZHJlc3MEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQUAAAAHYWRkcmVzcwQAAAAMcHV6emxlQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAKYWRkcmVzc1N0cgIAAAAMX2luZGV4U3Rha2VkCgEAAAAHaGFuZGxlcgAAAAIAAAAFYWNjdW0AAAAHYXNzZXRJZAQAAAAKYXNzZXRJZFN0cgkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAAHYXNzZXRJZAQAAAAIYUJhbGFuY2UJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB2Fzc2V0SWQCAAAACF9iYWxhbmNlBAAAABZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFnbG9iYWxfbGFzdENoZWNrXwUAAAAKYXNzZXRJZFN0cgIAAAAJX2Vhcm5pbmdzBAAAABRjdXJyZW50VG9rZW5JbnRlcmVzdAkBAAAAHWNhbGN1bGF0ZUN1cnJlbnRBc3NldEludGVyZXN0AAAABAUAAAAHYXNzZXRJZAUAAAAKYXNzZXRJZFN0cgUAAAAIYUJhbGFuY2UFAAAAFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sEAAAAFGN1cnJlbnRUb2tlbkVhcm5pbmdzCQABlgAAAAEJAARMAAAAAgUAAAAWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawkABEwAAAACCQAAZQAAAAIJAQAAAA9nZXRUb2tlbkJhbGFuY2UAAAAB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ZW5faWQJAAACAAAAAQIAAAAUd3JvbmcgYXNzZXQgYXR0YWNoZWQJAQAAABBpbmRleFN0YWtlUmVzdWx0AAAAAgUAAAAKYWRkcmVzc1N0cggFAAAAA3BtdAAAAAZhbW91bnQAAAABaQEAAAAMdW5zdGFrZUluZGV4AAAAAQAAAAxwdXp6bGVBbW91bnQEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAA9wdXp6bGVBdmFpbGFibGUJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAAxfaW5kZXhTdGFrZWQDCQAAZgAAAAIFAAAADHB1enpsZUFtb3VudAUAAAAPcHV6emxlQXZhaWxhYmxlCQAAAgAAAAECAAAAJXlvdSBkb24ndCBoYXZlIGluZGV4IHRva2VucyBhdmFpbGFibGUJAAROAAAAAgkBAAAAC2NsYWltUmVzdWx0AAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADF9pbmRleFN0YWtlZAkAAGUAAAACBQAAAA9wdXp6bGVBdmFpbGFibGUFAAAADHB1enpsZUFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAASZ2xvYmFsX2luZGV4U3Rha2VkCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASZ2xvYmFsX2luZGV4U3Rha2VkBQAAAAxwdXp6bGVBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxwdXp6bGVBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDU3KQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQFAAAAA25pbAAAAAFpAQAAABFjbGFpbUluZGV4UmV3YXJkcwAAAAAJAQAAAAtjbGFpbVJlc3VsdAAAAAEIBQAAAAFpAAAABmNhbGxlcgAAAAFpAQAAAAtyZWRlZW1JbmRleAAAAAEAAAAMc2VuZFRvT3JpZ2luBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQJAQAAAAx0cnlHZXRCaW5hcnkAAAABAgAAABNnbG9iYWxfcG9vbFRva2VuX2lkCQAAAgAAAAECAAAAHnBsZWFzZSBhdHRhY2ggcG9vbCBzaGFyZSB0b2tlbgQAAAAJUFJlZGVlbWVkCAUAAAADcG10AAAABmFtb3VudAQAAAAGcmVzdWx0CQEAAAAWaGFuZGxlUG9vbFRva2Vuc1JlZGVlbQAAAAIFAAAACVBSZWRlZW1lZAMFAAAADHNlbmRUb09yaWdpbggFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAZjYWxsZXIJAAROAAAAAgUAAAAGcmVzdWx0CQAETAAAAAIJAQAAAARCdXJuAAAAAgkBAAAADHRyeUdldEJpbmFyeQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQFAAAACVBSZWRlZW1lZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAUAAAAJUFJlZGVlbWVkBQAAAANuaWwAAAABaQEAAAAEc3dhcAAAAAIAAAAIYXNzZXRPdXQAAAAHbWluaW11bQQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAhBbW91bnRJbgkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAAAdBc3NldEluCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAACEFzc2V0T3V0CQACWQAAAAEFAAAACGFzc2V0T3V0BAAAAA5Bc3NldEluQmFsYW5jZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAAHQXNzZXRJbgIAAAAIX2JhbGFuY2UEAAAAD0Fzc2V0T3V0QmFsYW5jZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwUAAAAIYXNzZXRPdXQCAAAACF9iYWxhbmNlBAAAAAlBbW91bnRPdXQJAQAAABJjYWxjdWxhdGVPdXRBbW91bnQAAAAFBQAAAAhBbW91bnRJbgUAAAAHQXNzZXRJbgUAAAAIQXNzZXRPdXQFAAAADkFzc2V0SW5CYWxhbmNlBQAAAA9Bc3NldE91dEJhbGFuY2UEAAAACWZlZUFtb3VudAkAAGsAAAADBQAAAAlBbW91bnRPdXQFAAAAA0ZlZQUAAAAIRmVlU2NhbGUEAAAAEXByb3RvY29sRmVlQW1vdW50CQAAawAAAAMFAAAACWZlZUFtb3VudAAAAAAAAAAAKAAAAAAAAAAAZAQAAAAOY2xlYW5BbW91bnRPdXQJAABlAAAAAgUAAAAJQW1vdW50T3V0BQAAAAlmZWVBbW91bnQDCQAAZgAAAAIFAAAAB21pbmltdW0FAAAADmNsZWFuQW1vdW50T3V0CQAAAgAAAAEJAAEsAAAAAgIAAAArYW1vdW50IHRvIHJlY2lldmUgaXMgbG93ZXIgdGhhbiBnaXZlbiBvbmU6IAkAAaQAAAABBQAAAA5jbGVhbkFtb3VudE91dAMJAABmAAAAAgAAAAAAAAAnEAUAAAAIQW1vdW50SW4JAAACAAAAAQIAAAAcc3VtIHRvIGV4Y2hhbmdlIGlzIHRvbyBzbWFsbAMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACBQAAAA9Bc3NldE91dEJhbGFuY2UFAAAACUFtb3VudE91dAkAAAIAAAABAgAAABtjb250cmFjdCBpcyBvdXQgb2YgcmVzZXJ2ZXMJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8FAAAACGFzc2V0T3V0AgAAAAhfYmFsYW5jZQkAAGUAAAACBQAAAA9Bc3NldE91dEJhbGFuY2UFAAAACUFtb3VudE91dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB0Fzc2V0SW4CAAAACF9iYWxhbmNlCQAAZAAAAAIFAAAADkFzc2V0SW5CYWxhbmNlBQAAAAhBbW91bnRJbgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADmNsZWFuQW1vdW50T3V0BQAAAAhBc3NldE91dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAANZ2xvYmFsX3ZvbHVtZQkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADWdsb2JhbF92b2x1bWUJAQAAABJjYWxjdWxhdGVVc2RuVmFsdWUAAAADBQAAAAdBc3NldEluBQAAAAhBbW91bnRJbgUAAAAOQXNzZXRJbkJhbGFuY2UFAAAAA25pbAUAAAAOY2xlYW5BbW91bnRPdXQAAAAAVPtmdw==", "height": 2871990, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 53iEWmzij1CJNCqc28p1u224upvcFf1B3JKccX58Waz3 Next: 6GZkMfbcnhXJkcBvcFdPxiiCptaKZLTkuuX344uWMRLJ Diff:
OldNewDifferences
475475 func swap (assetOut,minimum) = {
476476 let pmt = value(i.payments[0])
477477 let AmountIn = value(i.payments[0].amount)
478- let AssetIn = value(pmt.assetId)
478+ let AssetIn = pmt.assetId
479479 let AssetOut = fromBase58String(assetOut)
480- let AssetInBalance = tryGetInteger((("global_" + toBase58String(AssetIn)) + "_balance"))
480+ let AssetInBalance = tryGetInteger((("global_" + getAssetString(AssetIn)) + "_balance"))
481481 let AssetOutBalance = tryGetInteger((("global_" + assetOut) + "_balance"))
482482 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
483483 let feeAmount = fraction(AmountOut, Fee, FeeScale)
489489 then throw("sum to exchange is too small")
490490 else if ((0 > (AssetOutBalance - AmountOut)))
491491 then throw("contract is out of reserves")
492- else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), (AssetOutBalance - AmountOut)), IntegerEntry((("global_" + toBase58String(AssetIn)) + "_balance"), (AssetInBalance + AmountIn)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
492+ else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), (AssetOutBalance - AmountOut)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), (AssetInBalance + AmountIn)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
493493 }
494494
495495
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'Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT', base58'DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p', 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, 1000000, 100000000, 100000000, 1000000, 1000000, 1000000]
1717
1818 let Fee = 200
1919
2020 let Scale = 10000
2121
2222 let Scale8 = 100000000
2323
2424 let FeeScale = 10000
2525
2626 let feeAggregator = Address(base58'3PES7MMthaKJx9WMXnNCY3cwTGG9nD9YT8f')
2727
2828 func getAssetString (assetId) = match assetId {
2929 case b: ByteVector =>
3030 toBase58String(b)
3131 case _ =>
3232 "WAVES"
3333 }
3434
3535
3636 let earnedAssets = assetIds
3737
3838 func tryGetInteger (key) = match getInteger(this, key) {
3939 case b: Int =>
4040 b
4141 case _ =>
4242 0
4343 }
4444
4545
4646 func tryGetBinary (key) = match getBinary(this, key) {
4747 case b: ByteVector =>
4848 b
4949 case _ =>
5050 base58''
5151 }
5252
5353
5454 func getCurrentTokenBalance (tokenType) = {
5555 let tokenId = getAssetString(assetIds[tokenType])
5656 tryGetInteger((("global_" + tokenId) + "_balance"))
5757 }
5858
5959
6060 func calculatePIssued (amount,tokenId) = {
6161 let Psupply = tryGetInteger("global_poolToken_amount")
6262 let Balance = tryGetInteger((("global_" + toBase58String(tokenId)) + "_balance"))
6363 fraction(amount, Psupply, Balance, DOWN)
6464 }
6565
6666
6767 func getMinPIssued (payments) = {
6868 func handler (accum,current) = {
6969 let PIssued = calculatePIssued(current.amount, value(current.assetId))
7070 if (if ((accum == 0))
7171 then true
7272 else (accum > PIssued))
7373 then PIssued
7474 else accum
7575 }
7676
7777 let minPIssed = {
7878 let $l = payments
7979 let $s = size($l)
8080 let $acc0 = 0
8181 func 1 ($a,$i) = if (($i >= $s))
8282 then $a
8383 else handler($a, $l[$i])
8484
8585 func 2 ($a,$i) = if (($i >= $s))
8686 then $a
8787 else throw("List size exceeds 10")
8888
8989 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
9090 }
9191 minPIssed
9292 }
9393
9494
9595 func calculateUsdnValue (assetId,amount,aBalance) = {
9696 let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9797 let usdnWeight = AssetsWeights[value(indexOf(assetIds, usdnId))]
9898 let assetWeight = AssetsWeights[value(indexOf(assetIds, assetId))]
9999 let usdnBalance = tryGetInteger((("global_" + getAssetString(usdnId)) + "_balance"))
100100 (fraction(amount, usdnBalance, usdnWeight) / (aBalance / assetWeight))
101101 }
102102
103103
104104 func checkTokensValidity (payments) = {
105105 func handler1 (accum,payment) = (accum ++ [value(payment.assetId)])
106106
107107 let ids = {
108108 let $l = payments
109109 let $s = size($l)
110110 let $acc0 = nil
111111 func 1 ($a,$i) = if (($i >= $s))
112112 then $a
113113 else handler1($a, $l[$i])
114114
115115 func 2 ($a,$i) = if (($i >= $s))
116116 then $a
117117 else throw("List size exceeds 10")
118118
119119 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
120120 }
121121 if ((ids == ids))
122122 then {
123123 func handler2 (accum,assetId) = if ((indexOf(ids, assetId) != unit))
124124 then (accum + 1)
125125 else throw(("asset not attached: " + getAssetString(assetId)))
126126
127127 let checks = {
128128 let $l = assetIds
129129 let $s = size($l)
130130 let $acc0 = 0
131131 func 1 ($a,$i) = if (($i >= $s))
132132 then $a
133133 else handler2($a, $l[$i])
134134
135135 func 2 ($a,$i) = if (($i >= $s))
136136 then $a
137137 else throw("List size exceeds 10")
138138
139139 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
140140 }
141141 if ((checks == checks))
142142 then true
143143 else throw("Strict value is not equal to itself.")
144144 }
145145 else throw("Strict value is not equal to itself.")
146146 }
147147
148148
149149 func handlePoolTokensAdd (PIssued,payments,userAddress,needChange) = {
150150 func getTokenPaymentAmount (tokenId) = {
151151 func handler (accum,payment) = if ((payment.assetId == tokenId))
152152 then payment.amount
153153 else accum
154154
155155 let $l = payments
156156 let $s = size($l)
157157 let $acc0 = 0
158158 func 1 ($a,$i) = if (($i >= $s))
159159 then $a
160160 else handler($a, $l[$i])
161161
162162 func 2 ($a,$i) = if (($i >= $s))
163163 then $a
164164 else throw("List size exceeds 10")
165165
166166 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
167167 }
168168
169169 func handleTokenChange (accum,tokenId) = {
170170 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
171171 let PSupply = tryGetInteger("global_poolToken_amount")
172172 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
173173 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
174174 let paymentAmount = getTokenPaymentAmount(tokenId)
175175 let toReturn = ((if ((paymentAmount != 0))
176176 then paymentAmount
177177 else 0) - Dk)
178178 let t = if (needChange)
179179 then [ScriptTransfer(userAddress, toReturn, tokenId)]
180180 else nil
181181 ((accum ++ t) ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk + Dk))])
182182 }
183183
184184 let $l = assetIds
185185 let $s = size($l)
186186 let $acc0 = nil
187187 func 1 ($a,$i) = if (($i >= $s))
188188 then $a
189189 else handleTokenChange($a, $l[$i])
190190
191191 func 2 ($a,$i) = if (($i >= $s))
192192 then $a
193193 else throw("List size exceeds 10")
194194
195195 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
196196 }
197197
198198
199199 func handlePoolTokensRedeem (PRedeemed,userAddress) = {
200200 func handleTokenRedeem (accum,tokenId) = {
201201 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
202202 let PSupply = tryGetInteger("global_poolToken_amount")
203203 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
204204 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
205205 (accum ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk - amount))])
206206 }
207207
208208 func handleTokenRedeem2 (accum,tokenId) = {
209209 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
210210 let PSupply = tryGetInteger("global_poolToken_amount")
211211 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
212212 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
213213 (accum ++ [ScriptTransfer(userAddress, amount, tokenId)])
214214 }
215215
216216 ({
217217 let $l = assetIds
218218 let $s = size($l)
219219 let $acc0 = nil
220220 func 1 ($a,$i) = if (($i >= $s))
221221 then $a
222222 else handleTokenRedeem($a, $l[$i])
223223
224224 func 2 ($a,$i) = if (($i >= $s))
225225 then $a
226226 else throw("List size exceeds 10")
227227
228228 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
229229 } ++ {
230230 let $l = assetIds
231231 let $s = size($l)
232232 let $acc0 = nil
233233 func 1 ($a,$i) = if (($i >= $s))
234234 then $a
235235 else handleTokenRedeem2($a, $l[$i])
236236
237237 func 2 ($a,$i) = if (($i >= $s))
238238 then $a
239239 else throw("List size exceeds 10")
240240
241241 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
242242 })
243243 }
244244
245245
246246 func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
247247 let IndexIn = value(indexOf(assetIds, assetIn))
248248 let IndexOut = value(indexOf(assetIds, assetOut))
249249 if ((IndexIn == IndexOut))
250250 then throw("inalid tokens pair")
251251 else 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)
252252 }
253253
254254
255255 func getTokenBalance (assetId) = match assetId {
256256 case t: ByteVector =>
257257 assetBalance(this, t)
258258 case _ =>
259259 wavesBalance(this).available
260260 }
261261
262262
263263 func calculateCurrentAssetInterest (assetId,assetIdStr,aBalance,tokenEarningsLastCheck) = {
264264 let totalStaked = tryGetInteger("global_indexStaked")
265265 let tokenBalanceLastCheck = tokenEarningsLastCheck
266266 let currentBalanceDelta = (getTokenBalance(assetId) - aBalance)
267267 let currentTokenEarnings = if ((currentBalanceDelta > tokenBalanceLastCheck))
268268 then currentBalanceDelta
269269 else tokenBalanceLastCheck
270270 let newEarnings = (currentTokenEarnings - tokenBalanceLastCheck)
271271 let newInterest = if ((totalStaked == 0))
272272 then 0
273273 else fraction(newEarnings, Scale8, totalStaked)
274274 let lastCheckInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest"))
275275 (lastCheckInterest + newInterest)
276276 }
277277
278278
279279 func claimResult (address) = {
280280 let addressStr = toString(address)
281281 let puzzleAmount = tryGetInteger((addressStr + "_indexStaked"))
282282 func handler (accum,assetId) = {
283283 let assetIdStr = getAssetString(assetId)
284284 let aBalance = tryGetInteger((("global_" + getAssetString(assetId)) + "_balance"))
285285 let tokenEarningsLastCheck = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_earnings"))
286286 let currentTokenInterest = calculateCurrentAssetInterest(assetId, assetIdStr, aBalance, tokenEarningsLastCheck)
287287 let currentTokenEarnings = max([tokenEarningsLastCheck, (getTokenBalance(assetId) - aBalance)])
288288 let rewardAmount = fraction(puzzleAmount, (currentTokenInterest - tryGetInteger((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"))), Scale8)
289289 let transfer = if ((rewardAmount == 0))
290290 then nil
291291 else [ScriptTransfer(address, rewardAmount, assetId)]
292292 $Tuple2(((accum._1 ++ transfer) ++ [IntegerEntry((("global_lastCheck_" + assetIdStr) + "_earnings"), (currentTokenEarnings - rewardAmount)), IntegerEntry((("global_lastCheck_" + assetIdStr) + "_interest"), currentTokenInterest), IntegerEntry((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"), currentTokenInterest)]), (accum._2 + calculateUsdnValue(assetId, rewardAmount, aBalance)))
293293 }
294294
295295 let accum = {
296296 let $l = earnedAssets
297297 let $s = size($l)
298298 let $acc0 = $Tuple2(nil, 0)
299299 func 1 ($a,$i) = if (($i >= $s))
300300 then $a
301301 else handler($a, $l[$i])
302302
303303 func 2 ($a,$i) = if (($i >= $s))
304304 then $a
305305 else throw("List size exceeds 10")
306306
307307 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
308308 }
309309 (accum._1 ++ [IntegerEntry((addressStr + "_claimedRewardValue"), (tryGetInteger((addressStr + "_claimedRewardValue")) + accum._2)), IntegerEntry((addressStr + "_lastClaim"), lastBlock.timestamp)])
310310 }
311311
312312
313313 func indexStakeResult (addressStr,amount) = {
314314 let li = claimResult(addressFromStringValue(addressStr))
315315 (li ++ [IntegerEntry((addressStr + "_indexStaked"), (tryGetInteger((addressStr + "_indexStaked")) + amount)), IntegerEntry("global_indexStaked", (tryGetInteger("global_indexStaked") + amount))])
316316 }
317317
318318
319319 @Callable(i)
320320 func preInit () = {
321321 func handler (accum,assetNum) = if ((assetNum >= T))
322322 then accum
323323 else (accum ++ [IntegerEntry((("static_" + getAssetString(assetIds[0])) + "_scale"), Scales[assetNum]), IntegerEntry((("static_" + getAssetString(assetIds[0])) + "_weight"), AssetsWeights[assetNum])])
324324
325325 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
326326 let $s = size($l)
327327 let $acc0 = nil
328328 func 1 ($a,$i) = if (($i >= $s))
329329 then $a
330330 else handler($a, $l[$i])
331331
332332 func 2 ($a,$i) = if (($i >= $s))
333333 then $a
334334 else throw("List size exceeds 10")
335335
336336 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
337337 }
338338
339339
340340
341341 @Callable(i)
342342 func deInit () = if ((i.caller != this))
343343 then throw("admin only")
344344 else [IntegerEntry("global_wasInited", 0)]
345345
346346
347347
348348 @Callable(i)
349349 func init () = {
350350 func prepareList () = {
351351 func handler (accum,n) = (accum ++ [IntegerEntry((("global_" + toBase58String(value(n.assetId))) + "_balance"), n.amount)])
352352
353353 let $l = i.payments
354354 let $s = size($l)
355355 let $acc0 = nil
356356 func 1 ($a,$i) = if (($i >= $s))
357357 then $a
358358 else handler($a, $l[$i])
359359
360360 func 2 ($a,$i) = if (($i >= $s))
361361 then $a
362362 else throw("List size exceeds 10")
363363
364364 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
365365 }
366366
367367 func calculatePoolTokensAmount (payments) = {
368368 func handler (accum,pmt) = {
369369 let assetId = value(pmt.assetId)
370370 func handler2 (accum,n) = if ((n == assetId))
371371 then value(indexOf(assetIds, n))
372372 else accum
373373
374374 let Token = {
375375 let $l = assetIds
376376 let $s = size($l)
377377 let $acc0 = 1
378378 func 1 ($a,$i) = if (($i >= $s))
379379 then $a
380380 else handler2($a, $l[$i])
381381
382382 func 2 ($a,$i) = if (($i >= $s))
383383 then $a
384384 else throw("List size exceeds 10")
385385
386386 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
387387 }
388388 (accum * pow(pmt.amount, Decimals[Token], AssetsWeights[Token], AssetsWeightsDecimals, 1, FLOOR))
389389 }
390390
391391 let $l = payments
392392 let $s = size($l)
393393 let $acc0 = 1
394394 func 1 ($a,$i) = if (($i >= $s))
395395 then $a
396396 else handler($a, $l[$i])
397397
398398 func 2 ($a,$i) = if (($i >= $s))
399399 then $a
400400 else throw("List size exceeds 10")
401401
402402 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
403403 }
404404
405405 if ((tryGetInteger("global_wasInited") > 0))
406406 then throw("pool already inited")
407407 else {
408408 let initialPoolTokens = calculatePoolTokensAmount(i.payments)
409409 let poolTokenIssue = Issue("Puzzle5", "Puzzle Swap Pool Token", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
410410 let poolTokenId = calculateAssetId(poolTokenIssue)
411411 (prepareList() ++ [poolTokenIssue, IntegerEntry("global_poolToken_amount", initialPoolTokens), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", poolTokenId), ScriptTransfer(i.caller, initialPoolTokens, poolTokenId)])
412412 }
413413 }
414414
415415
416416
417417 @Callable(i)
418418 func generateIndex (needChange) = if ((size(i.payments) != T))
419419 then throw(("you need to attach all pool tokens. amount of pool tokens: " + toString(T)))
420420 else if (!(checkTokensValidity(i.payments)))
421421 then throw("wrong assets attached")
422422 else {
423423 let PIssued = getMinPIssued(i.payments)
424424 let reissue = Reissue(getBinaryValue("global_poolToken_id"), PIssued, true)
425425 let result = handlePoolTokensAdd(PIssued, i.payments, i.originCaller, needChange)
426426 $Tuple2((result ++ [ScriptTransfer(i.caller, PIssued, tryGetBinary("global_poolToken_id")), reissue, IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") + PIssued))]), PIssued)
427427 }
428428
429429
430430
431431 @Callable(i)
432432 func stakeIndex () = {
433433 let addressStr = toString(i.originCaller)
434434 let pmt = i.payments[0]
435435 if ((value(pmt.assetId) != tryGetBinary("global_poolToken_id")))
436436 then throw("wrong asset attached")
437437 else indexStakeResult(addressStr, pmt.amount)
438438 }
439439
440440
441441
442442 @Callable(i)
443443 func unstakeIndex (puzzleAmount) = {
444444 let addressStr = toString(i.originCaller)
445445 let puzzleAvailable = tryGetInteger((addressStr + "_indexStaked"))
446446 if ((puzzleAmount > puzzleAvailable))
447447 then throw("you don't have index tokens available")
448448 else (claimResult(i.originCaller) ++ [IntegerEntry((addressStr + "_indexStaked"), (puzzleAvailable - puzzleAmount)), IntegerEntry("global_indexStaked", (tryGetInteger("global_indexStaked") - puzzleAmount)), ScriptTransfer(i.caller, puzzleAmount, getBinaryValue("global_poolToken_id"))])
449449 }
450450
451451
452452
453453 @Callable(i)
454454 func claimIndexRewards () = claimResult(i.caller)
455455
456456
457457
458458 @Callable(i)
459459 func redeemIndex (sendToOrigin) = {
460460 let pmt = i.payments[0]
461461 if ((pmt.assetId != tryGetBinary("global_poolToken_id")))
462462 then throw("please attach pool share token")
463463 else {
464464 let PRedeemed = pmt.amount
465465 let result = handlePoolTokensRedeem(PRedeemed, if (sendToOrigin)
466466 then i.originCaller
467467 else i.caller)
468468 (result ++ [Burn(tryGetBinary("global_poolToken_id"), PRedeemed), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") - PRedeemed))])
469469 }
470470 }
471471
472472
473473
474474 @Callable(i)
475475 func swap (assetOut,minimum) = {
476476 let pmt = value(i.payments[0])
477477 let AmountIn = value(i.payments[0].amount)
478- let AssetIn = value(pmt.assetId)
478+ let AssetIn = pmt.assetId
479479 let AssetOut = fromBase58String(assetOut)
480- let AssetInBalance = tryGetInteger((("global_" + toBase58String(AssetIn)) + "_balance"))
480+ let AssetInBalance = tryGetInteger((("global_" + getAssetString(AssetIn)) + "_balance"))
481481 let AssetOutBalance = tryGetInteger((("global_" + assetOut) + "_balance"))
482482 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
483483 let feeAmount = fraction(AmountOut, Fee, FeeScale)
484484 let protocolFeeAmount = fraction(feeAmount, 40, 100)
485485 let cleanAmountOut = (AmountOut - feeAmount)
486486 if ((minimum > cleanAmountOut))
487487 then throw(("amount to recieve is lower than given one: " + toString(cleanAmountOut)))
488488 else if ((10000 > AmountIn))
489489 then throw("sum to exchange is too small")
490490 else if ((0 > (AssetOutBalance - AmountOut)))
491491 then throw("contract is out of reserves")
492- else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), (AssetOutBalance - AmountOut)), IntegerEntry((("global_" + toBase58String(AssetIn)) + "_balance"), (AssetInBalance + AmountIn)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
492+ else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), (AssetOutBalance - AmountOut)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), (AssetInBalance + AmountIn)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
493493 }
494494
495495

github/deemru/w8io/873ac7e 
110.62 ms