tx · A9unqMdcz9HbUws5qVbrcFhqqvPJPGoBNRYvHNSwoiJv

3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy:  -0.01000000 Waves

2023.06.23 17:22 [3701013] smart account 3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy > SELF 0.00000000 Waves

{ "type": 13, "id": "A9unqMdcz9HbUws5qVbrcFhqqvPJPGoBNRYvHNSwoiJv", "fee": 1000000, "feeAssetId": null, "timestamp": 1687530137669, "version": 2, "chainId": 87, "sender": "3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy", "senderPublicKey": "9KXfR1iJDN9MLTf7rgrygpRA3HG53KCgWyxzqk4m25Qd", "proofs": [ "586GFehF2imQuXME291FpL4C2P9FMtyeNBBc9jHvzVv3ngYapAg6Mw6wXC4QDi8RNN9eUTTZuzXCbnTg6SyCeXGy" ], "script": "base64:BgLqBAgCEgMKAQESBAoCCAEiG05FVVRSSU5PX1JFU1RfUkVBRE9OTFlfREFQUCIVTkVVVFJJTk9fTUVUUklDU19EQVBQIg1ORVVUUklOT19NQUlOIg9ORVVUUklOT19PUkFDTEUiEE5FVVRSSU5PX0ZBQ1RPUlkiDVVTRE5fQVNTRVRfSUQiC1dYX0FTU0VUX0lEIg5WSVJFU19BU1NFVF9JRCILQk9SUk9XX0RBUFAiDFdYX1NXQVBfREFQUCIJYXNBbnlMaXN0IgF2IgckbWF0Y2gwIgFsIgVhc0ludCIBeCIBdCIFYXNTdHIiE2ZpbmFsaXplV2F2ZXNUb1VzZG4iAWkiBHR4aWQiBUluZGV4IgN3YmIiBHd4YmIiA3ZiYiIEZGF0YSIIZGF0YV9hcnIiDHN3YXBGaW5hbGl6ZSIDd2JhIgR3eGJhIgN2YmEiBmFtb3VudCIFY2FsbDEiCGFtb3VudFd4IgVjYWxsMiILYW1vdW50VmlyZXMiBWNhbGwzIhFmaW5hbGl6ZVdhdmVzT25seSIBYSIPbmV1dHJpbm9NZXRyaWNzIgJCUiIEY2FsbCIRbmV1dHJpbm9fZGF0YV9hcnIiGGFscmVhZHlTd2FwcGVkVW5kZXJMaW1pdCIVbWF4QXZhaWxhYmxlVG9Td2FwTm93IhFhbW91bk9mVXNkblRvU3dhcCIGYm9ycm93IhJzd2FwVXNkblRvV2F2ZXNfU0MiFGJhbGFuY2VfdW5sb2NrX2Jsb2NrIgVpbmRleCIcd3hPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCICdHgiBnZlcmlmeQ8AAWEJAQdBZGRyZXNzAQEaAVc2mMwFV8eubgPH9X8mVUOITa4f15p3UlEAAWIJAQdBZGRyZXNzAQEaAVc45KaO+mF7CT0iLN90W7PgiLKdFQ86FLYAAWMJAQdBZGRyZXNzAQEaAVdwBGKmR5vprVZolMvvhYwwgiAomggUlrIAAWQJAQdBZGRyZXNzAQEaAVcjs60SXJOkyuw5/k9G1s1WTS37EPtjmHoAAWUJAQdBZGRyZXNzAQEaAVd4W96KvlEqrosx6m8TkCW+9Km4orsJAkEAAWYBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAAFnASCTARyrqcduJVfOZp5xtr2qa/g86FgLKu7ZoE67PNwUsQABaAEguNriNwFicF+aqFuyGQy9D8Nlr3UGtlgt3QeTVqndqZcAAWkJAQdBZGRyZXNzAQEaAVcU3JJZoA9M3cfagw1Midl0Q2S2hgj44ncAAWoJAQdBZGRyZXNzAQEaAVcuKjU1sQ238Xk+4bdG0J50Uk17MdCDrgYBAWsBAWwEAW0FAWwDCQABAgUBbQIJTGlzdFtBbnldBAFuBQFtBQFuCQACAQIEI2VycgEBbwEBbAQBbQUBbAMJAAECBQFtAgNJbnQEAXAFAW0FAXAEAXEFAW0JAAIBAgQjZXJyAQFyAQFsBAFtBQFsAwkAAQIFAW0CBlN0cmluZwQBcAUBbQUBcAQBcQUBbQkAAgECBCNlcnIBAXMDAXQBdQF2AwkBAiE9AggFAXQGY2FsbGVyBQR0aGlzCQACAQILTm90IGFsbG93ZWQEAXcICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFAXcFAXcEAXgJAPAHAgUEdGhpcwUBZwMJAAACBQF4BQF4BAF5CQDwBwIFBHRoaXMFAWgDCQAAAgUBeQUBeQQBegkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICCQCsAgICBXN3YXBfBQF1AghfUEVORElORwQBQQkAtQkCBQF6AgFfBAFCCQD8BwQFAWMCCHdpdGhkcmF3CQDMCAIJAKUIAQUEdGhpcwkAzAgCBQF2CQDMCAIFAXUFA25pbAUDbmlsAwkAAAIFAUIFAUIEAUMICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFAUMFAUMEAUQJAPAHAgUEdGhpcwUBZwMJAAACBQFEBQFEBAFFCQDwBwIFBHRoaXMFAWgDCQAAAgUBRQUBRQQBRgkAZQIFAUMFAXcDCQBnAgAABQFGCQACAQIPTm90aGluZyB0byBzd2FwBAFHCQD8BwQFAWoCBHN3YXAJAMwIAgABCQDMCAIJANgEAQUBZgkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAkAZQIFAUYAwIQ9BQNuaWwDCQAAAgUBRwUBRwQBSAkAZQIFAUQFAXgDCQBnAgAABQFICQACAQIPTm90aGluZyB0byBzd2FwBAFJCQD8BwQFAWoCBHN3YXAJAMwIAgABCQDMCAIJANgEAQUBZgkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUBZwUBSAUDbmlsAwkAAAIFAUkFAUkEAUoJAGUCBQFFBQF5AwkAZwIAAAUBSgkAAgECD05vdGhpbmcgdG8gc3dhcAQBSwkA/AcEBQFqAgRzd2FwCQDMCAIAAQkAzAgCCQDYBAEFAWYJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAWgFAUoFA25pbAMJAAACBQFLBQFLCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgVzd2FwXwUBdQIIX1BFTkRJTkcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXN3YXBfBQF1AglfRklOSVNIRUQFAXoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEBTAMBdAF1AXYDCQECIT0CCAUBdAZjYWxsZXIFBHRoaXMJAAIBAgtOb3QgYWxsb3dlZAQBegkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICCQCsAgICBXN3YXBfBQF1AghfUEVORElORwQBQQkAtQkCBQF6AgFfBAFCCQD8BwQFAWMCCHdpdGhkcmF3CQDMCAIJAKUIAQUEdGhpcwkAzAgCBQF2CQDMCAIFAXUFA25pbAUDbmlsAwkAAAIFAUIFAUIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBXN3YXBfBQF1AghfUEVORElORwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIFc3dhcF8FAXUCCV9GSU5JU0hFRAUBegUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAgF0AQt1c2RuVG9XYXZlcwEBTQMJAQIhPQIIBQF0BmNhbGxlcgUEdGhpcwkAAgECC05vdCBhbGxvd2VkBAFGBQFNBAF1CQDYBAEIBQF0DXRyYW5zYWN0aW9uSWQEAU4JAQFrAQkA/AcEBQFiAhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwDCQAAAgUBTgUBTgQBTwkBAW8BCQCRAwIFAU4ACAQBUAkBAXIBCQD8BwQFAWECEHN3YXBJbmZvUkVBRE9OTFkJAMwIAgIjM1BHN0NIdkJhdEhwQ2h3bThyZUg3NHdmRXdrMVBIYzhScXkFA25pbAUDbmlsAwkAAAIFAVAFAVAEAVEJALUJAgUBUAICX18EAVIJAQFvAQkAtgkBCQCRAwIFAVEACwQBUwkBAW8BCQC2CQEJAJEDAgUBUQAKAwkBAiE9AgUBUgAACQACAQIOQ2FuJ3Qgc3dhcCB5ZXQEAVQDCQBmAgUBRgUBUwUBUwUBRgQBVQkA/AcEBQFpAgZib3Jyb3cJAMwIAgUBVAUDbmlsBQNuaWwDCQAAAgUBVQUBVQQBVgkA/AcEBQFjAhRzd2FwTmV1dHJpbm9Ub0Jhc2tldAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQFmBQFUBQNuaWwDCQAAAgUBVgUBVgQBVwkBEUBleHRyTmF0aXZlKDEwNTApAgUBYwkArAICAhViYWxhbmNlX3VubG9ja19ibG9ja18JAKUIAQUEdGhpcwQBWAkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFAWQCC3ByaWNlX2luZGV4AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXN3YXBfBQF1AghfUEVORElORwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUBWAIBXwkApAMBBQZoZWlnaHQCAV8FAXUCAV8JAKQDAQUBVAIBXwkApAMBBQFXBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BdAEIZmluYWxpemUCAXUBdgMJAQIhPQIIBQF0BmNhbGxlcgUEdGhpcwkAAgECC05vdCBhbGxvd2VkBAFZCQERQGV4dHJOYXRpdmUoMTA1MSkCBQFlAh4lc19fb25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQDBQFZCQEBTAMFAXQFAXUFAXYJAQFzAwUBdAUBdQUBdgEBWgECYWEACQDIEwMIBQFaCWJvZHlCeXRlcwkAkQMCCAUBWgZwcm9vZnMAAAgFAVoPc2VuZGVyUHVibGljS2V5bXJeCQ==", "height": 3701013, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3kVRr5ML8eFPkqUs1XUTsReSxiEsJaZRLyZkLLMfrnfM Next: 8FYTniYBTkzaaUvwfWv3zJ28vqJFGb6Ybqwva4WuYRxu Diff:
OldNewDifferences
9191 else {
9292 let call3 = invoke(WX_SWAP_DAPP, "swap", [1, toBase58String(USDN_ASSET_ID), toString(this)], [AttachedPayment(VIRES_ASSET_ID, amountVires)])
9393 if ((call3 == call3))
94- then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data), ScriptTransfer(BORROW_DAPP, valueOrElse(parseInt(data_arr[3]), 0), USDN_ASSET_ID)]
94+ then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data)]
9595 else throw("Strict value is not equal to itself.")
9696 }
9797 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NEUTRINO_REST_READONLY_DAPP = Address(base58'3P6uaG88jjcLYZQrvJHLWPbFFRnChnAzmcU')
55
66 let NEUTRINO_METRICS_DAPP = Address(base58'3P77iUusNwMMzWFdC8f7bftwpHyG1PBs1gq')
77
88 let NEUTRINO_MAIN = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo')
99
1010 let NEUTRINO_ORACLE = Address(base58'3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP')
1111
1212 let NEUTRINO_FACTORY = Address(base58'3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv')
1313
1414 let USDN_ASSET_ID = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1515
1616 let WX_ASSET_ID = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on'
1717
1818 let VIRES_ASSET_ID = base58'DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p'
1919
2020 let BORROW_DAPP = Address(base58'3P3qCUfvbDUjRnjrfM5XFMrXrzxxiad94Ez')
2121
2222 let WX_SWAP_DAPP = Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93')
2323
2424 func asAnyList (v) = match v {
2525 case l: List[Any] =>
2626 l
2727 case _ =>
2828 throw("#err")
2929 }
3030
3131
3232 func asInt (v) = match v {
3333 case x: Int =>
3434 x
3535 case t =>
3636 throw("#err")
3737 }
3838
3939
4040 func asStr (v) = match v {
4141 case x: String =>
4242 x
4343 case t =>
4444 throw("#err")
4545 }
4646
4747
4848 func finalizeWavesToUsdn (i,txid,Index) = if ((i.caller != this))
4949 then throw("Not allowed")
5050 else {
5151 let wbb = wavesBalance(this).available
5252 if ((wbb == wbb))
5353 then {
5454 let wxbb = assetBalance(this, WX_ASSET_ID)
5555 if ((wxbb == wxbb))
5656 then {
5757 let vbb = assetBalance(this, VIRES_ASSET_ID)
5858 if ((vbb == vbb))
5959 then {
6060 let data = getStringValue((("swap_" + txid) + "_PENDING"))
6161 let data_arr = split(data, "_")
6262 let swapFinalize = invoke(NEUTRINO_MAIN, "withdraw", [toString(this), Index, txid], nil)
6363 if ((swapFinalize == swapFinalize))
6464 then {
6565 let wba = wavesBalance(this).available
6666 if ((wba == wba))
6767 then {
6868 let wxba = assetBalance(this, WX_ASSET_ID)
6969 if ((wxba == wxba))
7070 then {
7171 let vba = assetBalance(this, VIRES_ASSET_ID)
7272 if ((vba == vba))
7373 then {
7474 let amount = (wba - wbb)
7575 if ((0 >= amount))
7676 then throw("Nothing to swap")
7777 else {
7878 let call1 = invoke(WX_SWAP_DAPP, "swap", [1, toBase58String(USDN_ASSET_ID), toString(this)], [AttachedPayment(unit, (amount - 1000000))])
7979 if ((call1 == call1))
8080 then {
8181 let amountWx = (wxba - wxbb)
8282 if ((0 >= amountWx))
8383 then throw("Nothing to swap")
8484 else {
8585 let call2 = invoke(WX_SWAP_DAPP, "swap", [1, toBase58String(USDN_ASSET_ID), toString(this)], [AttachedPayment(WX_ASSET_ID, amountWx)])
8686 if ((call2 == call2))
8787 then {
8888 let amountVires = (vba - vbb)
8989 if ((0 >= amountVires))
9090 then throw("Nothing to swap")
9191 else {
9292 let call3 = invoke(WX_SWAP_DAPP, "swap", [1, toBase58String(USDN_ASSET_ID), toString(this)], [AttachedPayment(VIRES_ASSET_ID, amountVires)])
9393 if ((call3 == call3))
94- then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data), ScriptTransfer(BORROW_DAPP, valueOrElse(parseInt(data_arr[3]), 0), USDN_ASSET_ID)]
94+ then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data)]
9595 else throw("Strict value is not equal to itself.")
9696 }
9797 }
9898 else throw("Strict value is not equal to itself.")
9999 }
100100 }
101101 else throw("Strict value is not equal to itself.")
102102 }
103103 }
104104 else throw("Strict value is not equal to itself.")
105105 }
106106 else throw("Strict value is not equal to itself.")
107107 }
108108 else throw("Strict value is not equal to itself.")
109109 }
110110 else throw("Strict value is not equal to itself.")
111111 }
112112 else throw("Strict value is not equal to itself.")
113113 }
114114 else throw("Strict value is not equal to itself.")
115115 }
116116 else throw("Strict value is not equal to itself.")
117117 }
118118
119119
120120 func finalizeWavesOnly (i,txid,Index) = if ((i.caller != this))
121121 then throw("Not allowed")
122122 else {
123123 let data = getStringValue((("swap_" + txid) + "_PENDING"))
124124 let data_arr = split(data, "_")
125125 let swapFinalize = invoke(NEUTRINO_MAIN, "withdraw", [toString(this), Index, txid], nil)
126126 if ((swapFinalize == swapFinalize))
127127 then [DeleteEntry((("swap_" + txid) + "_PENDING")), StringEntry((("swap_" + txid) + "_FINISHED"), data)]
128128 else throw("Strict value is not equal to itself.")
129129 }
130130
131131
132132 @Callable(i)
133133 func usdnToWaves (a) = if ((i.caller != this))
134134 then throw("Not allowed")
135135 else {
136136 let amount = a
137137 let txid = toBase58String(i.transactionId)
138138 let neutrinoMetrics = asAnyList(invoke(NEUTRINO_METRICS_DAPP, "calcNeutinoMetricsREADONLY", nil, nil))
139139 if ((neutrinoMetrics == neutrinoMetrics))
140140 then {
141141 let BR = asInt(neutrinoMetrics[8])
142142 let call = asStr(invoke(NEUTRINO_REST_READONLY_DAPP, "swapInfoREADONLY", ["3PG7CHvBatHpChwm8reH74wfEwk1PHc8Rqy"], nil))
143143 if ((call == call))
144144 then {
145145 let neutrino_data_arr = split(call, "__")
146146 let alreadySwappedUnderLimit = asInt(parseInt(neutrino_data_arr[11]))
147147 let maxAvailableToSwapNow = asInt(parseInt(neutrino_data_arr[10]))
148148 if ((alreadySwappedUnderLimit != 0))
149149 then throw("Can't swap yet")
150150 else {
151151 let amounOfUsdnToSwap = if ((amount > maxAvailableToSwapNow))
152152 then maxAvailableToSwapNow
153153 else amount
154154 let borrow = invoke(BORROW_DAPP, "borrow", [amounOfUsdnToSwap], nil)
155155 if ((borrow == borrow))
156156 then {
157157 let swapUsdnToWaves_SC = invoke(NEUTRINO_MAIN, "swapNeutrinoToBasket", nil, [AttachedPayment(USDN_ASSET_ID, amounOfUsdnToSwap)])
158158 if ((swapUsdnToWaves_SC == swapUsdnToWaves_SC))
159159 then {
160160 let balance_unlock_block = getIntegerValue(NEUTRINO_MAIN, ("balance_unlock_block_" + toString(this)))
161161 let index = (getIntegerValue(NEUTRINO_ORACLE, "price_index") + 1)
162162 [StringEntry((("swap_" + txid) + "_PENDING"), ((((((((toString(index) + "_") + toString(height)) + "_") + txid) + "_") + toString(amounOfUsdnToSwap)) + "_") + toString(balance_unlock_block)))]
163163 }
164164 else throw("Strict value is not equal to itself.")
165165 }
166166 else throw("Strict value is not equal to itself.")
167167 }
168168 }
169169 else throw("Strict value is not equal to itself.")
170170 }
171171 else throw("Strict value is not equal to itself.")
172172 }
173173
174174
175175
176176 @Callable(i)
177177 func finalize (txid,Index) = if ((i.caller != this))
178178 then throw("Not allowed")
179179 else {
180180 let wxOneTokenOperationsDisabled = getBooleanValue(NEUTRINO_FACTORY, "%s__oneTokenOperationsDisabled")
181181 if (wxOneTokenOperationsDisabled)
182182 then finalizeWavesOnly(i, txid, Index)
183183 else finalizeWavesToUsdn(i, txid, Index)
184184 }
185185
186186
187187 @Verifier(tx)
188188 func verify () = sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
189189

github/deemru/w8io/3ef1775 
53.14 ms