tx · Gv2bQAYSTry9ww2XnXLpTa5ZocJeNeo59jPxGPtFAPSc
3PJcupzAhUyuBAqEWyKGccGXN9sM2K5mHja: -0.01400000 Waves
2022.11.01 16:44 [3363478] smart account 3PJcupzAhUyuBAqEWyKGccGXN9sM2K5mHja > SELF 0.00000000 Waves
{
"type": 13,
"id": "Gv2bQAYSTry9ww2XnXLpTa5ZocJeNeo59jPxGPtFAPSc",
"fee": 1400000,
"feeAssetId": null,
"timestamp": 1667310393882,
"version": 2,
"chainId": 87,
"sender": "3PJcupzAhUyuBAqEWyKGccGXN9sM2K5mHja",
"senderPublicKey": "J9eh4VQXtQ56xyr9CrAWffT4jSc7Xn9x3w21a5z83Wwu",
"proofs": [
"AgthVkowHqYXPa7STmTe3s8zJ6LEHatDk2SBzgdLrzbxf1SiWT84XX2XtTzQS9FBqgVzxc3WPNfFbvDjAzdCc24"
],
"script": "base64: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",
"height": 3363478,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: EGKQhzLguTtwnYcr6bx2rMagajakKXaqn5E8x4Rt4GQj
Next: GFK6Pi87r65NZSS8J3hQ9RvaYMfzxizE7rWWxFUjDkD8
Diff:
Old | New | | Differences |
---|
6 | 6 | | else fromBase58String(assetIdStr) |
---|
7 | 7 | | |
---|
8 | 8 | | |
---|
| 9 | + | func getBalance (assetIdStr) = if ((assetIdStr == "WAVES")) |
---|
| 10 | + | then wavesBalance(this).available |
---|
| 11 | + | else assetBalance(this, fromBase58String(assetIdStr)) |
---|
| 12 | + | |
---|
| 13 | + | |
---|
9 | 14 | | @Callable(i) |
---|
10 | 15 | | func swap (asset0,asset1,pool0,pool1,amount0) = { |
---|
11 | | - | let inv1 = invoke(addressFromStringValue(pool0), "swap", [asset1, 0], [AttachedPayment(getAssetBytes(asset0), amount0)]) |
---|
12 | | - | if ((inv1 == inv1)) |
---|
| 16 | + | let balanceBefore = getBalance(asset1) |
---|
| 17 | + | if ((balanceBefore == balanceBefore)) |
---|
13 | 18 | | then { |
---|
14 | | - | let amount1 = match inv1 { |
---|
15 | | - | case x: Int => |
---|
16 | | - | x |
---|
17 | | - | case _ => |
---|
18 | | - | throw("error while swapping") |
---|
19 | | - | } |
---|
20 | | - | if ((amount1 == amount1)) |
---|
| 19 | + | let inv1 = invoke(addressFromStringValue(pool0), "swap", [asset1, 0], [AttachedPayment(getAssetBytes(asset0), amount0)]) |
---|
| 20 | + | if ((inv1 == inv1)) |
---|
21 | 21 | | then { |
---|
22 | | - | let inv2 = invoke(addressFromStringValue(pool1), "swap", [asset0, 0], [AttachedPayment(getAssetBytes(asset1), amount1)]) |
---|
23 | | - | if ((inv2 == inv2)) |
---|
| 22 | + | let amount1 = (getBalance(asset1) - balanceBefore) |
---|
| 23 | + | if ((amount1 == amount1)) |
---|
24 | 24 | | then { |
---|
25 | | - | let resultAmount = match inv2 { |
---|
26 | | - | case x: Int => |
---|
27 | | - | x |
---|
28 | | - | case _ => |
---|
29 | | - | throw("error while swapping") |
---|
30 | | - | } |
---|
31 | | - | if ((resultAmount == resultAmount)) |
---|
32 | | - | then [ScriptTransfer(i.caller, resultAmount, getAssetBytes(asset1))] |
---|
| 25 | + | let inv2 = invoke(addressFromStringValue(pool1), "swap", [asset0, 0], [AttachedPayment(getAssetBytes(asset1), amount1)]) |
---|
| 26 | + | if ((inv2 == inv2)) |
---|
| 27 | + | then { |
---|
| 28 | + | let resultAmount = match inv2 { |
---|
| 29 | + | case x: Int => |
---|
| 30 | + | x |
---|
| 31 | + | case _ => |
---|
| 32 | + | throw("error while swapping") |
---|
| 33 | + | } |
---|
| 34 | + | if ((resultAmount == resultAmount)) |
---|
| 35 | + | then [ScriptTransfer(i.caller, resultAmount, getAssetBytes(asset1))] |
---|
| 36 | + | else throw("Strict value is not equal to itself.") |
---|
| 37 | + | } |
---|
33 | 38 | | else throw("Strict value is not equal to itself.") |
---|
34 | 39 | | } |
---|
35 | 40 | | else throw("Strict value is not equal to itself.") |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 5 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) |
---|
5 | 5 | | then unit |
---|
6 | 6 | | else fromBase58String(assetIdStr) |
---|
7 | 7 | | |
---|
8 | 8 | | |
---|
| 9 | + | func getBalance (assetIdStr) = if ((assetIdStr == "WAVES")) |
---|
| 10 | + | then wavesBalance(this).available |
---|
| 11 | + | else assetBalance(this, fromBase58String(assetIdStr)) |
---|
| 12 | + | |
---|
| 13 | + | |
---|
9 | 14 | | @Callable(i) |
---|
10 | 15 | | func swap (asset0,asset1,pool0,pool1,amount0) = { |
---|
11 | | - | let inv1 = invoke(addressFromStringValue(pool0), "swap", [asset1, 0], [AttachedPayment(getAssetBytes(asset0), amount0)]) |
---|
12 | | - | if ((inv1 == inv1)) |
---|
| 16 | + | let balanceBefore = getBalance(asset1) |
---|
| 17 | + | if ((balanceBefore == balanceBefore)) |
---|
13 | 18 | | then { |
---|
14 | | - | let amount1 = match inv1 { |
---|
15 | | - | case x: Int => |
---|
16 | | - | x |
---|
17 | | - | case _ => |
---|
18 | | - | throw("error while swapping") |
---|
19 | | - | } |
---|
20 | | - | if ((amount1 == amount1)) |
---|
| 19 | + | let inv1 = invoke(addressFromStringValue(pool0), "swap", [asset1, 0], [AttachedPayment(getAssetBytes(asset0), amount0)]) |
---|
| 20 | + | if ((inv1 == inv1)) |
---|
21 | 21 | | then { |
---|
22 | | - | let inv2 = invoke(addressFromStringValue(pool1), "swap", [asset0, 0], [AttachedPayment(getAssetBytes(asset1), amount1)]) |
---|
23 | | - | if ((inv2 == inv2)) |
---|
| 22 | + | let amount1 = (getBalance(asset1) - balanceBefore) |
---|
| 23 | + | if ((amount1 == amount1)) |
---|
24 | 24 | | then { |
---|
25 | | - | let resultAmount = match inv2 { |
---|
26 | | - | case x: Int => |
---|
27 | | - | x |
---|
28 | | - | case _ => |
---|
29 | | - | throw("error while swapping") |
---|
30 | | - | } |
---|
31 | | - | if ((resultAmount == resultAmount)) |
---|
32 | | - | then [ScriptTransfer(i.caller, resultAmount, getAssetBytes(asset1))] |
---|
| 25 | + | let inv2 = invoke(addressFromStringValue(pool1), "swap", [asset0, 0], [AttachedPayment(getAssetBytes(asset1), amount1)]) |
---|
| 26 | + | if ((inv2 == inv2)) |
---|
| 27 | + | then { |
---|
| 28 | + | let resultAmount = match inv2 { |
---|
| 29 | + | case x: Int => |
---|
| 30 | + | x |
---|
| 31 | + | case _ => |
---|
| 32 | + | throw("error while swapping") |
---|
| 33 | + | } |
---|
| 34 | + | if ((resultAmount == resultAmount)) |
---|
| 35 | + | then [ScriptTransfer(i.caller, resultAmount, getAssetBytes(asset1))] |
---|
| 36 | + | else throw("Strict value is not equal to itself.") |
---|
| 37 | + | } |
---|
33 | 38 | | else throw("Strict value is not equal to itself.") |
---|
34 | 39 | | } |
---|
35 | 40 | | else throw("Strict value is not equal to itself.") |
---|
36 | 41 | | } |
---|
37 | 42 | | else throw("Strict value is not equal to itself.") |
---|
38 | 43 | | } |
---|
39 | 44 | | else throw("Strict value is not equal to itself.") |
---|
40 | 45 | | } |
---|
41 | 46 | | |
---|
42 | 47 | | |
---|
43 | 48 | | @Verifier(tx) |
---|
44 | 49 | | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) |
---|
45 | 50 | | |
---|