tx · 7Bhc1EnmTMYBfgknNwLGBLdq1d3PfEkBMSUnTq1Ligkh 3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy: -0.01000000 Waves 2023.03.16 18:06 [3558300] smart account 3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy > SELF 0.00000000 Waves
{ "type": 13, "id": "7Bhc1EnmTMYBfgknNwLGBLdq1d3PfEkBMSUnTq1Ligkh", "fee": 1000000, "feeAssetId": null, "timestamp": 1678979174211, "version": 2, "chainId": 87, "sender": "3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy", "senderPublicKey": "9KXfR1iJDN9MLTf7rgrygpRA3HG53KCgWyxzqk4m25Qd", "proofs": [ "4Ci7MxSiDq9JbYmyT1ZPuujoTFectQVqfXhQqQKRFetD2uLxtsUZYzZsNqwPyPBKF2FCwGwcwY8VxuaCvJzHQM6Z" ], "script": "base64:BgKCBggCEgMKAQESBAoCCAEiGVdYX0xQX1dBVkVTX1VTRE5fQVNTRVRfSUQiFldYX0xQX1dYX1VTRE5fQVNTRVRfSUQiF1dYX1BPT0xfV0FWRVNfVVNETl9EQVBQIhVXWF9QT09MX1dYX1dBVkVTX0RBUFAiG05FVVRSSU5PX1JFU1RfUkVBRE9OTFlfREFQUCIVTkVVVFJJTk9fTUVUUklDU19EQVBQIg1ORVVUUklOT19NQUlOIg9ORVVUUklOT19PUkFDTEUiEE5FVVRSSU5PX0ZBQ1RPUlkiDVVTRE5fQVNTRVRfSUQiC1dYX0FTU0VUX0lEIgtCT1JST1dfREFQUCIJYXNBbnlMaXN0IgF2IgckbWF0Y2gwIgFsIgVhc0ludCIBeCIBdCIFYXNTdHIiE2ZpbmFsaXplV2F2ZXNUb1VzZG4iAWkiBHR4aWQiBUluZGV4IgN3YmIiBHd4YmIiBGRhdGEiCGRhdGFfYXJyIgxzd2FwRmluYWxpemUiA3diYSIEd3hiYSIGYW1vdW50IgVjYWxsMSIObHBUb2tlbkJhbGFuY2UiBWNhbGwyIghhbW91bnRXeCIFd2Jid3giBWNhbGwzIhBscFRva2VuQmFsYW5jZVd4IgVjYWxsNCIFd2Jhd3giEmFtb3VudFdhdmVzQWZ0ZXJXeCIFY2FsbDUiD2xwVG9rZW5CYWxhbmNlVyIFY2FsbDYiEWZpbmFsaXplV2F2ZXNPbmx5IgFhIg9uZXV0cmlub01ldHJpY3MiAkJSIgRjYWxsIhFuZXV0cmlub19kYXRhX2FyciIYYWxyZWFkeVN3YXBwZWRVbmRlckxpbWl0IhVtYXhBdmFpbGFibGVUb1N3YXBOb3ciEWFtb3VuT2ZVc2RuVG9Td2FwIgZib3Jyb3ciEnN3YXBVc2RuVG9XYXZlc19TQyIUYmFsYW5jZV91bmxvY2tfYmxvY2siBWluZGV4Ihx3eE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIgJ0eCIGdmVyaWZ5EQABYQEgXedtbkamxzmxtK4hQ1NqaJeqmQ+fWxX6vGpRDRxJGSAAAWIBIJ8zEO+NreeRGgbC3BjYJ4MQg6r17OmSQeqIVeLgqaeRAAFjCQEHQWRkcmVzcwEBGgFX7UefzUI8k75LIc37An4fyC37loB6w699AAFkCQEHQWRkcmVzcwEBGgFXmkQFmJm8tKiQ5rdVb7cYKMuIhtMFfR9WAAFlCQEHQWRkcmVzcwEBGgFXNpjMBVfHrm4Dx/V/JlVDiE2uH9ead1JRAAFmCQEHQWRkcmVzcwEBGgFXOOSmjvphewk9IizfdFuz4IiynRUPOhS2AAFnCQEHQWRkcmVzcwEBGgFXcARipkeb6a1WaJTL74WMMIIgKJoIFJayAAFoCQEHQWRkcmVzcwEBGgFXI7OtElyTpMrsOf5PRtbNVk0t+xD7Y5h6AAFpCQEHQWRkcmVzcwEBGgFXeFveir5RKq6LMepvE5AlvvSpuKK7CQJBAAFqASC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QABawEgkwEcq6nHbiVXzmaecba9qmv4POhYCyru2aBOuzzcFLEAAWwJAQdBZGRyZXNzAQEaAVcU3JJZoA9M3cfagw1Midl0Q2S2hgj44ncBAW0BAW4EAW8FAW4DCQABAgUBbwIJTGlzdFtBbnldBAFwBQFvBQFwCQACAQIEI2VycgEBcQEBbgQBbwUBbgMJAAECBQFvAgNJbnQEAXIFAW8FAXIEAXMFAW8JAAIBAgQjZXJyAQF0AQFuBAFvBQFuAwkAAQIFAW8CBlN0cmluZwQBcgUBbwUBcgQBcwUBbwkAAgECBCNlcnIBAXUDAXYBdwF4AwkBAiE9AggFAXYGY2FsbGVyBQR0aGlzCQACAQILTm90IGFsbG93ZWQEAXkICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFAXkFAXkEAXoJAPAHAgUEdGhpcwUBawMJAAACBQF6BQF6BAFBCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgIFc3dhcF8FAXcCCF9QRU5ESU5HBAFCCQC1CQIFAUECAV8EAUMJAPwHBAUBZwIId2l0aGRyYXcJAMwIAgkApQgBBQR0aGlzCQDMCAIFAXgJAMwIAgUBdwUDbmlsBQNuaWwDCQAAAgUBQwUBQwQBRAgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQAAAgUBRAUBRAQBRQkA8AcCBQR0aGlzBQFrAwkAAAIFAUUFAUUEAUYJAGUCBQFEBQF5AwkAZwIAAAUBRgkAAgECD05vdGhpbmcgdG8gc3dhcAQBRwkA/AcEBQFjAglwdXRPbmVUa24JAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQJAGUCBQFGAMCEPQUDbmlsAwkAAAIFAUcFAUcEAUgJAPAHAgUEdGhpcwUBYQQBSQkA/AcEBQFjAglnZXRPbmVUa24JAMwIAgkA2AQBBQFqCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQFhBQFIBQNuaWwDCQAAAgUBSQUBSQQBSgkAZQIFAUUFAXoEAUsICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFAUsFAUsDCQBnAgAABQFKCQACAQIPTm90aGluZyB0byBzd2FwBAFMCQD8BwQFAWQCCXB1dE9uZVRrbgkAzAgCAAEJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUBawUBSgUDbmlsAwkAAAIFAUwFAUwEAU0JAPAHAgUEdGhpcwUBYgQBTgkA/AcEBQFkAglnZXRPbmVUa24JAMwIAgIFV0FWRVMJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAWIFAU0FA25pbAMJAAACBQFOBQFOBAFPCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQMJAAACBQFPBQFPBAFQCQBlAgUBTwUBSwMJAGcCAAAFAVAJAAIBAg9Ob3RoaW5nIHRvIHN3YXAEAVEJAPwHBAUBYwIJcHV0T25lVGtuCQDMCAIAAQkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0CQBlAgUBUADAhD0FA25pbAMJAAACBQFRBQFRBAFSCQDwBwIFBHRoaXMFAWEEAVMJAPwHBAUBYwIJZ2V0T25lVGtuCQDMCAIJANgEAQUBagkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUBYQUBUgUDbmlsAwkAAAIFAVMFAVMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBXN3YXBfBQF3AghfUEVORElORwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIFc3dhcF8FAXcCCV9GSU5JU0hFRAUBQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFsCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBQgADAAAFAWoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEBVAMBdgF3AXgDCQECIT0CCAUBdgZjYWxsZXIFBHRoaXMJAAIBAgtOb3QgYWxsb3dlZAQBQQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCsAgICBXN3YXBfBQF3AghfUEVORElORwQBQwkA/AcEBQFnAgh3aXRoZHJhdwkAzAgCCQClCAEFBHRoaXMJAMwIAgUBeAkAzAgCBQF3BQNuaWwFA25pbAMJAAACBQFDBQFDCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgVzd2FwXwUBdwIIX1BFTkRJTkcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXN3YXBfBQF3AglfRklOSVNIRUQFAUEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgIBdgELdXNkblRvV2F2ZXMBAVUDCQECIT0CCAUBdgZjYWxsZXIFBHRoaXMJAAIBAgtOb3QgYWxsb3dlZAQBRgUBVQQBdwkA2AQBCAUBdg10cmFuc2FjdGlvbklkBAFWCQEBbQEJAPwHBAUBZgIaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFA25pbAUDbmlsAwkAAAIFAVYFAVYEAVcJAQFxAQkAkQMCBQFWAAgEAVgJAQF0AQkA/AcEBQFlAhBzd2FwSW5mb1JFQURPTkxZCQDMCAICIzNQRzdDSHZCYXRIcENod204cmVINzR3ZkV3azFQSGM4UnF5BQNuaWwFA25pbAMJAAACBQFYBQFYBAFZCQC1CQIFAVgCAl9fBAFaCQEBcQEJALYJAQkAkQMCBQFZAAsEAmFhCQEBcQEJALYJAQkAkQMCBQFZAAoDCQECIT0CBQFaAAAJAAIBAg5DYW4ndCBzd2FwIHlldAQCYWIDCQBmAgUBRgUCYWEFAmFhBQFGBAJhYwkA/AcEBQFsAgZib3Jyb3cJAMwIAgUCYWIFA25pbAUDbmlsAwkAAAIFAmFjBQJhYwQCYWQJAPwHBAUBZwIUc3dhcE5ldXRyaW5vVG9CYXNrZXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUBagUCYWIFA25pbAMJAAACBQJhZAUCYWQEAmFlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQFnCQCsAgICFWJhbGFuY2VfdW5sb2NrX2Jsb2NrXwkApQgBBQR0aGlzBAJhZgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFAWgCC3ByaWNlX2luZGV4AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXN3YXBfBQF3AghfUEVORElORwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUCYWYCAV8JAKQDAQUGaGVpZ2h0AgFfBQF3AgFfCQCkAwEFAmFiAgFfCQCkAwEFAmFlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BdgEIZmluYWxpemUCAXcBeAMJAQIhPQIIBQF2BmNhbGxlcgUEdGhpcwkAAgECC05vdCBhbGxvd2VkBAJhZwkBEUBleHRyTmF0aXZlKDEwNTEpAgUBaQIeJXNfX29uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkAwUCYWcJAQFUAwUBdgUBdwUBeAkBAXUDBQF2BQF3BQF4AQJhaAECYWkACQDIEwMIBQJhaAlib2R5Qnl0ZXMJAJEDAggFAmFoBnByb29mcwAACAUCYWgPc2VuZGVyUHVibGljS2V5y9HOew==", "height": 3558300, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GuzSt8nFhAPBKttxp3s5RnbcVfWvAfzeXH7o8htbvr2K Next: HiinFEgBbsSxBuKKifsDZaTmHqGK2Hyvdx9zTbWnnGxT Diff:
Old | New | Differences | |
---|---|---|---|
158 | 158 | if ((neutrinoMetrics == neutrinoMetrics)) | |
159 | 159 | then { | |
160 | 160 | let BR = asInt(neutrinoMetrics[8]) | |
161 | - | if ((BR > 100500)) | |
161 | + | let call = asStr(invoke(NEUTRINO_REST_READONLY_DAPP, "swapInfoREADONLY", ["3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy"], nil)) | |
162 | + | if ((call == call)) | |
162 | 163 | then { | |
163 | - | let | |
164 | - | | |
165 | - | | |
166 | - | | |
167 | - | | |
168 | - | | |
169 | - | if (( | |
170 | - | then | |
171 | - | else | |
172 | - | ||
173 | - | | |
174 | - | | |
175 | - | let | |
176 | - | if (( | |
164 | + | let neutrino_data_arr = split(call, "__") | |
165 | + | let alreadySwappedUnderLimit = asInt(parseInt(neutrino_data_arr[11])) | |
166 | + | let maxAvailableToSwapNow = asInt(parseInt(neutrino_data_arr[10])) | |
167 | + | if ((alreadySwappedUnderLimit != 0)) | |
168 | + | then throw("Can't swap yet") | |
169 | + | else { | |
170 | + | let amounOfUsdnToSwap = if ((amount > maxAvailableToSwapNow)) | |
171 | + | then maxAvailableToSwapNow | |
172 | + | else amount | |
173 | + | let borrow = invoke(BORROW_DAPP, "borrow", [amounOfUsdnToSwap], nil) | |
174 | + | if ((borrow == borrow)) | |
175 | + | then { | |
176 | + | let swapUsdnToWaves_SC = invoke(NEUTRINO_MAIN, "swapNeutrinoToBasket", nil, [AttachedPayment(USDN_ASSET_ID, amounOfUsdnToSwap)]) | |
177 | + | if ((swapUsdnToWaves_SC == swapUsdnToWaves_SC)) | |
177 | 178 | then { | |
178 | - | let swapUsdnToWaves_SC = invoke(NEUTRINO_MAIN, "swapNeutrinoToBasket", nil, [AttachedPayment(USDN_ASSET_ID, amounOfUsdnToSwap)]) | |
179 | - | if ((swapUsdnToWaves_SC == swapUsdnToWaves_SC)) | |
180 | - | then { | |
181 | - | let balance_unlock_block = getIntegerValue(NEUTRINO_MAIN, ("balance_unlock_block_" + toString(this))) | |
182 | - | let index = (getIntegerValue(NEUTRINO_ORACLE, "price_index") + 1) | |
179 | + | let balance_unlock_block = getIntegerValue(NEUTRINO_MAIN, ("balance_unlock_block_" + toString(this))) | |
180 | + | let index = (getIntegerValue(NEUTRINO_ORACLE, "price_index") + 1) | |
183 | 181 | [StringEntry((("swap_" + txid) + "_PENDING"), ((((((((toString(index) + "_") + toString(height)) + "_") + txid) + "_") + toString(amounOfUsdnToSwap)) + "_") + toString(balance_unlock_block)))] | |
184 | - | } | |
185 | - | else throw("Strict value is not equal to itself.") | |
186 | 182 | } | |
187 | 183 | else throw("Strict value is not equal to itself.") | |
188 | 184 | } | |
185 | + | else throw("Strict value is not equal to itself.") | |
189 | 186 | } | |
190 | - | else throw("Strict value is not equal to itself.") | |
191 | 187 | } | |
192 | - | else throw(" | |
188 | + | else throw("Strict value is not equal to itself.") | |
193 | 189 | } | |
194 | 190 | else throw("Strict value is not equal to itself.") | |
195 | 191 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let WX_LP_WAVES_USDN_ASSET_ID = base58'7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1' | |
5 | 5 | ||
6 | 6 | let WX_LP_WX_USDN_ASSET_ID = base58'BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe' | |
7 | 7 | ||
8 | 8 | let WX_POOL_WAVES_USDN_DAPP = Address(base58'3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g') | |
9 | 9 | ||
10 | 10 | let WX_POOL_WX_WAVES_DAPP = Address(base58'3PFzaH2ghpwANHFgjeva83N1yxzErELx2eh') | |
11 | 11 | ||
12 | 12 | let NEUTRINO_REST_READONLY_DAPP = Address(base58'3P6uaG88jjcLYZQrvJHLWPbFFRnChnAzmcU') | |
13 | 13 | ||
14 | 14 | let NEUTRINO_METRICS_DAPP = Address(base58'3P77iUusNwMMzWFdC8f7bftwpHyG1PBs1gq') | |
15 | 15 | ||
16 | 16 | let NEUTRINO_MAIN = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo') | |
17 | 17 | ||
18 | 18 | let NEUTRINO_ORACLE = Address(base58'3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP') | |
19 | 19 | ||
20 | 20 | let NEUTRINO_FACTORY = Address(base58'3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv') | |
21 | 21 | ||
22 | 22 | let USDN_ASSET_ID = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
23 | 23 | ||
24 | 24 | let WX_ASSET_ID = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on' | |
25 | 25 | ||
26 | 26 | let BORROW_DAPP = Address(base58'3P3qCUfvbDUjRnjrfM5XFMrXrzxxiad94Ez') | |
27 | 27 | ||
28 | 28 | func asAnyList (v) = match v { | |
29 | 29 | case l: List[Any] => | |
30 | 30 | l | |
31 | 31 | case _ => | |
32 | 32 | throw("#err") | |
33 | 33 | } | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func asInt (v) = match v { | |
37 | 37 | case x: Int => | |
38 | 38 | x | |
39 | 39 | case t => | |
40 | 40 | throw("#err") | |
41 | 41 | } | |
42 | 42 | ||
43 | 43 | ||
44 | 44 | func asStr (v) = match v { | |
45 | 45 | case x: String => | |
46 | 46 | x | |
47 | 47 | case t => | |
48 | 48 | throw("#err") | |
49 | 49 | } | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func finalizeWavesToUsdn (i,txid,Index) = if ((i.caller != this)) | |
53 | 53 | then throw("Not allowed") | |
54 | 54 | else { | |
55 | 55 | let wbb = wavesBalance(this).available | |
56 | 56 | if ((wbb == wbb)) | |
57 | 57 | then { | |
58 | 58 | let wxbb = assetBalance(this, WX_ASSET_ID) | |
59 | 59 | if ((wxbb == wxbb)) | |
60 | 60 | then { | |
61 | 61 | let data = getStringValue((("swap_" + txid) + "_PENDING")) | |
62 | 62 | let data_arr = split(data, "_") | |
63 | 63 | let swapFinalize = invoke(NEUTRINO_MAIN, "withdraw", [toString(this), Index, txid], nil) | |
64 | 64 | if ((swapFinalize == swapFinalize)) | |
65 | 65 | then { | |
66 | 66 | let wba = wavesBalance(this).available | |
67 | 67 | if ((wba == wba)) | |
68 | 68 | then { | |
69 | 69 | let wxba = assetBalance(this, WX_ASSET_ID) | |
70 | 70 | if ((wxba == wxba)) | |
71 | 71 | then { | |
72 | 72 | let amount = (wba - wbb) | |
73 | 73 | if ((0 >= amount)) | |
74 | 74 | then throw("Nothing to swap") | |
75 | 75 | else { | |
76 | 76 | let call1 = invoke(WX_POOL_WAVES_USDN_DAPP, "putOneTkn", [1, false], [AttachedPayment(unit, (amount - 1000000))]) | |
77 | 77 | if ((call1 == call1)) | |
78 | 78 | then { | |
79 | 79 | let lpTokenBalance = assetBalance(this, WX_LP_WAVES_USDN_ASSET_ID) | |
80 | 80 | let call2 = invoke(WX_POOL_WAVES_USDN_DAPP, "getOneTkn", [toBase58String(USDN_ASSET_ID), 1], [AttachedPayment(WX_LP_WAVES_USDN_ASSET_ID, lpTokenBalance)]) | |
81 | 81 | if ((call2 == call2)) | |
82 | 82 | then { | |
83 | 83 | let amountWx = (wxba - wxbb) | |
84 | 84 | let wbbwx = wavesBalance(this).available | |
85 | 85 | if ((wbbwx == wbbwx)) | |
86 | 86 | then if ((0 >= amountWx)) | |
87 | 87 | then throw("Nothing to swap") | |
88 | 88 | else { | |
89 | 89 | let call3 = invoke(WX_POOL_WX_WAVES_DAPP, "putOneTkn", [1, false], [AttachedPayment(WX_ASSET_ID, amountWx)]) | |
90 | 90 | if ((call3 == call3)) | |
91 | 91 | then { | |
92 | 92 | let lpTokenBalanceWx = assetBalance(this, WX_LP_WX_USDN_ASSET_ID) | |
93 | 93 | let call4 = invoke(WX_POOL_WX_WAVES_DAPP, "getOneTkn", ["WAVES", 1], [AttachedPayment(WX_LP_WX_USDN_ASSET_ID, lpTokenBalanceWx)]) | |
94 | 94 | if ((call4 == call4)) | |
95 | 95 | then { | |
96 | 96 | let wbawx = wavesBalance(this).available | |
97 | 97 | if ((wbawx == wbawx)) | |
98 | 98 | then { | |
99 | 99 | let amountWavesAfterWx = (wbawx - wbbwx) | |
100 | 100 | if ((0 >= amountWavesAfterWx)) | |
101 | 101 | then throw("Nothing to swap") | |
102 | 102 | else { | |
103 | 103 | let call5 = invoke(WX_POOL_WAVES_USDN_DAPP, "putOneTkn", [1, false], [AttachedPayment(unit, (amountWavesAfterWx - 1000000))]) | |
104 | 104 | if ((call5 == call5)) | |
105 | 105 | then { | |
106 | 106 | let lpTokenBalanceW = assetBalance(this, WX_LP_WAVES_USDN_ASSET_ID) | |
107 | 107 | let call6 = invoke(WX_POOL_WAVES_USDN_DAPP, "getOneTkn", [toBase58String(USDN_ASSET_ID), 1], [AttachedPayment(WX_LP_WAVES_USDN_ASSET_ID, lpTokenBalanceW)]) | |
108 | 108 | if ((call6 == call6)) | |
109 | 109 | then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data), ScriptTransfer(BORROW_DAPP, valueOrElse(parseInt(data_arr[3]), 0), USDN_ASSET_ID)] | |
110 | 110 | else throw("Strict value is not equal to itself.") | |
111 | 111 | } | |
112 | 112 | else throw("Strict value is not equal to itself.") | |
113 | 113 | } | |
114 | 114 | } | |
115 | 115 | else throw("Strict value is not equal to itself.") | |
116 | 116 | } | |
117 | 117 | else throw("Strict value is not equal to itself.") | |
118 | 118 | } | |
119 | 119 | else throw("Strict value is not equal to itself.") | |
120 | 120 | } | |
121 | 121 | else throw("Strict value is not equal to itself.") | |
122 | 122 | } | |
123 | 123 | else throw("Strict value is not equal to itself.") | |
124 | 124 | } | |
125 | 125 | else throw("Strict value is not equal to itself.") | |
126 | 126 | } | |
127 | 127 | } | |
128 | 128 | else throw("Strict value is not equal to itself.") | |
129 | 129 | } | |
130 | 130 | else throw("Strict value is not equal to itself.") | |
131 | 131 | } | |
132 | 132 | else throw("Strict value is not equal to itself.") | |
133 | 133 | } | |
134 | 134 | else throw("Strict value is not equal to itself.") | |
135 | 135 | } | |
136 | 136 | else throw("Strict value is not equal to itself.") | |
137 | 137 | } | |
138 | 138 | ||
139 | 139 | ||
140 | 140 | func finalizeWavesOnly (i,txid,Index) = if ((i.caller != this)) | |
141 | 141 | then throw("Not allowed") | |
142 | 142 | else { | |
143 | 143 | let data = getStringValue(this, (("swap_" + txid) + "_PENDING")) | |
144 | 144 | let swapFinalize = invoke(NEUTRINO_MAIN, "withdraw", [toString(this), Index, txid], nil) | |
145 | 145 | if ((swapFinalize == swapFinalize)) | |
146 | 146 | then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data)] | |
147 | 147 | else throw("Strict value is not equal to itself.") | |
148 | 148 | } | |
149 | 149 | ||
150 | 150 | ||
151 | 151 | @Callable(i) | |
152 | 152 | func usdnToWaves (a) = if ((i.caller != this)) | |
153 | 153 | then throw("Not allowed") | |
154 | 154 | else { | |
155 | 155 | let amount = a | |
156 | 156 | let txid = toBase58String(i.transactionId) | |
157 | 157 | let neutrinoMetrics = asAnyList(invoke(NEUTRINO_METRICS_DAPP, "calcNeutinoMetricsREADONLY", nil, nil)) | |
158 | 158 | if ((neutrinoMetrics == neutrinoMetrics)) | |
159 | 159 | then { | |
160 | 160 | let BR = asInt(neutrinoMetrics[8]) | |
161 | - | if ((BR > 100500)) | |
161 | + | let call = asStr(invoke(NEUTRINO_REST_READONLY_DAPP, "swapInfoREADONLY", ["3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy"], nil)) | |
162 | + | if ((call == call)) | |
162 | 163 | then { | |
163 | - | let | |
164 | - | | |
165 | - | | |
166 | - | | |
167 | - | | |
168 | - | | |
169 | - | if (( | |
170 | - | then | |
171 | - | else | |
172 | - | ||
173 | - | | |
174 | - | | |
175 | - | let | |
176 | - | if (( | |
164 | + | let neutrino_data_arr = split(call, "__") | |
165 | + | let alreadySwappedUnderLimit = asInt(parseInt(neutrino_data_arr[11])) | |
166 | + | let maxAvailableToSwapNow = asInt(parseInt(neutrino_data_arr[10])) | |
167 | + | if ((alreadySwappedUnderLimit != 0)) | |
168 | + | then throw("Can't swap yet") | |
169 | + | else { | |
170 | + | let amounOfUsdnToSwap = if ((amount > maxAvailableToSwapNow)) | |
171 | + | then maxAvailableToSwapNow | |
172 | + | else amount | |
173 | + | let borrow = invoke(BORROW_DAPP, "borrow", [amounOfUsdnToSwap], nil) | |
174 | + | if ((borrow == borrow)) | |
175 | + | then { | |
176 | + | let swapUsdnToWaves_SC = invoke(NEUTRINO_MAIN, "swapNeutrinoToBasket", nil, [AttachedPayment(USDN_ASSET_ID, amounOfUsdnToSwap)]) | |
177 | + | if ((swapUsdnToWaves_SC == swapUsdnToWaves_SC)) | |
177 | 178 | then { | |
178 | - | let swapUsdnToWaves_SC = invoke(NEUTRINO_MAIN, "swapNeutrinoToBasket", nil, [AttachedPayment(USDN_ASSET_ID, amounOfUsdnToSwap)]) | |
179 | - | if ((swapUsdnToWaves_SC == swapUsdnToWaves_SC)) | |
180 | - | then { | |
181 | - | let balance_unlock_block = getIntegerValue(NEUTRINO_MAIN, ("balance_unlock_block_" + toString(this))) | |
182 | - | let index = (getIntegerValue(NEUTRINO_ORACLE, "price_index") + 1) | |
179 | + | let balance_unlock_block = getIntegerValue(NEUTRINO_MAIN, ("balance_unlock_block_" + toString(this))) | |
180 | + | let index = (getIntegerValue(NEUTRINO_ORACLE, "price_index") + 1) | |
183 | 181 | [StringEntry((("swap_" + txid) + "_PENDING"), ((((((((toString(index) + "_") + toString(height)) + "_") + txid) + "_") + toString(amounOfUsdnToSwap)) + "_") + toString(balance_unlock_block)))] | |
184 | - | } | |
185 | - | else throw("Strict value is not equal to itself.") | |
186 | 182 | } | |
187 | 183 | else throw("Strict value is not equal to itself.") | |
188 | 184 | } | |
185 | + | else throw("Strict value is not equal to itself.") | |
189 | 186 | } | |
190 | - | else throw("Strict value is not equal to itself.") | |
191 | 187 | } | |
192 | - | else throw(" | |
188 | + | else throw("Strict value is not equal to itself.") | |
193 | 189 | } | |
194 | 190 | else throw("Strict value is not equal to itself.") | |
195 | 191 | } | |
196 | 192 | ||
197 | 193 | ||
198 | 194 | ||
199 | 195 | @Callable(i) | |
200 | 196 | func finalize (txid,Index) = if ((i.caller != this)) | |
201 | 197 | then throw("Not allowed") | |
202 | 198 | else { | |
203 | 199 | let wxOneTokenOperationsDisabled = getBooleanValue(NEUTRINO_FACTORY, "%s__oneTokenOperationsDisabled") | |
204 | 200 | if (wxOneTokenOperationsDisabled) | |
205 | 201 | then finalizeWavesOnly(i, txid, Index) | |
206 | 202 | else finalizeWavesToUsdn(i, txid, Index) | |
207 | 203 | } | |
208 | 204 | ||
209 | 205 | ||
210 | 206 | @Verifier(tx) | |
211 | 207 | func verify () = sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
212 | 208 |
github/deemru/w8io/0e76f2f 65.25 ms ◑