tx · E5mCvSeSZrZS7Giay7LM2G19PqQdGWpovMSdCzJcbVs8

3MvdzbvEZLHEE3EXHXxaRQjgpNqq28733ao:  -0.01000000 Waves

2021.12.22 19:16 [1845693] smart account 3MvdzbvEZLHEE3EXHXxaRQjgpNqq28733ao > SELF 0.00000000 Waves

{ "type": 13, "id": "E5mCvSeSZrZS7Giay7LM2G19PqQdGWpovMSdCzJcbVs8", "fee": 1000000, "feeAssetId": null, "timestamp": 1640189804142, "version": 1, "sender": "3MvdzbvEZLHEE3EXHXxaRQjgpNqq28733ao", "senderPublicKey": "HQmnkZjA2Ehwb2iKXAadqRsrXsHGZChU6WfgmHRsMW8t", "proofs": [ "5nDH9ANhubfG29PS8arHifEC2vvULvDpHCcuyBPBH4VgdJqkypedJtbvfHaBUKZTJmFzmB77xQRSx1rEJekATEwq" ], "script": "base64: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", "chainId": 84, "height": 1845693, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 28rFLZUpaFTfsrNinwV1sYCSHdfjkzRJbwFLBgUY5ps8 Next: FxjNe2pKqF72t9wPXdKqP31ovr2p7hjn4JqkJkMhYyBd Diff:
OldNewDifferences
2222 }
2323
2424
25+func deductFee (amount) = fraction(amount, 1, 1000)
26+
27+
28+func deductFlatFee (amount) = fraction(amount, 1, 10000)
29+
30+
2531 func doSwap (pool,payment,assetReceived,minReceived,estReceived) = {
2632 let poolAddress = valueOrErrorMessage(addressFromString(pool), "")
2733 let assetReceivedId = getAssetId(assetReceived)
4248 let poolAssetIdB = getAssetId(poolAssetB)
4349 let versionMajor = valueOrErrorMessage(parseInt(split(valueOrErrorMessage(getString(poolAddress, "version"), ""), ".")[0]), "")
4450 let args = if ((versionMajor == 1))
45- then [minReceived]
51+ then [(minReceived + deductFee(minReceived))]
4652 else if ((versionMajor == 2))
4753 then if ((0 >= estReceived))
4854 then throw("")
49- else [estReceived, minReceived]
55+ else [(estReceived + deductFlatFee(estReceived)), (minReceived + deductFlatFee(minReceived))]
5056 else throw("")
5157 invoke(poolAddress, "exchange", args, [payment])
5258 }
7076 then inv.payments[0]
7177 else throw("")
7278 let assetReceivedId = getAssetId(assetToReceive)
73- func deductFee (amount) = fraction(amount, 1, 1000)
74-
7579 if ((0 >= minReceived))
7680 then throw("")
7781 else {
78- let $t025742779 = match doSwap(pool, pmt, assetToReceive, minReceived, estReceived) {
82+ let $t027162921 = match doSwap(pool, pmt, assetToReceive, minReceived, estReceived) {
7983 case _ =>
8084 if (if (if ($isInstanceOf($match0._1, "Int"))
8185 then $isInstanceOf($match0._2, "Int")
8993 }
9094 else throw("")
9195 }
92- let balanceBefore = $t025742779._1
93- let received = $t025742779._2
96+ let balanceBefore = $t027162921._1
97+ let received = $t027162921._2
9498 if ((0 >= received))
9599 then throw("")
96100 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let collector = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "collector"), "")), "")
55
66 let oracle = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "oracle"), "")), "")
77
88 let pools = split(valueOrErrorMessage(getString(oracle, "pools"), ""), ",")
99
1010 func getAssetId (asset) = if ((asset == "WAVES"))
1111 then unit
1212 else fromBase58String(asset)
1313
1414
1515 func getBalance (assetId) = match assetId {
1616 case asset: ByteVector =>
1717 assetBalance(this, asset)
1818 case waves: Unit =>
1919 wavesBalance(this).available
2020 case _ =>
2121 throw("Match error")
2222 }
2323
2424
25+func deductFee (amount) = fraction(amount, 1, 1000)
26+
27+
28+func deductFlatFee (amount) = fraction(amount, 1, 10000)
29+
30+
2531 func doSwap (pool,payment,assetReceived,minReceived,estReceived) = {
2632 let poolAddress = valueOrErrorMessage(addressFromString(pool), "")
2733 let assetReceivedId = getAssetId(assetReceived)
2834 if ((0 >= minReceived))
2935 then throw("")
3036 else if ((0 > estReceived))
3137 then throw("")
3238 else {
3339 let balanceBefore = getBalance(assetReceivedId)
3440 if ((balanceBefore == balanceBefore))
3541 then {
3642 let result = if (!(containsElement(pools, pool)))
3743 then throw("")
3844 else {
3945 let poolAssetA = valueOrErrorMessage(getString(poolAddress, "A_asset_id"), "")
4046 let poolAssetB = valueOrErrorMessage(getString(poolAddress, "B_asset_id"), "")
4147 let poolAssetIdA = getAssetId(poolAssetA)
4248 let poolAssetIdB = getAssetId(poolAssetB)
4349 let versionMajor = valueOrErrorMessage(parseInt(split(valueOrErrorMessage(getString(poolAddress, "version"), ""), ".")[0]), "")
4450 let args = if ((versionMajor == 1))
45- then [minReceived]
51+ then [(minReceived + deductFee(minReceived))]
4652 else if ((versionMajor == 2))
4753 then if ((0 >= estReceived))
4854 then throw("")
49- else [estReceived, minReceived]
55+ else [(estReceived + deductFlatFee(estReceived)), (minReceived + deductFlatFee(minReceived))]
5056 else throw("")
5157 invoke(poolAddress, "exchange", args, [payment])
5258 }
5359 if ((result == result))
5460 then {
5561 let received = (getBalance(assetReceivedId) - balanceBefore)
5662 if ((received == received))
5763 then $Tuple2(balanceBefore, received)
5864 else throw("Strict value is not equal to itself.")
5965 }
6066 else throw("Strict value is not equal to itself.")
6167 }
6268 else throw("Strict value is not equal to itself.")
6369 }
6470 }
6571
6672
6773 @Callable(inv)
6874 func swap (pool,assetToReceive,minReceived,estReceived) = {
6975 let pmt = if ((size(inv.payments) > 0))
7076 then inv.payments[0]
7177 else throw("")
7278 let assetReceivedId = getAssetId(assetToReceive)
73- func deductFee (amount) = fraction(amount, 1, 1000)
74-
7579 if ((0 >= minReceived))
7680 then throw("")
7781 else {
78- let $t025742779 = match doSwap(pool, pmt, assetToReceive, minReceived, estReceived) {
82+ let $t027162921 = match doSwap(pool, pmt, assetToReceive, minReceived, estReceived) {
7983 case _ =>
8084 if (if (if ($isInstanceOf($match0._1, "Int"))
8185 then $isInstanceOf($match0._2, "Int")
8286 else false)
8387 then $isInstanceOf($match0, "(Int, Int)")
8488 else false)
8589 then {
8690 let before = $match0._1
8791 let income = $match0._2
8892 $Tuple2(before, income)
8993 }
9094 else throw("")
9195 }
92- let balanceBefore = $t025742779._1
93- let received = $t025742779._2
96+ let balanceBefore = $t027162921._1
97+ let received = $t027162921._2
9498 if ((0 >= received))
9599 then throw("")
96100 else {
97101 let fee = deductFee(received)
98102 [ScriptTransfer(inv.caller, (received - fee), assetReceivedId), ScriptTransfer(collector, fee, assetReceivedId)]
99103 }
100104 }
101105 }
102106
103107

github/deemru/w8io/3ef1775 
42.04 ms