tx · EAFn41YHcdH9ZciASRWoGSGcETaejUiRe4v8ArGTEtvb

3MvdzbvEZLHEE3EXHXxaRQjgpNqq28733ao:  -0.01000000 Waves

2021.12.24 12:05 [1848144] smart account 3MvdzbvEZLHEE3EXHXxaRQjgpNqq28733ao > SELF 0.00000000 Waves

{ "type": 13, "id": "EAFn41YHcdH9ZciASRWoGSGcETaejUiRe4v8ArGTEtvb", "fee": 1000000, "feeAssetId": null, "timestamp": 1640336773257, "version": 1, "sender": "3MvdzbvEZLHEE3EXHXxaRQjgpNqq28733ao", "senderPublicKey": "HQmnkZjA2Ehwb2iKXAadqRsrXsHGZChU6WfgmHRsMW8t", "proofs": [ "3iaCg3rcmo4vuKfgfbUpx6S7F3owFHWoxKdyAfTaaM3dLuFG2RG9fzihfxors3aA28zqc4KR8LPqdKyJcYqAWwW1" ], "script": "base64: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", "chainId": 84, "height": 1848144, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FoSZnYRKBgsHP6hELgLV7b2NtYV84nbUBa3siPcpkXaS Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let collector = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "collector"), "")), "")
4+func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
6-let oracle = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "oracle"), "")), "")
76
8-let pools = split(valueOrErrorMessage(getString(oracle, "pools"), ""), ",")
7+func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
8+
9+
10+func parseIntOrThrow (maybeInt) = valueOrErrorMessage(parseInt(maybeInt), (("Can't parse integer from '" + maybeInt) + "'"))
11+
12+
13+let collector = parseAddressOrThrow(getStringOrThrow(this, "collector"))
14+
15+let oracle = parseAddressOrThrow(getStringOrThrow(this, "oracle"))
16+
17+let pools = split(getStringOrThrow(oracle, "pools"), ",")
918
1019 func getAssetId (asset) = if ((asset == "WAVES"))
1120 then unit
2837 func deductFlatFee (amount) = fraction(amount, 1, 10000)
2938
3039
31-func doSwap (pool,payment,assetReceived,minReceived,estReceived) = {
32- let poolAddress = valueOrErrorMessage(addressFromString(pool), "")
40+func doSwap (pool,payment,assetReceived,minAmountToReceive,estAmountToReceive) = {
41+ let poolAddress = parseAddressOrThrow(pool)
3342 let assetReceivedId = getAssetId(assetReceived)
34- if ((0 >= minReceived))
35- then throw("")
36- else if ((0 > estReceived))
37- then throw("")
38- else {
39- let balanceBefore = getBalance(assetReceivedId)
40- if ((balanceBefore == balanceBefore))
41- then if (!(containsElement(pools, pool)))
42- then throw("")
43- else {
44- let poolAssetA = valueOrErrorMessage(getString(poolAddress, "A_asset_id"), "")
45- let poolAssetB = valueOrErrorMessage(getString(poolAddress, "B_asset_id"), "")
46- let poolAssetIdA = getAssetId(poolAssetA)
47- let poolAssetIdB = getAssetId(poolAssetB)
48- let versionMajor = valueOrErrorMessage(parseInt(split(valueOrErrorMessage(getString(poolAddress, "version"), ""), ".")[0]), "")
49- let args = if ((versionMajor == 1))
50- then [(minReceived + deductFee(minReceived))]
51- else if ((versionMajor == 2))
52- then if ((0 >= estReceived))
53- then throw("")
54- else [(estReceived + deductFlatFee(estReceived)), (minReceived + deductFee(minReceived))]
55- else throw("")
43+ if ((0 >= minAmountToReceive))
44+ then throw("minAmountToReceive must be positive")
45+ else if ((0 > estAmountToReceive))
46+ then throw("estAmountToReceive must be positive")
47+ else if (!(containsElement(pools, pool)))
48+ then throw((("There is no pool at address '" + pool) + "'"))
49+ else {
50+ let versionMajor = parseIntOrThrow(split(getStringOrThrow(poolAddress, "version"), ".")[0])
51+ let args = if ((versionMajor == 1))
52+ then [(minAmountToReceive + deductFee(minAmountToReceive))]
53+ else if ((versionMajor == 2))
54+ then if ((0 >= estAmountToReceive))
55+ then throw("estAmountToReceive must be positive")
56+ else [(estAmountToReceive + deductFlatFee(estAmountToReceive)), (minAmountToReceive + deductFee(minAmountToReceive))]
57+ else throw("")
58+ let balanceBefore = getBalance(assetReceivedId)
59+ if ((balanceBefore == balanceBefore))
60+ then {
5661 let result = invoke(poolAddress, "exchange", args, [payment])
5762 if ((result == result))
5863 then {
6368 then deductFee(received)
6469 else if ((versionMajor == 2))
6570 then deductFlatFee(received)
66- else throw("")
71+ else throw((("Unknown pool version '" + toString(versionMajor)) + "', but 1 or 2 expected"))
6772 if ((0 >= received))
68- then throw("")
73+ then throw("Received amount from pool must be positive")
6974 else $Tuple3(balanceBefore, received, fee)
7075 }
7176 else throw("Strict value is not equal to itself.")
7277 }
7378 else throw("Strict value is not equal to itself.")
7479 }
75- else throw("Strict value is not equal to itself.")
76- }
80+ else throw("Strict value is not equal to itself.")
81+ }
7782 }
7883
7984
8085 @Callable(inv)
81-func swap (pool,assetToReceive,minReceived,estReceived) = {
86+func swap (pool,assetToReceive,minAmountToReceive,estAmountToReceive) = {
8287 let pmt = if ((size(inv.payments) > 0))
8388 then inv.payments[0]
84- else throw("")
89+ else throw("Payment required")
8590 let assetReceivedId = getAssetId(assetToReceive)
86- if ((0 >= minReceived))
87- then throw("")
91+ if ((0 >= minAmountToReceive))
92+ then throw("minAmountToReceive must be positive")
8893 else {
89- let $t028593084 = match doSwap(pool, pmt, assetToReceive, minReceived, estReceived) {
94+ let $t032633526 = match doSwap(pool, pmt, assetToReceive, minAmountToReceive, estAmountToReceive) {
9095 case _ =>
9196 if (if (if ($isInstanceOf($match0._1, "Int"))
9297 then if ($isInstanceOf($match0._2, "Int"))
101106 let fee = $match0._3
102107 $Tuple3(before, income, fee)
103108 }
104- else throw("")
109+ else throw("Can't handle swap result")
105110 }
106- let balanceBefore = $t028593084._1
107- let received = $t028593084._2
108- let fee = $t028593084._3
111+ let balanceBefore = $t032633526._1
112+ let received = $t032633526._2
113+ let fee = $t032633526._3
109114 [ScriptTransfer(inv.caller, (received - fee), assetReceivedId), ScriptTransfer(collector, fee, assetReceivedId)]
110115 }
111116 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let collector = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "collector"), "")), "")
4+func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
6-let oracle = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "oracle"), "")), "")
76
8-let pools = split(valueOrErrorMessage(getString(oracle, "pools"), ""), ",")
7+func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
8+
9+
10+func parseIntOrThrow (maybeInt) = valueOrErrorMessage(parseInt(maybeInt), (("Can't parse integer from '" + maybeInt) + "'"))
11+
12+
13+let collector = parseAddressOrThrow(getStringOrThrow(this, "collector"))
14+
15+let oracle = parseAddressOrThrow(getStringOrThrow(this, "oracle"))
16+
17+let pools = split(getStringOrThrow(oracle, "pools"), ",")
918
1019 func getAssetId (asset) = if ((asset == "WAVES"))
1120 then unit
1221 else fromBase58String(asset)
1322
1423
1524 func getBalance (assetId) = match assetId {
1625 case asset: ByteVector =>
1726 assetBalance(this, asset)
1827 case waves: Unit =>
1928 wavesBalance(this).available
2029 case _ =>
2130 throw("Match error")
2231 }
2332
2433
2534 func deductFee (amount) = fraction(amount, 1, 1000)
2635
2736
2837 func deductFlatFee (amount) = fraction(amount, 1, 10000)
2938
3039
31-func doSwap (pool,payment,assetReceived,minReceived,estReceived) = {
32- let poolAddress = valueOrErrorMessage(addressFromString(pool), "")
40+func doSwap (pool,payment,assetReceived,minAmountToReceive,estAmountToReceive) = {
41+ let poolAddress = parseAddressOrThrow(pool)
3342 let assetReceivedId = getAssetId(assetReceived)
34- if ((0 >= minReceived))
35- then throw("")
36- else if ((0 > estReceived))
37- then throw("")
38- else {
39- let balanceBefore = getBalance(assetReceivedId)
40- if ((balanceBefore == balanceBefore))
41- then if (!(containsElement(pools, pool)))
42- then throw("")
43- else {
44- let poolAssetA = valueOrErrorMessage(getString(poolAddress, "A_asset_id"), "")
45- let poolAssetB = valueOrErrorMessage(getString(poolAddress, "B_asset_id"), "")
46- let poolAssetIdA = getAssetId(poolAssetA)
47- let poolAssetIdB = getAssetId(poolAssetB)
48- let versionMajor = valueOrErrorMessage(parseInt(split(valueOrErrorMessage(getString(poolAddress, "version"), ""), ".")[0]), "")
49- let args = if ((versionMajor == 1))
50- then [(minReceived + deductFee(minReceived))]
51- else if ((versionMajor == 2))
52- then if ((0 >= estReceived))
53- then throw("")
54- else [(estReceived + deductFlatFee(estReceived)), (minReceived + deductFee(minReceived))]
55- else throw("")
43+ if ((0 >= minAmountToReceive))
44+ then throw("minAmountToReceive must be positive")
45+ else if ((0 > estAmountToReceive))
46+ then throw("estAmountToReceive must be positive")
47+ else if (!(containsElement(pools, pool)))
48+ then throw((("There is no pool at address '" + pool) + "'"))
49+ else {
50+ let versionMajor = parseIntOrThrow(split(getStringOrThrow(poolAddress, "version"), ".")[0])
51+ let args = if ((versionMajor == 1))
52+ then [(minAmountToReceive + deductFee(minAmountToReceive))]
53+ else if ((versionMajor == 2))
54+ then if ((0 >= estAmountToReceive))
55+ then throw("estAmountToReceive must be positive")
56+ else [(estAmountToReceive + deductFlatFee(estAmountToReceive)), (minAmountToReceive + deductFee(minAmountToReceive))]
57+ else throw("")
58+ let balanceBefore = getBalance(assetReceivedId)
59+ if ((balanceBefore == balanceBefore))
60+ then {
5661 let result = invoke(poolAddress, "exchange", args, [payment])
5762 if ((result == result))
5863 then {
5964 let received = (getBalance(assetReceivedId) - balanceBefore)
6065 if ((received == received))
6166 then {
6267 let fee = if ((versionMajor == 1))
6368 then deductFee(received)
6469 else if ((versionMajor == 2))
6570 then deductFlatFee(received)
66- else throw("")
71+ else throw((("Unknown pool version '" + toString(versionMajor)) + "', but 1 or 2 expected"))
6772 if ((0 >= received))
68- then throw("")
73+ then throw("Received amount from pool must be positive")
6974 else $Tuple3(balanceBefore, received, fee)
7075 }
7176 else throw("Strict value is not equal to itself.")
7277 }
7378 else throw("Strict value is not equal to itself.")
7479 }
75- else throw("Strict value is not equal to itself.")
76- }
80+ else throw("Strict value is not equal to itself.")
81+ }
7782 }
7883
7984
8085 @Callable(inv)
81-func swap (pool,assetToReceive,minReceived,estReceived) = {
86+func swap (pool,assetToReceive,minAmountToReceive,estAmountToReceive) = {
8287 let pmt = if ((size(inv.payments) > 0))
8388 then inv.payments[0]
84- else throw("")
89+ else throw("Payment required")
8590 let assetReceivedId = getAssetId(assetToReceive)
86- if ((0 >= minReceived))
87- then throw("")
91+ if ((0 >= minAmountToReceive))
92+ then throw("minAmountToReceive must be positive")
8893 else {
89- let $t028593084 = match doSwap(pool, pmt, assetToReceive, minReceived, estReceived) {
94+ let $t032633526 = match doSwap(pool, pmt, assetToReceive, minAmountToReceive, estAmountToReceive) {
9095 case _ =>
9196 if (if (if ($isInstanceOf($match0._1, "Int"))
9297 then if ($isInstanceOf($match0._2, "Int"))
9398 then $isInstanceOf($match0._3, "Int")
9499 else false
95100 else false)
96101 then $isInstanceOf($match0, "(Int, Int, Int)")
97102 else false)
98103 then {
99104 let before = $match0._1
100105 let income = $match0._2
101106 let fee = $match0._3
102107 $Tuple3(before, income, fee)
103108 }
104- else throw("")
109+ else throw("Can't handle swap result")
105110 }
106- let balanceBefore = $t028593084._1
107- let received = $t028593084._2
108- let fee = $t028593084._3
111+ let balanceBefore = $t032633526._1
112+ let received = $t032633526._2
113+ let fee = $t032633526._3
109114 [ScriptTransfer(inv.caller, (received - fee), assetReceivedId), ScriptTransfer(collector, fee, assetReceivedId)]
110115 }
111116 }
112117
113118

github/deemru/w8io/3ef1775 
224.77 ms