tx · DbBKBGPy4kPzspWM41Q9LCpgumL9EHATg8jeVoU4ScFU 3PCUJBpMXtqYKxMiDtKcTeEQcKukfMeoctR: -0.01400000 Waves 2021.11.17 13:54 [2859950] smart account 3PCUJBpMXtqYKxMiDtKcTeEQcKukfMeoctR > SELF 0.00000000 Waves
{ "type": 13, "id": "DbBKBGPy4kPzspWM41Q9LCpgumL9EHATg8jeVoU4ScFU", "fee": 1400000, "feeAssetId": null, "timestamp": 1637146552045, "version": 2, "chainId": 87, "sender": "3PCUJBpMXtqYKxMiDtKcTeEQcKukfMeoctR", "senderPublicKey": "HkhM1YChRvLycTwNa1tmzYCRGFQsFjSmFwad9krdRUYo", "proofs": [ "4bWM9V81KSBvCZK5eo1UZ7Qe4ucweGMxj8gJioH8pSVAvSr4E9hDEndLcWb9qDK6JqbC8j1oHTUir5gziQfoiV6v" ], "script": "base64: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", "height": 2859950, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8YVq8sRnvCP14h8wZnfGL6t6FdcRQgoWSxjKoiV3nRj6 Next: none Diff:
Old | New | Differences | |
---|---|---|---|
30 | 30 | } | |
31 | 31 | ||
32 | 32 | ||
33 | + | func buyWithWaves (address,amount) = { | |
34 | + | let eggAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS' | |
35 | + | let balanceBefore = getBalance(eggAssetId) | |
36 | + | if ((balanceBefore == balanceBefore)) | |
37 | + | then { | |
38 | + | let i1 = invoke(Address(base58'3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ'), "exchange", [1], [AttachedPayment(unit, amount)]) | |
39 | + | if ((i1 == i1)) | |
40 | + | then { | |
41 | + | let balanceAfter = getBalance(eggAssetId) | |
42 | + | if ((balanceAfter == balanceAfter)) | |
43 | + | then [ScriptTransfer(address, (balanceAfter - balanceBefore), eggAssetId)] | |
44 | + | else throw("Strict value is not equal to itself.") | |
45 | + | } | |
46 | + | else throw("Strict value is not equal to itself.") | |
47 | + | } | |
48 | + | else throw("Strict value is not equal to itself.") | |
49 | + | } | |
50 | + | ||
51 | + | ||
33 | 52 | @Callable(i) | |
34 | 53 | func buyEgg () = { | |
35 | 54 | func getInvocationArgs (contractAddress) = { | |
41 | 60 | ||
42 | 61 | let pmt = i.payments[0] | |
43 | 62 | let asset1Amount = pmt.amount | |
44 | - | let assetId = value(pmt.assetId) | |
45 | - | let $t019251975 = getPath(assetId) | |
46 | - | let pathContracts = $t019251975._1 | |
47 | - | let pathAssets = $t019251975._2 | |
48 | - | let balance2Before = getBalance(pathAssets[1]) | |
49 | - | if ((balance2Before == balance2Before)) | |
50 | - | then { | |
51 | - | let contractVersion = getString(pathContracts[0], "version") | |
52 | - | let args = if ((contractVersion == "1.0.0")) | |
53 | - | then [1] | |
54 | - | else [fraction(asset1Amount, 11000, 10000), asset1Amount] | |
55 | - | let i1 = invoke(pathContracts[0], "exchange", args, [AttachedPayment(pathAssets[0], asset1Amount)]) | |
56 | - | if ((i1 == i1)) | |
63 | + | let assetId = pmt.assetId | |
64 | + | if ((assetId == unit)) | |
65 | + | then buyWithWaves(i.caller, asset1Amount) | |
66 | + | else { | |
67 | + | let $t024152473 = getPath(value(assetId)) | |
68 | + | let pathContracts = $t024152473._1 | |
69 | + | let pathAssets = $t024152473._2 | |
70 | + | let balance2Before = getBalance(pathAssets[1]) | |
71 | + | if ((balance2Before == balance2Before)) | |
57 | 72 | then { | |
58 | - | let balance2After = getBalance(pathAssets[1]) | |
59 | - | if ((balance2After == balance2After)) | |
73 | + | let contractVersion = getString(pathContracts[0], "version") | |
74 | + | let args = if ((contractVersion == "1.0.0")) | |
75 | + | then [1] | |
76 | + | else [fraction(asset1Amount, 11000, 10000), asset1Amount] | |
77 | + | let i1 = invoke(pathContracts[0], "exchange", args, [AttachedPayment(pathAssets[0], asset1Amount)]) | |
78 | + | if ((i1 == i1)) | |
60 | 79 | then { | |
61 | - | let asset2Amount = (balance2After - balance2Before) | |
62 | - | let balance3Before = getBalance(pathAssets[2]) | |
63 | - | if ((balance3Before == balance3Before)) | |
80 | + | let balance2After = getBalance(pathAssets[1]) | |
81 | + | if ((balance2After == balance2After)) | |
64 | 82 | then { | |
65 | - | let contract2Version = getString(pathContracts[1], "version") | |
66 | - | let args2 = if ((contract2Version == "1.0.0")) | |
67 | - | then [1] | |
68 | - | else [fraction(asset2Amount, 11000, 10000), asset2Amount] | |
69 | - | let i2 = invoke(pathContracts[1], "exchange", args2, [AttachedPayment(pathAssets[1], asset2Amount)]) | |
70 | - | if ((i2 == i2)) | |
83 | + | let asset2Amount = (balance2After - balance2Before) | |
84 | + | let balance3Before = getBalance(pathAssets[2]) | |
85 | + | if ((balance3Before == balance3Before)) | |
71 | 86 | then { | |
72 | - | let balance3After = getBalance(pathAssets[2]) | |
73 | - | if ((balance3After == balance3After)) | |
87 | + | let contract2Version = getString(pathContracts[1], "version") | |
88 | + | let args2 = if ((contract2Version == "1.0.0")) | |
89 | + | then [1] | |
90 | + | else [fraction(asset2Amount, 11000, 10000), asset2Amount] | |
91 | + | let i2 = invoke(pathContracts[1], "exchange", args2, [AttachedPayment(pathAssets[1], asset2Amount)]) | |
92 | + | if ((i2 == i2)) | |
74 | 93 | then { | |
75 | - | let asset3Amount = (balance3After - balance3Before) | |
94 | + | let balance3After = getBalance(pathAssets[2]) | |
95 | + | if ((balance3After == balance3After)) | |
96 | + | then { | |
97 | + | let asset3Amount = (balance3After - balance3Before) | |
76 | 98 | [ScriptTransfer(i.caller, asset3Amount, pathAssets[2])] | |
99 | + | } | |
100 | + | else throw("Strict value is not equal to itself.") | |
77 | 101 | } | |
78 | 102 | else throw("Strict value is not equal to itself.") | |
79 | 103 | } | |
85 | 109 | } | |
86 | 110 | else throw("Strict value is not equal to itself.") | |
87 | 111 | } | |
88 | - | else throw("Strict value is not equal to itself.") | |
89 | 112 | } | |
90 | 113 | ||
91 | - | ||
92 | - | @Verifier(tx) | |
93 | - | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
94 | 114 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let btcPathContracts = [Address(base58'3P8FVZgAJUAq32UEZtTw84qS4zLqEREiEiP'), Address(base58'3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ')] | |
5 | 5 | ||
6 | 6 | let btcPathTokens = [base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS', unit, base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'] | |
7 | 7 | ||
8 | 8 | let usdtPathContracts = [Address(base58'3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1'), Address(base58'3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ')] | |
9 | 9 | ||
10 | 10 | let usdtPathTokens = [base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'] | |
11 | 11 | ||
12 | 12 | let ethPathContracts = [Address(base58'3PNEC4YKqZiMMytFrYRVtpW2ujvi3aGXRPm'), Address(base58'3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ')] | |
13 | 13 | ||
14 | 14 | let ethPathTokens = [base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'] | |
15 | 15 | ||
16 | 16 | func getPath (assetId) = if ((assetId == base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS')) | |
17 | 17 | then $Tuple2(btcPathContracts, btcPathTokens) | |
18 | 18 | else if ((assetId == base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ')) | |
19 | 19 | then $Tuple2(usdtPathContracts, usdtPathTokens) | |
20 | 20 | else if ((assetId == base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu')) | |
21 | 21 | then $Tuple2(ethPathContracts, ethPathTokens) | |
22 | 22 | else throw("incorrect asset attached to payment") | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | func getBalance (assetId) = match assetId { | |
26 | 26 | case x: Unit => | |
27 | 27 | wavesBalance(this).available | |
28 | 28 | case _ => | |
29 | 29 | assetBalance(this, value(assetId)) | |
30 | 30 | } | |
31 | 31 | ||
32 | 32 | ||
33 | + | func buyWithWaves (address,amount) = { | |
34 | + | let eggAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS' | |
35 | + | let balanceBefore = getBalance(eggAssetId) | |
36 | + | if ((balanceBefore == balanceBefore)) | |
37 | + | then { | |
38 | + | let i1 = invoke(Address(base58'3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ'), "exchange", [1], [AttachedPayment(unit, amount)]) | |
39 | + | if ((i1 == i1)) | |
40 | + | then { | |
41 | + | let balanceAfter = getBalance(eggAssetId) | |
42 | + | if ((balanceAfter == balanceAfter)) | |
43 | + | then [ScriptTransfer(address, (balanceAfter - balanceBefore), eggAssetId)] | |
44 | + | else throw("Strict value is not equal to itself.") | |
45 | + | } | |
46 | + | else throw("Strict value is not equal to itself.") | |
47 | + | } | |
48 | + | else throw("Strict value is not equal to itself.") | |
49 | + | } | |
50 | + | ||
51 | + | ||
33 | 52 | @Callable(i) | |
34 | 53 | func buyEgg () = { | |
35 | 54 | func getInvocationArgs (contractAddress) = { | |
36 | 55 | let contractVersion = getString(contractAddress, "version") | |
37 | 56 | if ((contractVersion == "1.0.0")) | |
38 | 57 | then [1] | |
39 | 58 | else [1, 1] | |
40 | 59 | } | |
41 | 60 | ||
42 | 61 | let pmt = i.payments[0] | |
43 | 62 | let asset1Amount = pmt.amount | |
44 | - | let assetId = value(pmt.assetId) | |
45 | - | let $t019251975 = getPath(assetId) | |
46 | - | let pathContracts = $t019251975._1 | |
47 | - | let pathAssets = $t019251975._2 | |
48 | - | let balance2Before = getBalance(pathAssets[1]) | |
49 | - | if ((balance2Before == balance2Before)) | |
50 | - | then { | |
51 | - | let contractVersion = getString(pathContracts[0], "version") | |
52 | - | let args = if ((contractVersion == "1.0.0")) | |
53 | - | then [1] | |
54 | - | else [fraction(asset1Amount, 11000, 10000), asset1Amount] | |
55 | - | let i1 = invoke(pathContracts[0], "exchange", args, [AttachedPayment(pathAssets[0], asset1Amount)]) | |
56 | - | if ((i1 == i1)) | |
63 | + | let assetId = pmt.assetId | |
64 | + | if ((assetId == unit)) | |
65 | + | then buyWithWaves(i.caller, asset1Amount) | |
66 | + | else { | |
67 | + | let $t024152473 = getPath(value(assetId)) | |
68 | + | let pathContracts = $t024152473._1 | |
69 | + | let pathAssets = $t024152473._2 | |
70 | + | let balance2Before = getBalance(pathAssets[1]) | |
71 | + | if ((balance2Before == balance2Before)) | |
57 | 72 | then { | |
58 | - | let balance2After = getBalance(pathAssets[1]) | |
59 | - | if ((balance2After == balance2After)) | |
73 | + | let contractVersion = getString(pathContracts[0], "version") | |
74 | + | let args = if ((contractVersion == "1.0.0")) | |
75 | + | then [1] | |
76 | + | else [fraction(asset1Amount, 11000, 10000), asset1Amount] | |
77 | + | let i1 = invoke(pathContracts[0], "exchange", args, [AttachedPayment(pathAssets[0], asset1Amount)]) | |
78 | + | if ((i1 == i1)) | |
60 | 79 | then { | |
61 | - | let asset2Amount = (balance2After - balance2Before) | |
62 | - | let balance3Before = getBalance(pathAssets[2]) | |
63 | - | if ((balance3Before == balance3Before)) | |
80 | + | let balance2After = getBalance(pathAssets[1]) | |
81 | + | if ((balance2After == balance2After)) | |
64 | 82 | then { | |
65 | - | let contract2Version = getString(pathContracts[1], "version") | |
66 | - | let args2 = if ((contract2Version == "1.0.0")) | |
67 | - | then [1] | |
68 | - | else [fraction(asset2Amount, 11000, 10000), asset2Amount] | |
69 | - | let i2 = invoke(pathContracts[1], "exchange", args2, [AttachedPayment(pathAssets[1], asset2Amount)]) | |
70 | - | if ((i2 == i2)) | |
83 | + | let asset2Amount = (balance2After - balance2Before) | |
84 | + | let balance3Before = getBalance(pathAssets[2]) | |
85 | + | if ((balance3Before == balance3Before)) | |
71 | 86 | then { | |
72 | - | let balance3After = getBalance(pathAssets[2]) | |
73 | - | if ((balance3After == balance3After)) | |
87 | + | let contract2Version = getString(pathContracts[1], "version") | |
88 | + | let args2 = if ((contract2Version == "1.0.0")) | |
89 | + | then [1] | |
90 | + | else [fraction(asset2Amount, 11000, 10000), asset2Amount] | |
91 | + | let i2 = invoke(pathContracts[1], "exchange", args2, [AttachedPayment(pathAssets[1], asset2Amount)]) | |
92 | + | if ((i2 == i2)) | |
74 | 93 | then { | |
75 | - | let asset3Amount = (balance3After - balance3Before) | |
94 | + | let balance3After = getBalance(pathAssets[2]) | |
95 | + | if ((balance3After == balance3After)) | |
96 | + | then { | |
97 | + | let asset3Amount = (balance3After - balance3Before) | |
76 | 98 | [ScriptTransfer(i.caller, asset3Amount, pathAssets[2])] | |
99 | + | } | |
100 | + | else throw("Strict value is not equal to itself.") | |
77 | 101 | } | |
78 | 102 | else throw("Strict value is not equal to itself.") | |
79 | 103 | } | |
80 | 104 | else throw("Strict value is not equal to itself.") | |
81 | 105 | } | |
82 | 106 | else throw("Strict value is not equal to itself.") | |
83 | 107 | } | |
84 | 108 | else throw("Strict value is not equal to itself.") | |
85 | 109 | } | |
86 | 110 | else throw("Strict value is not equal to itself.") | |
87 | 111 | } | |
88 | - | else throw("Strict value is not equal to itself.") | |
89 | 112 | } | |
90 | 113 | ||
91 | - | ||
92 | - | @Verifier(tx) | |
93 | - | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
94 | 114 |
github/deemru/w8io/3ef1775 43.24 ms ◑