tx · 7wjuwt5tsZ68Uysqtndt7STZ918DqssSBoHG7fwFjg4N

3N4Fa58WBBWv5MP92u6pA2g7xNYMpPLMvLx:  -0.01000000 Waves

2024.12.06 11:54 [3402569] smart account 3N4Fa58WBBWv5MP92u6pA2g7xNYMpPLMvLx > SELF 0.00000000 Waves

{ "type": 13, "id": "7wjuwt5tsZ68Uysqtndt7STZ918DqssSBoHG7fwFjg4N", "fee": 1000000, "feeAssetId": null, "timestamp": 1733475291355, "version": 2, "chainId": 84, "sender": "3N4Fa58WBBWv5MP92u6pA2g7xNYMpPLMvLx", "senderPublicKey": "9fRXUJPxTtF7P9bYTs5roJ4c5tzMiBmv93Kuf94JBnQQ", "proofs": [ "2hRKcqQtMrzzageG7pyPSbrMkbcj3h5RRWRcA82ZoH6tn2EfXMzoXKGd1mEYpyHtEubLjuVuDTJzTpEoNyPpiNx4" ], "script": "base64:BgIUCAISBAoCAQESBAoCAQESBAoCAQEMAA13eFBvb2xBZGRyZXNzCQEHQWRkcmVzcwEBGgFXwpqB3QBHc5r208SLwRlX4Ff1uMp3pHChABBzaW1wbGVBbW1BZGRyZXNzCQEHQWRkcmVzcwEBGgFX8TVzade+uoR7uZWuq4RsHviU5ek6RsEUAAV3YXZlcwUEdW5pdAAEdXNkdAEg4Ab+M2BRGawNofT8uvzf4LqfJWpjiEPmNOUmlPCdXw8AAmxwASDCLiMHWN0a+0SIgd4uCXqKdtYFXXiXAxiczjOiag47FgEKZ2V0QmFsYW5jZQECaWQEByRtYXRjaDAFAmlkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJAPAHAgUEdGhpcwUBYggJAO8HAQUEdGhpcwlhdmFpbGFibGUBDWFzc2V0VG9TdHJpbmcBAmlkBAckbWF0Y2gwBQJpZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWICBVdBVkVTAQxzd2FwT25XeFBvb2wCBWFzc2V0BmFtb3VudAQScmVjZWl2ZUFzc2V0U3RyaW5nCQENYXNzZXRUb1N0cmluZwEFBWFzc2V0BA1pbml0TFBCYWxhbmNlCQEKZ2V0QmFsYW5jZQEFAmxwAwkAAAIFDWluaXRMUEJhbGFuY2UFDWluaXRMUEJhbGFuY2UEBGludjEJAPwHBAUNd3hQb29sQWRkcmVzcwIJcHV0T25lVGtuCQDMCAIAAQkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQVhc3NldAUGYW1vdW50BQNuaWwDCQAAAgUEaW52MQUEaW52MQQKbHBSZWNlaXZlZAkAZQIJAQpnZXRCYWxhbmNlAQUCbHAFDWluaXRMUEJhbGFuY2UDCQAAAgUKbHBSZWNlaXZlZAUKbHBSZWNlaXZlZAQEaW52MgkA/AcEBQ13eFBvb2xBZGRyZXNzAglnZXRPbmVUa24JAMwIAgUScmVjZWl2ZUFzc2V0U3RyaW5nCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJscAUKbHBSZWNlaXZlZAUDbmlsAwkAAAIFBGludjIFBGludjIFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCWFyYml0cmFnZQMJc2VuZEFzc2V0BmFtb3VudAltaW5Qcm9maXQEDHJlY2VpdmVBc3NldAMJAAACBQlzZW5kQXNzZXQFBHVuaXQFBHVzZHQFBHVuaXQED2luaXRTZW5kQmFsYW5jZQkBCmdldEJhbGFuY2UBBQlzZW5kQXNzZXQDCQAAAgUPaW5pdFNlbmRCYWxhbmNlBQ9pbml0U2VuZEJhbGFuY2UEEmluaXRSZWNlaXZlQmFsYW5jZQkBCmdldEJhbGFuY2UBBQxyZWNlaXZlQXNzZXQDCQAAAgUSaW5pdFJlY2VpdmVCYWxhbmNlBRJpbml0UmVjZWl2ZUJhbGFuY2UEBGludjEJAPwHBAUQc2ltcGxlQW1tQWRkcmVzcwIEc3dhcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlzZW5kQXNzZXQFBmFtb3VudAUDbmlsAwkAAAIFBGludjEFBGludjEECHJlY2VpdmVkCQBlAgkBCmdldEJhbGFuY2UBBQxyZWNlaXZlQXNzZXQFEmluaXRSZWNlaXZlQmFsYW5jZQMJAAACBQhyZWNlaXZlZAUIcmVjZWl2ZWQEBGludjIJAQxzd2FwT25XeFBvb2wCBQxyZWNlaXZlQXNzZXQFCHJlY2VpdmVkAwkAAAIFBGludjIFBGludjIEBnByb2ZpdAkAZQIJAQpnZXRCYWxhbmNlAQUJc2VuZEFzc2V0BQ9pbml0U2VuZEJhbGFuY2UDCQAAAgUGcHJvZml0BQZwcm9maXQDCQBmAgUGcHJvZml0BQltaW5Qcm9maXQFA25pbAkAAgEJALkJAgkAzAgCAglubyBwcm9maXQJAMwIAgkBDWFzc2V0VG9TdHJpbmcBBQlzZW5kQXNzZXQJAMwIAgkApAMBBQZhbW91bnQJAMwIAgkApAMBBQltaW5Qcm9maXQJAMwIAgkApAMBBQZwcm9maXQFA25pbAIBIAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEQZ2V0V3hQb29sQmFsYW5jZQAEFGtleUFkZGl0aW9uYWxCYWxhbmNlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1zdGFrZWRCYWxhbmNlCQDMCAICBVdBVkVTBQNuaWwCAl9fBAt1c2R0QmFsYW5jZQkA8AcCBQ13eFBvb2xBZGRyZXNzBQR1c2R0BAh3QmFsYW5jZQkAZAIICQDvBwEFDXd4UG9vbEFkZHJlc3MJYXZhaWxhYmxlCQELdmFsdWVPckVsc2UCCQCaCAIFDXd4UG9vbEFkZHJlc3MFFGtleUFkZGl0aW9uYWxCYWxhbmNlAAAJAJQKAgUEdXNkdAUId0JhbGFuY2UBDWdldEFtbUJhbGFuY2UABAt1c2R0QmFsYW5jZQkA8AcCBRBzaW1wbGVBbW1BZGRyZXNzBQR1c2R0BAh3QmFsYW5jZQgJAO8HAQUQc2ltcGxlQW1tQWRkcmVzcwlhdmFpbGFibGUJAJQKAgULdXNkdEJhbGFuY2UFCHdCYWxhbmNlAQxjYWxjQmVzdERlYWwEAmExAmIxAmEyAmIyBAJwMgkAuQICCQC3AgIFAmExBQJhMgkAtwICBQJhMQUCYTIEBmExYTFiMgkAuQICCQC5AgIFAmExBQJhMgUCYjEEBHAxMTEJALkCAgkAuQICBQZhMWExYjIFAnAyBQJiMgQDcDExCQEKc3FydEJpZ0ludAQFBHAxMTEAAAAABQRET1dOBANwMTIJALgCAgkAvgIBBQZhMWExYjIJALkCAgkAuQICBQJhMgUCYTIFAmIxBAJwMQkAtwICBQNwMTEFA3AxMgQFYmVzdFgJALoCAgUCcDEFAnAyBQViZXN0WAMBaQECc3cCBmFtb3VudAltaW5Qcm9maXQEBWNoZWNrAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAMJAAACBQVjaGVjawUFY2hlY2sJAQlhcmJpdHJhZ2UDBQV3YXZlcwUGYW1vdW50BQltaW5Qcm9maXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQECc3UCBmFtb3VudAltaW5Qcm9maXQEBWNoZWNrAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAMJAAACBQVjaGVjawUFY2hlY2sJAQlhcmJpdHJhZ2UDBQR1c2R0BQZhbW91bnQFCW1pblByb2ZpdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQNzdXUCBmFtb3VudAltaW5Qcm9maXQEBWNoZWNrAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAMJAAACBQVjaGVjawUFY2hlY2sEA3JlcwkA/AcEBRBzaW1wbGVBbW1BZGRyZXNzAgxzd2FwUkVBRE9OTFkJAMwIAgIFV0FWRVMJAMwIAgUGYW1vdW50BQNuaWwFA25pbAQJbmV3QW1vdW50BAckbWF0Y2gwBQNyZXMDCQABAgUHJG1hdGNoMAIWKEludCwgSW50LCBCeXRlVmVjdG9yKQQBcgUHJG1hdGNoMAgFAXICXzEJAAIBAg9zb21ldGhpbmcgd3JvbmcEDG5ld01pblByb2ZpdAkAawMFCW1pblByb2ZpdAUJbmV3QW1vdW50BQZhbW91bnQJAQlhcmJpdHJhZ2UDBQR1c2R0BQluZXdBbW91bnQFDG5ld01pblByb2ZpdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgBKlvlD", "height": 3402569, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FuaC1U4VjupdMfWMiQGhteWSsaWkTL26vgh4CRoi8TrA Next: none Diff:
OldNewDifferences
108108 let p2 = ((a1 + a2) * (a1 + a2))
109109 let a1a1b2 = ((a1 * a2) * b1)
110110 let p111 = ((a1a1b2 * p2) * b2)
111- let p11 = sqrt(p111, 0, 0, DOWN)
111+ let p11 = sqrtBigInt(p111, 0, 0, DOWN)
112112 let p12 = (-(a1a1b2) - ((a2 * a2) * b1))
113113 let p1 = (p11 + p12)
114114 let bestX = (p1 / p2)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wxPoolAddress = Address(base58'3PKfrupEydU2nZAghVjZAfvCwMBkzuR1F52')
55
66 let simpleAmmAddress = Address(base58'3PPvHcJjESoUbf9LDpAxEhQKUnpqH1Ea29h')
77
88 let waves = unit
99
1010 let usdt = base58'G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC'
1111
1212 let lp = base58'E4zu2YxX1Tq8Y2nBcXZhh9gG1jctZitisnt6pyQhUBYH'
1313
1414 func getBalance (id) = match id {
1515 case b: ByteVector =>
1616 assetBalance(this, b)
1717 case _ =>
1818 wavesBalance(this).available
1919 }
2020
2121
2222 func assetToString (id) = match id {
2323 case b: ByteVector =>
2424 toBase58String(b)
2525 case _ =>
2626 "WAVES"
2727 }
2828
2929
3030 func swapOnWxPool (asset,amount) = {
3131 let receiveAssetString = assetToString(asset)
3232 let initLPBalance = getBalance(lp)
3333 if ((initLPBalance == initLPBalance))
3434 then {
3535 let inv1 = invoke(wxPoolAddress, "putOneTkn", [1, false], [AttachedPayment(asset, amount)])
3636 if ((inv1 == inv1))
3737 then {
3838 let lpReceived = (getBalance(lp) - initLPBalance)
3939 if ((lpReceived == lpReceived))
4040 then {
4141 let inv2 = invoke(wxPoolAddress, "getOneTkn", [receiveAssetString, 1], [AttachedPayment(lp, lpReceived)])
4242 if ((inv2 == inv2))
4343 then unit
4444 else throw("Strict value is not equal to itself.")
4545 }
4646 else throw("Strict value is not equal to itself.")
4747 }
4848 else throw("Strict value is not equal to itself.")
4949 }
5050 else throw("Strict value is not equal to itself.")
5151 }
5252
5353
5454 func arbitrage (sendAsset,amount,minProfit) = {
5555 let receiveAsset = if ((sendAsset == unit))
5656 then usdt
5757 else unit
5858 let initSendBalance = getBalance(sendAsset)
5959 if ((initSendBalance == initSendBalance))
6060 then {
6161 let initReceiveBalance = getBalance(receiveAsset)
6262 if ((initReceiveBalance == initReceiveBalance))
6363 then {
6464 let inv1 = invoke(simpleAmmAddress, "swap", nil, [AttachedPayment(sendAsset, amount)])
6565 if ((inv1 == inv1))
6666 then {
6767 let received = (getBalance(receiveAsset) - initReceiveBalance)
6868 if ((received == received))
6969 then {
7070 let inv2 = swapOnWxPool(receiveAsset, received)
7171 if ((inv2 == inv2))
7272 then {
7373 let profit = (getBalance(sendAsset) - initSendBalance)
7474 if ((profit == profit))
7575 then if ((profit > minProfit))
7676 then nil
7777 else throw(makeString(["no profit", assetToString(sendAsset), toString(amount), toString(minProfit), toString(profit)], " "))
7878 else throw("Strict value is not equal to itself.")
7979 }
8080 else throw("Strict value is not equal to itself.")
8181 }
8282 else throw("Strict value is not equal to itself.")
8383 }
8484 else throw("Strict value is not equal to itself.")
8585 }
8686 else throw("Strict value is not equal to itself.")
8787 }
8888 else throw("Strict value is not equal to itself.")
8989 }
9090
9191
9292 func getWxPoolBalance () = {
9393 let keyAdditionalBalance = makeString(["%s%s", "stakedBalance", "WAVES"], "__")
9494 let usdtBalance = assetBalance(wxPoolAddress, usdt)
9595 let wBalance = (wavesBalance(wxPoolAddress).available + valueOrElse(getInteger(wxPoolAddress, keyAdditionalBalance), 0))
9696 $Tuple2(usdt, wBalance)
9797 }
9898
9999
100100 func getAmmBalance () = {
101101 let usdtBalance = assetBalance(simpleAmmAddress, usdt)
102102 let wBalance = wavesBalance(simpleAmmAddress).available
103103 $Tuple2(usdtBalance, wBalance)
104104 }
105105
106106
107107 func calcBestDeal (a1,b1,a2,b2) = {
108108 let p2 = ((a1 + a2) * (a1 + a2))
109109 let a1a1b2 = ((a1 * a2) * b1)
110110 let p111 = ((a1a1b2 * p2) * b2)
111- let p11 = sqrt(p111, 0, 0, DOWN)
111+ let p11 = sqrtBigInt(p111, 0, 0, DOWN)
112112 let p12 = (-(a1a1b2) - ((a2 * a2) * b1))
113113 let p1 = (p11 + p12)
114114 let bestX = (p1 / p2)
115115 bestX
116116 }
117117
118118
119119 @Callable(i)
120120 func sw (amount,minProfit) = {
121121 let check = if ((i.caller == this))
122122 then true
123123 else throw("permission denied")
124124 if ((check == check))
125125 then arbitrage(waves, amount, minProfit)
126126 else throw("Strict value is not equal to itself.")
127127 }
128128
129129
130130
131131 @Callable(i)
132132 func su (amount,minProfit) = {
133133 let check = if ((i.caller == this))
134134 then true
135135 else throw("permission denied")
136136 if ((check == check))
137137 then arbitrage(usdt, amount, minProfit)
138138 else throw("Strict value is not equal to itself.")
139139 }
140140
141141
142142
143143 @Callable(i)
144144 func suu (amount,minProfit) = {
145145 let check = if ((i.caller == this))
146146 then true
147147 else throw("permission denied")
148148 if ((check == check))
149149 then {
150150 let res = invoke(simpleAmmAddress, "swapREADONLY", ["WAVES", amount], nil)
151151 let newAmount = match res {
152152 case r: (Int, Int, ByteVector) =>
153153 r._1
154154 case _ =>
155155 throw("something wrong")
156156 }
157157 let newMinProfit = fraction(minProfit, newAmount, amount)
158158 arbitrage(usdt, newAmount, newMinProfit)
159159 }
160160 else throw("Strict value is not equal to itself.")
161161 }
162162
163163

github/deemru/w8io/169f3d6 
25.31 ms