tx · D1QppE9PVGvGvJmF2QeEQ4otEd6Qs5iGpkM9YpB7Np2g 3P5iS5FnZHLoEcSwmDpShmNn9Z5KCL2XdbU: -0.01000000 Waves 2022.11.21 01:11 [3391431] smart account 3P5iS5FnZHLoEcSwmDpShmNn9Z5KCL2XdbU > SELF 0.00000000 Waves
{ "type": 13, "id": "D1QppE9PVGvGvJmF2QeEQ4otEd6Qs5iGpkM9YpB7Np2g", "fee": 1000000, "feeAssetId": null, "timestamp": 1668982314267, "version": 2, "chainId": 87, "sender": "3P5iS5FnZHLoEcSwmDpShmNn9Z5KCL2XdbU", "senderPublicKey": "FQ1hCr2qX8MTXUGfsXkucpF5apQVnwe7my5z7nFk2ggQ", "proofs": [ "4HKGKcXMyW5mWc1vHzGWdUaqJWRdtFUkVQ25pFgsVPRgkBFkgPNtmKUVnPgwD6613R3TVaMwQS6SqiJZrwfz1jne" ], "script": "base64:AAIFAAAAAAAAAAcIAhIDCgEIAAAAAwEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAWIFAAAAByRtYXRjaDAJAAJYAAAAAQUAAAABYgIAAAAFV0FWRVMBAAAADWdldEFzc2V0Qnl0ZXMAAAABAAAACmFzc2V0SWRTdHIDCQAAAAAAAAIFAAAACmFzc2V0SWRTdHICAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAACmFzc2V0SWRTdHIBAAAACmdldEJhbGFuY2UAAAABAAAACmFzc2V0SWRTdHIDCQAAAAAAAAIFAAAACmFzc2V0SWRTdHICAAAABVdBVkVTCAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQkAA/AAAAACBQAAAAR0aGlzCQACWQAAAAEFAAAACmFzc2V0SWRTdHIAAAABAAAAAWkBAAAABnN3YXBXWAAAAAEAAAAGYXNzZXQxBAAAAAdhbW91bnQwCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAABmFzc2V0MAkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAOZmFjdG9yeUFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVd4W96KvlEqrosx6m8TkCW+9Km4orsJAkEEAAAACWFzc2V0MEludAkAAaQAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA5mYWN0b3J5QWRkcmVzcwkAASwAAAACAgAAACglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQAAAAZhc3NldDAEAAAACWFzc2V0MUludAkAAaQAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA5mYWN0b3J5QWRkcmVzcwkAASwAAAACAgAAACglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQAAAAZhc3NldDEEAAAACnBvb2xDb25maWcJAAS1AAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAOZmFjdG9yeUFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAACWFzc2V0MEludAIAAAACX18FAAAACWFzc2V0MUludAIAAAAIX19jb25maWcCAAAAAl9fBAAAAAtwb29sQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnAAAAAAAAAAABBAAAAAtwb29sQXNzZXRJZAkAAZEAAAACBQAAAApwb29sQ29uZmlnAAAAAAAAAAADBAAAAARpbnYxCQAD/AAAAAQFAAAAC3Bvb2xBZGRyZXNzAgAAAAlwdXRPbmVUa24JAARMAAAAAgAAAAAAAAAAAAkABEwAAAACBwUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACCQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAABmFzc2V0MAUAAAAHYW1vdW50MAUAAAADbmlsAwkAAAAAAAACBQAAAARpbnYxBQAAAARpbnYxBAAAAA9wb29sVG9rZW5BbW91bnQJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAALcG9vbEFzc2V0SWQDCQAAAAAAAAIFAAAAD3Bvb2xUb2tlbkFtb3VudAUAAAAPcG9vbFRva2VuQW1vdW50BAAAABNhc3NldDFCYWxhbmNlQmVmb3JlCQEAAAAKZ2V0QmFsYW5jZQAAAAEFAAAABmFzc2V0MQMJAAAAAAAAAgUAAAATYXNzZXQxQmFsYW5jZUJlZm9yZQUAAAATYXNzZXQxQmFsYW5jZUJlZm9yZQQAAAAEaW52MgkAA/wAAAAEBQAAAAtwb29sQWRkcmVzcwIAAAAJZ2V0T25lVGtuCQAETAAAAAIFAAAABmFzc2V0MQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALcG9vbEFzc2V0SWQFAAAAD3Bvb2xUb2tlbkFtb3VudAUAAAADbmlsAwkAAAAAAAACBQAAAARpbnYyBQAAAARpbnYyBAAAAAdhbW91bnQxCQAAZQAAAAIJAQAAAApnZXRCYWxhbmNlAAAAAQUAAAAGYXNzZXQxBQAAABNhc3NldDFCYWxhbmNlQmVmb3JlAwkAAAAAAAACBQAAAAdhbW91bnQxBQAAAAdhbW91bnQxCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAHYW1vdW50MQkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAZhc3NldDEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXk7aWoJ", "height": 3391431, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CYTCJjsSX7NTQnFoyUHmHnJB2M6i8iV7vU3nCtbB1AN9 Next: 9WGLsXmeadUoYRbCvVwAzqJkJjwhv4Smwxrw7uUg3K2 Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getAssetString (assetId) = match assetId { | |
5 | + | case b: ByteVector => | |
6 | + | toBase58String(b) | |
7 | + | case _ => | |
8 | + | "WAVES" | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
13 | + | then unit | |
14 | + | else fromBase58String(assetIdStr) | |
15 | + | ||
16 | + | ||
17 | + | func getBalance (assetIdStr) = if ((assetIdStr == "WAVES")) | |
18 | + | then wavesBalance(this).available | |
19 | + | else assetBalance(this, fromBase58String(assetIdStr)) | |
4 | 20 | ||
5 | 21 | ||
6 | 22 | @Callable(i) | |
7 | - | func swapWX (asset0,asset1) = { | |
23 | + | func swapWX (asset1) = { | |
24 | + | let amount0 = i.payments[0].amount | |
25 | + | let asset0 = getAssetString(i.payments[0].assetId) | |
8 | 26 | let factoryAddress = Address(base58'3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv') | |
9 | 27 | let asset0Int = toString(getIntegerValue(factoryAddress, ("%s%s%s__mappings__baseAsset2internalId__" + asset0))) | |
10 | 28 | let asset1Int = toString(getIntegerValue(factoryAddress, ("%s%s%s__mappings__baseAsset2internalId__" + asset1))) | |
11 | - | let poolConfig = getStringValue(factoryAddress, (((("%d%d%s__" + asset0Int) + "__") + asset1Int) + "__config")) | |
12 | - | let poolAssetId = split(poolConfig, "__")[3] | |
13 | - | throw(poolConfig) | |
29 | + | let poolConfig = split(getStringValue(factoryAddress, (((("%d%d%s__" + asset0Int) + "__") + asset1Int) + "__config")), "__") | |
30 | + | let poolAddress = addressFromStringValue(poolConfig[1]) | |
31 | + | let poolAssetId = poolConfig[3] | |
32 | + | let inv1 = invoke(poolAddress, "putOneTkn", [0, false], [AttachedPayment(getAssetBytes(asset0), amount0)]) | |
33 | + | if ((inv1 == inv1)) | |
34 | + | then { | |
35 | + | let poolTokenAmount = getBalance(poolAssetId) | |
36 | + | if ((poolTokenAmount == poolTokenAmount)) | |
37 | + | then { | |
38 | + | let asset1BalanceBefore = getBalance(asset1) | |
39 | + | if ((asset1BalanceBefore == asset1BalanceBefore)) | |
40 | + | then { | |
41 | + | let inv2 = invoke(poolAddress, "getOneTkn", [asset1, 0], [AttachedPayment(getAssetBytes(poolAssetId), poolTokenAmount)]) | |
42 | + | if ((inv2 == inv2)) | |
43 | + | then { | |
44 | + | let amount1 = (getBalance(asset1) - asset1BalanceBefore) | |
45 | + | if ((amount1 == amount1)) | |
46 | + | then [ScriptTransfer(i.caller, amount1, getAssetBytes(asset1))] | |
47 | + | else throw("Strict value is not equal to itself.") | |
48 | + | } | |
49 | + | else throw("Strict value is not equal to itself.") | |
50 | + | } | |
51 | + | else throw("Strict value is not equal to itself.") | |
52 | + | } | |
53 | + | else throw("Strict value is not equal to itself.") | |
54 | + | } | |
55 | + | else throw("Strict value is not equal to itself.") | |
14 | 56 | } | |
15 | 57 | ||
16 | 58 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getAssetString (assetId) = match assetId { | |
5 | + | case b: ByteVector => | |
6 | + | toBase58String(b) | |
7 | + | case _ => | |
8 | + | "WAVES" | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
13 | + | then unit | |
14 | + | else fromBase58String(assetIdStr) | |
15 | + | ||
16 | + | ||
17 | + | func getBalance (assetIdStr) = if ((assetIdStr == "WAVES")) | |
18 | + | then wavesBalance(this).available | |
19 | + | else assetBalance(this, fromBase58String(assetIdStr)) | |
4 | 20 | ||
5 | 21 | ||
6 | 22 | @Callable(i) | |
7 | - | func swapWX (asset0,asset1) = { | |
23 | + | func swapWX (asset1) = { | |
24 | + | let amount0 = i.payments[0].amount | |
25 | + | let asset0 = getAssetString(i.payments[0].assetId) | |
8 | 26 | let factoryAddress = Address(base58'3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv') | |
9 | 27 | let asset0Int = toString(getIntegerValue(factoryAddress, ("%s%s%s__mappings__baseAsset2internalId__" + asset0))) | |
10 | 28 | let asset1Int = toString(getIntegerValue(factoryAddress, ("%s%s%s__mappings__baseAsset2internalId__" + asset1))) | |
11 | - | let poolConfig = getStringValue(factoryAddress, (((("%d%d%s__" + asset0Int) + "__") + asset1Int) + "__config")) | |
12 | - | let poolAssetId = split(poolConfig, "__")[3] | |
13 | - | throw(poolConfig) | |
29 | + | let poolConfig = split(getStringValue(factoryAddress, (((("%d%d%s__" + asset0Int) + "__") + asset1Int) + "__config")), "__") | |
30 | + | let poolAddress = addressFromStringValue(poolConfig[1]) | |
31 | + | let poolAssetId = poolConfig[3] | |
32 | + | let inv1 = invoke(poolAddress, "putOneTkn", [0, false], [AttachedPayment(getAssetBytes(asset0), amount0)]) | |
33 | + | if ((inv1 == inv1)) | |
34 | + | then { | |
35 | + | let poolTokenAmount = getBalance(poolAssetId) | |
36 | + | if ((poolTokenAmount == poolTokenAmount)) | |
37 | + | then { | |
38 | + | let asset1BalanceBefore = getBalance(asset1) | |
39 | + | if ((asset1BalanceBefore == asset1BalanceBefore)) | |
40 | + | then { | |
41 | + | let inv2 = invoke(poolAddress, "getOneTkn", [asset1, 0], [AttachedPayment(getAssetBytes(poolAssetId), poolTokenAmount)]) | |
42 | + | if ((inv2 == inv2)) | |
43 | + | then { | |
44 | + | let amount1 = (getBalance(asset1) - asset1BalanceBefore) | |
45 | + | if ((amount1 == amount1)) | |
46 | + | then [ScriptTransfer(i.caller, amount1, getAssetBytes(asset1))] | |
47 | + | else throw("Strict value is not equal to itself.") | |
48 | + | } | |
49 | + | else throw("Strict value is not equal to itself.") | |
50 | + | } | |
51 | + | else throw("Strict value is not equal to itself.") | |
52 | + | } | |
53 | + | else throw("Strict value is not equal to itself.") | |
54 | + | } | |
55 | + | else throw("Strict value is not equal to itself.") | |
14 | 56 | } | |
15 | 57 | ||
16 | 58 | ||
17 | 59 | @Verifier(tx) | |
18 | 60 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
19 | 61 |
github/deemru/w8io/3ef1775 25.06 ms ◑