tx · xSi3mU2d2nvUZRGBjSs9kDdgYHq4LA6UBKjFVPSrRcH 3PAv42skNMWedMSNx75fMDuMcFzggaELYqK: -0.01100000 Waves 2023.04.07 16:29 [3589821] smart account 3PAv42skNMWedMSNx75fMDuMcFzggaELYqK > SELF 0.00000000 Waves
{ "type": 13, "id": "xSi3mU2d2nvUZRGBjSs9kDdgYHq4LA6UBKjFVPSrRcH", "fee": 1100000, "feeAssetId": null, "timestamp": 1680874211019, "version": 2, "chainId": 87, "sender": "3PAv42skNMWedMSNx75fMDuMcFzggaELYqK", "senderPublicKey": "2S8hdm8hsS8LEgawkBAPztpWr6tkd4qFjb3TPzqmm7D1", "proofs": [ "5GkYS4HeYgvAKpQ5HndW76rJnFbSLR3Z1sJosoHKTDZpWtQF7Yyazgi2wYwUdFJptZzR4HXfrJkbxqT4QBzxcLBP" ], "script": "base64:AAIFAAAAAAAAAA4IAhIAEgASABIAEgASAAAAABIAAAAAC2RleENvbnRyYWN0AQAAABoBV8pr/J/Xy7o1PTtmmh6OsIpSpzSimkOUggAAAAAQbmV1dHJpbm9Db250cmFjdAEAAAAaAVdwBGKmR5vprVZolMvvhYwwgiAomggUlrIAAAAAFm5ldXRyaW5vU3Rha2luZ0FkZHJlc3MBAAAAGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAAAAAAp4dG5Bc3NldElkAQAAACC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QAAAAALc3VyZkFzc2V0SWQBAAAAIJLR9EriEQEr9H7q3iGOPcX7yfJ9zoey7VIZ8DpOJFj1AAAAAAl3eEFzc2V0SWQBAAAAIJMBHKupx24lV85mnnG2vapr+DzoWAsq7tmgTrs83BSxAAAAABRjYXNlWHRuU3dhcFN0YXRlSWRsZQAAAAAAAAAAAAAAAAAcY2FzZVh0blN3YXBTdGF0ZVh0blRvUmV3YXJkcwAAAAAAAAAAAQAAAAAkY2FzZVh0blN3YXBTdGF0ZUV4Y2hhbmdlUmV3YXJkc09uRGV4AAAAAAAAAAACAAAAABN4dG5Td2FwU3RhdGVFbnVtS2V5AgAAABB4dG5Td2FwU3RhdGVFbnVtAAAAABF4dG5Td2FwQmxvY2tJZEtleQIAAAAOeHRuU3dhcEJsb2NrSWQAAAAAF3h0blN3YXBUcmFuc2FjdGlvbklkS2V5AgAAABR4dG5Td2FwVHJhbnNhY3Rpb25JZAAAAAAUeHRuU3dhcFByaWNlSW5kZXhLZXkCAAAAEXh0blN3YXBQcmljZUluZGV4AAAAABp4dG5Td2FwWHRuU3dhcHBlZEFtb3VudEtleQIAAAAXeHRuU3dhcFh0blN3YXBwZWRBbW91bnQAAAAAHHh0blN3YXBXYXZlc0JhbGFuY2VBdFN3YXBLZXkCAAAAGXh0blN3YXBXYXZlc0JhbGFuY2VBdFN3YXAAAAAAGXh0blN3YXBXeEJhbGFuY2VBdFN3YXBLZXkCAAAAFnh0blN3YXBXeEJhbGFuY2VBdFN3YXAAAAAAHnh0blN3YXBYdG5CYWxhbmNlQXRFeGNoYW5nZUtleQIAAAAbeHRuU3dhcFh0bkJhbGFuY2VBdEV4Y2hhbmdl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dG5Td2FwQmxvY2tJZEtleQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAF3h0blN3YXBUcmFuc2FjdGlvbklkS2V5CQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFHh0blN3YXBQcmljZUluZGV4S2V5BQAAAApwcmljZUluZGV4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABp4dG5Td2FwWHRuU3dhcHBlZEFtb3VudEtleQUAAAANbWF4U3dhcEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAceHRuU3dhcFdhdmVzQmFsYW5jZUF0U3dhcEtleQgFAAAAE2N1cnJlbnRXYXZlc0JhbGFuY2UAAAAJYXZhaWxhYmxlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABl4dG5Td2FwV3hCYWxhbmNlQXRTd2FwS2V5BQAAABBjdXJyZW50V1hCYWxhbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABN4dG5Td2FwU3RhdGVFbnVtS2V5BQAAABxjYXNlWHRuU3dhcFN0YXRlWHRuVG9SZXdhcmRzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAK0luY29ycmVjdCBkYXRhIGZyb20gbmV1dHJpbm8gc21hcnQgY29udHJhY3QJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAJ3h0blN3YXBQYXJ0MmV4Y2hhbmdlWHRuU3dhcFJld2FyZHNPbkRleAAAAAADCQEAAAACIT0AAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAABN4dG5Td2FwU3RhdGVFbnVtS2V5BQAAABxjYXNlWHRuU3dhcFN0YXRlWHRuVG9SZXdhcmRzCQAAAgAAAAECAAAAIVdyb25nIHN0YXRlLCBtdXN0IGJlIFh0blRvUmV3YXJkcwMJAABnAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQUAAAAReHRuU3dhcEJsb2NrSWRLZXkFAAAABmhlaWdodAkAAAIAAAABAgAAABVNdXN0IHdhaXQgZm9yIDEgYmxvY2sEAAAAEHN3YXBUcmFuc2F0aW9uSWQJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAAF3h0blN3YXBUcmFuc2FjdGlvbklkS2V5BAAAAA5zd2FwUHJpY2VJbmRleAkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQUAAAAUeHRuU3dhcFByaWNlSW5kZXhLZXkEAAAADHdpdGhkcmF3X3JlcwkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAEG5ldXRyaW5vQ29udHJhY3QCAAAACHdpdGhkcmF3CQAETAAAAAIJAAQlAAAAAQUAAAAEdGhpcwkABEwAAAACBQAAAA5zd2FwUHJpY2VJbmRleAkABEwAAAACBQAAABBzd2FwVHJhbnNhdGlvbklkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAMd2l0aGRyYXdfcmVzBQAAAAx3aXRoZHJhd19yZXMEAAAAEndhdmVzQmFsYW5jZUF0U3dhcAkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQUAAAAceHRuU3dhcFdhdmVzQmFsYW5jZUF0U3dhcEtleQQAAAAPd3hCYWxhbmNlQXRTd2FwCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAABl4dG5Td2FwV3hCYWxhbmNlQXRTd2FwS2V5BAAAABNjdXJyZW50V2F2ZXNCYWxhbmNlCQAD7wAAAAEFAAAABHRoaXMEAAAAEGN1cnJlbnRXWEJhbGFuY2UJAAPwAAAAAgUAAAAEdGhpcwUAAAAJd3hBc3NldElkBAAAAAx3YXZlc1Jld2FyZHMJAABlAAAAAggFAAAAE2N1cnJlbnRXYXZlc0JhbGFuY2UAAAAJYXZhaWxhYmxlBQAAABJ3YXZlc0JhbGFuY2VBdFN3YXAEAAAACXd4UmV3YXJkcwkAAGUAAAACBQAAABBjdXJyZW50V1hCYWxhbmNlBQAAAA93eEJhbGFuY2VBdFN3YXADCQAAZgAAAAIFAAAADHdhdmVzUmV3YXJkcwAAAAAAAAAAAAQAAAAJd2F2ZXNTd2FwCQAD/AAAAAQJAQAAAAdBZGRyZXNzAAAAAQUAAAALZGV4Q29udHJhY3QCAAAAFGV4Y2hhbmdlVGhlblRyYW5zZmVyCQAETAAAAAIJAAJYAAAAAQUAAAAKeHRuQXNzZXRJZAkABEwAAAACCQAEJQAAAAEFAAAABHRoaXMJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAR1bml0AwkAAGYAAAACBQAAAAx3YXZlc1Jld2FyZHMAAAAAAAAAAAAFAAAADHdhdmVzUmV3YXJkcwAAAAAAAAAAAAUAAAADbmlsAwkAAAAAAAACBQAAAAl3YXZlc1N3YXAFAAAACXdhdmVzU3dhcAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQAAAAGd3hTd2FwCQAD/AAAAAQJAQAAAAdBZGRyZXNzAAAAAQUAAAALZGV4Q29udHJhY3QCAAAAFGV4Y2hhbmdlVGhlblRyYW5zZmVyCQAETAAAAAIJAAJYAAAAAQUAAAAKeHRuQXNzZXRJZAkABEwAAAACCQAEJQAAAAEFAAAABHRoaXMJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAl3eEFzc2V0SWQFAAAACXd4UmV3YXJkcwUAAAADbmlsAwkAAAAAAAACBQAAAAZ3eFN3YXAFAAAABnd4U3dhcAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAeeHRuU3dhcFh0bkJhbGFuY2VBdEV4Y2hhbmdlS2V5CQAD8AAAAAIFAAAABHRoaXMFAAAACnh0bkFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGXh0blN3YXBFeGNoYW5nZUJsb2NrSWRLZXkFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATeHRuU3dhcFN0YXRlRW51bUtleQUAAAAkY2FzZVh0blN3YXBTdGF0ZUV4Y2hhbmdlUmV3YXJkc09uRGV4BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA90ZXN0RGV4RXhjaGFuZ2UAAAAABAAAAAZ3eFN3YXAJAAP8AAAABAkBAAAAB0FkZHJlc3MAAAABBQAAAAtkZXhDb250cmFjdAIAAAAUZXhjaGFuZ2VUaGVuVHJhbnNmZXIJAARMAAAAAgIAAAAsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzCQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAJd3hBc3NldElkAAAAAAA7msoABQAAAANuaWwDCQAAAAAAAAIFAAAABnd4U3dhcAUAAAAGd3hTd2FwBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAGHh0blN3YXBQYXJ0M0ZpbmFsaXplU3dhcAAAAAADCQEAAAACIT0AAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAABN4dG5Td2FwU3RhdGVFbnVtS2V5BQAAACRjYXNlWHRuU3dhcFN0YXRlRXhjaGFuZ2VSZXdhcmRzT25EZXgJAAACAAAAAQIAAAAlV3Jvbmcgc3RhdGUsIG11c3QgYmUgRXhjaGFuZ2UgcmV3YXJkcwMJAABnAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQUAAAAZeHRuU3dhcEV4Y2hhbmdlQmxvY2tJZEtleQUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAFU11c3Qgd2FpdCBmb3IgMSBibG9jawQAAAAXeHRuQW1vdW50QmVmb3JlRXhjaGFuZ2UJAQAAABFAZXh0ck5hdGl2ZSgxMDU1KQAAAAEFAAAAHnh0blN3YXBYdG5CYWxhbmNlQXRFeGNoYW5nZUtleQQAAAAKeHRuU3dhcHBlZAkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQUAAAAaeHRuU3dhcFh0blN3YXBwZWRBbW91bnRLZXkEAAAAEGN1cnJlbnRYdG5BbW91bnQJAAPwAAAAAgUAAAAEdGhpcwUAAAAKeHRuQXNzZXRJZAQAAAAGcmV3YXJkCQAAZQAAAAIFAAAAEGN1cnJlbnRYdG5BbW91bnQJAABkAAAAAgUAAAAXeHRuQW1vdW50QmVmb3JlRXhjaGFuZ2UFAAAACnh0blN3YXBwZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAHkNVUlJFTlRfU1dBUF9YVE5fUkVXQVJEX0FNT1VOVAUAAAAGcmV3YXJkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABN4dG5Td2FwU3RhdGVFbnVtS2V5BQAAABRjYXNlWHRuU3dhcFN0YXRlSWRsZQUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXlCeQ2K", "height": 3589821, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6qpBqzPYvuKdgeGxnAkWchH6mB2T7zpsYVUrvHFLctqa Next: 3i54McQNUGxwBBJrBb38dvMEmQng8JgfRU2xSxvVe6kR Diff:
Old | New | Differences | |
---|---|---|---|
128 | 128 | ||
129 | 129 | @Callable(i) | |
130 | 130 | func testDexExchange () = { | |
131 | - | let wxSwap = invoke(Address(dexContract), "exchangeThenTransfer", [ | |
131 | + | let wxSwap = invoke(Address(dexContract), "exchangeThenTransfer", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", toString(this), 0], [AttachedPayment(wxAssetId, 1000000000)]) | |
132 | 132 | if ((wxSwap == wxSwap)) | |
133 | 133 | then nil | |
134 | 134 | else throw("Strict value is not equal to itself.") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let dexContract = base58'3PLPCb3wF2H2gtzohoAjeWcGaMKEiJvtE5X' | |
5 | 5 | ||
6 | 6 | let neutrinoContract = base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo' | |
7 | 7 | ||
8 | 8 | let neutrinoStakingAddress = base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C' | |
9 | 9 | ||
10 | 10 | let xtnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
11 | 11 | ||
12 | 12 | let surfAssetId = base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL' | |
13 | 13 | ||
14 | 14 | let wxAssetId = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on' | |
15 | 15 | ||
16 | 16 | let caseXtnSwapStateIdle = 0 | |
17 | 17 | ||
18 | 18 | let caseXtnSwapStateXtnToRewards = 1 | |
19 | 19 | ||
20 | 20 | let caseXtnSwapStateExchangeRewardsOnDex = 2 | |
21 | 21 | ||
22 | 22 | let xtnSwapStateEnumKey = "xtnSwapStateEnum" | |
23 | 23 | ||
24 | 24 | let xtnSwapBlockIdKey = "xtnSwapBlockId" | |
25 | 25 | ||
26 | 26 | let xtnSwapTransactionIdKey = "xtnSwapTransactionId" | |
27 | 27 | ||
28 | 28 | let xtnSwapPriceIndexKey = "xtnSwapPriceIndex" | |
29 | 29 | ||
30 | 30 | let xtnSwapXtnSwappedAmountKey = "xtnSwapXtnSwappedAmount" | |
31 | 31 | ||
32 | 32 | let xtnSwapWavesBalanceAtSwapKey = "xtnSwapWavesBalanceAtSwap" | |
33 | 33 | ||
34 | 34 | let xtnSwapWxBalanceAtSwapKey = "xtnSwapWxBalanceAtSwap" | |
35 | 35 | ||
36 | 36 | let xtnSwapXtnBalanceAtExchangeKey = "xtnSwapXtnBalanceAtExchange" | |
37 | 37 | ||
38 | 38 | let xtnSwapExchangeBlockIdKey = "xtnSwapExchangeBlockId" | |
39 | 39 | ||
40 | 40 | @Callable(i) | |
41 | 41 | func stakeToNeutrino () = { | |
42 | 42 | let result = invoke(Address(neutrinoStakingAddress), "stake", nil, [AttachedPayment(surfAssetId, 4000000000)]) | |
43 | 43 | if ((result == result)) | |
44 | 44 | then nil | |
45 | 45 | else throw("Strict value is not equal to itself.") | |
46 | 46 | } | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | ||
50 | 50 | @Callable(i) | |
51 | 51 | func constructor () = [IntegerEntry(xtnSwapStateEnumKey, caseXtnSwapStateIdle)] | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | ||
55 | 55 | @Callable(i) | |
56 | 56 | func xtnSwapPart1swapXTNFromNeutrino () = if ((getIntegerValue(xtnSwapStateEnumKey) != caseXtnSwapStateIdle)) | |
57 | 57 | then throw("Wrong state, must be Idle") | |
58 | 58 | else { | |
59 | 59 | let result = invoke(Address(neutrinoContract), "swapParamsByUserSYSREADONLY", [toString(this), 0], nil) | |
60 | 60 | if ((result == result)) | |
61 | 61 | then match result { | |
62 | 62 | case tuple: (Int, Int, Int, Int, Int, Int, Int) => | |
63 | 63 | if ((tuple._3 > 0)) | |
64 | 64 | then throw((("Time is not come yet, you need to wait " + toString(tuple._3)) + " blocks")) | |
65 | 65 | else { | |
66 | 66 | let maxSwapAmount = tuple._7 | |
67 | 67 | if ((1000000 > maxSwapAmount)) | |
68 | 68 | then throw("Min XTN amount to swap is 1, stake more SURF") | |
69 | 69 | else if ((maxSwapAmount > assetBalance(this, xtnAssetId))) | |
70 | 70 | then throw("XTN Balance on contract is smaller than max swap amount, increase your balance") | |
71 | 71 | else { | |
72 | 72 | let currentWavesBalance = wavesBalance(this) | |
73 | 73 | let currentWXBalance = assetBalance(this, wxAssetId) | |
74 | 74 | let swapNeutrinoToAssets = invoke(Address(neutrinoContract), "swapNeutrinoToBasket", nil, [AttachedPayment(xtnAssetId, maxSwapAmount)]) | |
75 | 75 | if ((swapNeutrinoToAssets == swapNeutrinoToAssets)) | |
76 | 76 | then { | |
77 | 77 | let priceIndex = (getIntegerValue(Address(base58'3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP'), "price_index") + 1) | |
78 | 78 | [IntegerEntry(xtnSwapBlockIdKey, height), StringEntry(xtnSwapTransactionIdKey, toBase58String(i.transactionId)), IntegerEntry(xtnSwapPriceIndexKey, priceIndex), IntegerEntry(xtnSwapXtnSwappedAmountKey, maxSwapAmount), IntegerEntry(xtnSwapWavesBalanceAtSwapKey, currentWavesBalance.available), IntegerEntry(xtnSwapWxBalanceAtSwapKey, currentWXBalance), IntegerEntry(xtnSwapStateEnumKey, caseXtnSwapStateXtnToRewards)] | |
79 | 79 | } | |
80 | 80 | else throw("Strict value is not equal to itself.") | |
81 | 81 | } | |
82 | 82 | } | |
83 | 83 | case _ => | |
84 | 84 | throw("Incorrect data from neutrino smart contract") | |
85 | 85 | } | |
86 | 86 | else throw("Strict value is not equal to itself.") | |
87 | 87 | } | |
88 | 88 | ||
89 | 89 | ||
90 | 90 | ||
91 | 91 | @Callable(i) | |
92 | 92 | func xtnSwapPart2exchangeXtnSwapRewardsOnDex () = if ((getIntegerValue(xtnSwapStateEnumKey) != caseXtnSwapStateXtnToRewards)) | |
93 | 93 | then throw("Wrong state, must be XtnToRewards") | |
94 | 94 | else if ((getIntegerValue(xtnSwapBlockIdKey) >= height)) | |
95 | 95 | then throw("Must wait for 1 block") | |
96 | 96 | else { | |
97 | 97 | let swapTransationId = getStringValue(xtnSwapTransactionIdKey) | |
98 | 98 | let swapPriceIndex = getIntegerValue(xtnSwapPriceIndexKey) | |
99 | 99 | let withdraw_res = invoke(Address(neutrinoContract), "withdraw", [toString(this), swapPriceIndex, swapTransationId], nil) | |
100 | 100 | if ((withdraw_res == withdraw_res)) | |
101 | 101 | then { | |
102 | 102 | let wavesBalanceAtSwap = getIntegerValue(xtnSwapWavesBalanceAtSwapKey) | |
103 | 103 | let wxBalanceAtSwap = getIntegerValue(xtnSwapWxBalanceAtSwapKey) | |
104 | 104 | let currentWavesBalance = wavesBalance(this) | |
105 | 105 | let currentWXBalance = assetBalance(this, wxAssetId) | |
106 | 106 | let wavesRewards = (currentWavesBalance.available - wavesBalanceAtSwap) | |
107 | 107 | let wxRewards = (currentWXBalance - wxBalanceAtSwap) | |
108 | 108 | if ((wavesRewards > 0)) | |
109 | 109 | then { | |
110 | 110 | let wavesSwap = invoke(Address(dexContract), "exchangeThenTransfer", [toBase58String(xtnAssetId), toString(this), 0], [AttachedPayment(unit, if ((wavesRewards > 0)) | |
111 | 111 | then wavesRewards | |
112 | 112 | else 0)]) | |
113 | 113 | if ((wavesSwap == wavesSwap)) | |
114 | 114 | then nil | |
115 | 115 | else throw("Strict value is not equal to itself.") | |
116 | 116 | } | |
117 | 117 | else { | |
118 | 118 | let wxSwap = invoke(Address(dexContract), "exchangeThenTransfer", [toBase58String(xtnAssetId), toString(this), 0], [AttachedPayment(wxAssetId, wxRewards)]) | |
119 | 119 | if ((wxSwap == wxSwap)) | |
120 | 120 | then [IntegerEntry(xtnSwapXtnBalanceAtExchangeKey, assetBalance(this, xtnAssetId)), IntegerEntry(xtnSwapExchangeBlockIdKey, height), IntegerEntry(xtnSwapStateEnumKey, caseXtnSwapStateExchangeRewardsOnDex)] | |
121 | 121 | else throw("Strict value is not equal to itself.") | |
122 | 122 | } | |
123 | 123 | } | |
124 | 124 | else throw("Strict value is not equal to itself.") | |
125 | 125 | } | |
126 | 126 | ||
127 | 127 | ||
128 | 128 | ||
129 | 129 | @Callable(i) | |
130 | 130 | func testDexExchange () = { | |
131 | - | let wxSwap = invoke(Address(dexContract), "exchangeThenTransfer", [ | |
131 | + | let wxSwap = invoke(Address(dexContract), "exchangeThenTransfer", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", toString(this), 0], [AttachedPayment(wxAssetId, 1000000000)]) | |
132 | 132 | if ((wxSwap == wxSwap)) | |
133 | 133 | then nil | |
134 | 134 | else throw("Strict value is not equal to itself.") | |
135 | 135 | } | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | ||
139 | 139 | @Callable(i) | |
140 | 140 | func xtnSwapPart3FinalizeSwap () = if ((getIntegerValue(xtnSwapStateEnumKey) != caseXtnSwapStateExchangeRewardsOnDex)) | |
141 | 141 | then throw("Wrong state, must be Exchange rewards") | |
142 | 142 | else if ((getIntegerValue(xtnSwapExchangeBlockIdKey) >= height)) | |
143 | 143 | then throw("Must wait for 1 block") | |
144 | 144 | else { | |
145 | 145 | let xtnAmountBeforeExchange = getIntegerValue(xtnSwapXtnBalanceAtExchangeKey) | |
146 | 146 | let xtnSwapped = getIntegerValue(xtnSwapXtnSwappedAmountKey) | |
147 | 147 | let currentXtnAmount = assetBalance(this, xtnAssetId) | |
148 | 148 | let reward = (currentXtnAmount - (xtnAmountBeforeExchange + xtnSwapped)) | |
149 | 149 | [IntegerEntry("CURRENT_SWAP_XTN_REWARD_AMOUNT", reward), IntegerEntry(xtnSwapStateEnumKey, caseXtnSwapStateIdle)] | |
150 | 150 | } | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | @Verifier(tx) | |
154 | 154 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
155 | 155 |
github/deemru/w8io/6500d08 49.72 ms ◑