tx · 9t6j2cB5ADnDPrG7c9inXbhHWD2n4EKGKUjAcWxTAFAP 3PG9zikvUuEPfKAtTpDSkVyiSifN5jNikWV: -0.01000000 Waves 2024.03.12 23:18 [4081124] smart account 3PG9zikvUuEPfKAtTpDSkVyiSifN5jNikWV > SELF 0.00000000 Waves
{ "type": 13, "id": "9t6j2cB5ADnDPrG7c9inXbhHWD2n4EKGKUjAcWxTAFAP", "fee": 1000000, "feeAssetId": null, "timestamp": 1710274784760, "version": 2, "chainId": 87, "sender": "3PG9zikvUuEPfKAtTpDSkVyiSifN5jNikWV", "senderPublicKey": "C3EYvacxuKxmaVQR986ogUBpELa9JRsoqBPobmDF7ori", "proofs": [ "4HRab9CdZk3gt1ySq2GtnxcMqRUGjJmdZryFNHLSHHPneTqLvX1zYxsJKunXeuJDPKHBzBdaUPhxkLyXxVCuPKNt" ], "script": "base64:BgIUCAISBAoCAQESBAoCAQESBAoCAQEIAA13eFBvb2xBZGRyZXNzCQEHQWRkcmVzcwEBGgFX7jnQlQHOgHn8g3t2wRfy1m7iBadoSBR2ABBzaW1wbGVBbW1BZGRyZXNzCQEHQWRkcmVzcwEBGgFX8TVzade+uoR7uZWuq4RsHviU5ek6RsEUAAV3YXZlcwUEdW5pdAAEdXNkdAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kAAmxwASBPCJx7eu0YvnfLmHhu4b6v2hMqGHco2fEU/TBvwXS/sgEKZ2V0QmFsYW5jZQECaWQEByRtYXRjaDAFAmlkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJAPAHAgUEdGhpcwUBYggJAO8HAQUEdGhpcwlhdmFpbGFibGUBBnN3YXBXeAIFYXNzZXQGYW1vdW50BBJyZWNlaXZlQXNzZXRTdHJpbmcDCQAAAgUFYXNzZXQFBHVuaXQJANgEAQUEdXNkdAIFV0FWRVMEDWluaXRMUEJhbGFuY2UJAQpnZXRCYWxhbmNlAQUCbHADCQAAAgUNaW5pdExQQmFsYW5jZQUNaW5pdExQQmFsYW5jZQQEaW52MQkA/AcEBQ13eFBvb2xBZGRyZXNzAglwdXRPbmVUa24JAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBWFzc2V0BQZhbW91bnQFA25pbAMJAAACBQRpbnYxBQRpbnYxBApscFJlY2VpdmVkCQBlAgkBCmdldEJhbGFuY2UBBQJscAUNaW5pdExQQmFsYW5jZQMJAAACBQpscFJlY2VpdmVkBQpscFJlY2VpdmVkBARpbnYyCQD8BwQFDXd4UG9vbEFkZHJlc3MCCWdldE9uZVRrbgkAzAgCBRJyZWNlaXZlQXNzZXRTdHJpbmcJAMwIAgABBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmxwBQpscFJlY2VpdmVkBQNuaWwDCQAAAgUEaW52MgUEaW52MgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEJYXJiaXRyYWdlAwlzZW5kQXNzZXQGYW1vdW50CW1pblByb2ZpdAQMcmVjZWl2ZUFzc2V0AwkAAAIFCXNlbmRBc3NldAUEdW5pdAUEdXNkdAUEdW5pdAQPaW5pdFNlbmRCYWxhbmNlCQEKZ2V0QmFsYW5jZQEFCXNlbmRBc3NldAMJAAACBQ9pbml0U2VuZEJhbGFuY2UFD2luaXRTZW5kQmFsYW5jZQQSaW5pdFJlY2VpdmVCYWxhbmNlCQEKZ2V0QmFsYW5jZQEFDHJlY2VpdmVBc3NldAMJAAACBRJpbml0UmVjZWl2ZUJhbGFuY2UFEmluaXRSZWNlaXZlQmFsYW5jZQQEaW52MQkA/AcEBRBzaW1wbGVBbW1BZGRyZXNzAgRzd2FwBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCXNlbmRBc3NldAUGYW1vdW50BQNuaWwDCQAAAgUEaW52MQUEaW52MQQIcmVjZWl2ZWQJAGUCCQEKZ2V0QmFsYW5jZQEFDHJlY2VpdmVBc3NldAUSaW5pdFJlY2VpdmVCYWxhbmNlAwkAAAIFCHJlY2VpdmVkBQhyZWNlaXZlZAQEaW52MgkBBnN3YXBXeAIFDHJlY2VpdmVBc3NldAUIcmVjZWl2ZWQDCQAAAgUEaW52MgUEaW52MgQGcHJvZml0CQBlAgkBCmdldEJhbGFuY2UBBQlzZW5kQXNzZXQFD2luaXRTZW5kQmFsYW5jZQMJAAACBQZwcm9maXQFBnByb2ZpdAMJAGYCBQZwcm9maXQFCW1pblByb2ZpdAUDbmlsCQACAQIJbm8gcHJvZml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwFpAQJzdwIGYW1vdW50CW1pblByb2ZpdAQFY2hlY2sDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFBWNoZWNrBQVjaGVjawkBCWFyYml0cmFnZQMFBXdhdmVzBQZhbW91bnQFCW1pblByb2ZpdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQJzdQIGYW1vdW50CW1pblByb2ZpdAQFY2hlY2sDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFBWNoZWNrBQVjaGVjawkBCWFyYml0cmFnZQMFBHVzZHQFBmFtb3VudAUJbWluUHJvZml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBA3N1dQIGYW1vdW50CW1pblByb2ZpdAQFY2hlY2sDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFBWNoZWNrBQVjaGVjawQDcmVzCQD8BwQFEHNpbXBsZUFtbUFkZHJlc3MCDHN3YXBSRUFET05MWQkAzAgCAgVXQVZFUwkAzAgCBQZhbW91bnQFA25pbAUDbmlsBAluZXdBbW91bnQEByRtYXRjaDAFA3JlcwMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXIFByRtYXRjaDAIBQFyAl8xCQACAQIPc29tZXRoaW5nIHdyb25nBAxuZXdNaW5Qcm9maXQJAGsDBQltaW5Qcm9maXQFCW5ld0Ftb3VudAUGYW1vdW50CQEJYXJiaXRyYWdlAwUEdXNkdAUJbmV3QW1vdW50BQxuZXdNaW5Qcm9maXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4A02LAYA==", "height": 4081124, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C7D5UHyVSGritL36dE7TQUd4ak8KwHfQAUJPvxgdUNbJ Next: Ap1Mb5fZHxsL99KJSLPY4ZRy9DFLSUwcsDoCJBvrzcC Diff:
Old | New | Differences | |
---|---|---|---|
106 | 106 | } | |
107 | 107 | ||
108 | 108 | ||
109 | + | ||
110 | + | @Callable(i) | |
111 | + | func suu (amount,minProfit) = { | |
112 | + | let check = if ((i.caller == this)) | |
113 | + | then true | |
114 | + | else throw("permission denied") | |
115 | + | if ((check == check)) | |
116 | + | then { | |
117 | + | let res = invoke(simpleAmmAddress, "swapREADONLY", ["WAVES", amount], nil) | |
118 | + | let newAmount = match res { | |
119 | + | case r: (Int, Int, Int) => | |
120 | + | r._1 | |
121 | + | case _ => | |
122 | + | throw("something wrong") | |
123 | + | } | |
124 | + | let newMinProfit = fraction(minProfit, newAmount, amount) | |
125 | + | arbitrage(usdt, newAmount, newMinProfit) | |
126 | + | } | |
127 | + | else throw("Strict value is not equal to itself.") | |
128 | + | } | |
129 | + | ||
130 | + |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let wxPoolAddress = Address(base58'3PPeWowdyQLKwW9AExN5CgFa7X9ts7D4LkM') | |
5 | 5 | ||
6 | 6 | let simpleAmmAddress = Address(base58'3PPvHcJjESoUbf9LDpAxEhQKUnpqH1Ea29h') | |
7 | 7 | ||
8 | 8 | let waves = unit | |
9 | 9 | ||
10 | 10 | let usdt = base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
11 | 11 | ||
12 | 12 | let lp = base58'6KWpnpLk6GNh5HG9ct9pNDCYFWJBoAAshZsp4D8jcFpV' | |
13 | 13 | ||
14 | 14 | func getBalance (id) = match id { | |
15 | 15 | case b: ByteVector => | |
16 | 16 | assetBalance(this, b) | |
17 | 17 | case _ => | |
18 | 18 | wavesBalance(this).available | |
19 | 19 | } | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func swapWx (asset,amount) = { | |
23 | 23 | let receiveAssetString = if ((asset == unit)) | |
24 | 24 | then toBase58String(usdt) | |
25 | 25 | else "WAVES" | |
26 | 26 | let initLPBalance = getBalance(lp) | |
27 | 27 | if ((initLPBalance == initLPBalance)) | |
28 | 28 | then { | |
29 | 29 | let inv1 = invoke(wxPoolAddress, "putOneTkn", [1, false], [AttachedPayment(asset, amount)]) | |
30 | 30 | if ((inv1 == inv1)) | |
31 | 31 | then { | |
32 | 32 | let lpReceived = (getBalance(lp) - initLPBalance) | |
33 | 33 | if ((lpReceived == lpReceived)) | |
34 | 34 | then { | |
35 | 35 | let inv2 = invoke(wxPoolAddress, "getOneTkn", [receiveAssetString, 1], [AttachedPayment(lp, lpReceived)]) | |
36 | 36 | if ((inv2 == inv2)) | |
37 | 37 | then unit | |
38 | 38 | else throw("Strict value is not equal to itself.") | |
39 | 39 | } | |
40 | 40 | else throw("Strict value is not equal to itself.") | |
41 | 41 | } | |
42 | 42 | else throw("Strict value is not equal to itself.") | |
43 | 43 | } | |
44 | 44 | else throw("Strict value is not equal to itself.") | |
45 | 45 | } | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func arbitrage (sendAsset,amount,minProfit) = { | |
49 | 49 | let receiveAsset = if ((sendAsset == unit)) | |
50 | 50 | then usdt | |
51 | 51 | else unit | |
52 | 52 | let initSendBalance = getBalance(sendAsset) | |
53 | 53 | if ((initSendBalance == initSendBalance)) | |
54 | 54 | then { | |
55 | 55 | let initReceiveBalance = getBalance(receiveAsset) | |
56 | 56 | if ((initReceiveBalance == initReceiveBalance)) | |
57 | 57 | then { | |
58 | 58 | let inv1 = invoke(simpleAmmAddress, "swap", nil, [AttachedPayment(sendAsset, amount)]) | |
59 | 59 | if ((inv1 == inv1)) | |
60 | 60 | then { | |
61 | 61 | let received = (getBalance(receiveAsset) - initReceiveBalance) | |
62 | 62 | if ((received == received)) | |
63 | 63 | then { | |
64 | 64 | let inv2 = swapWx(receiveAsset, received) | |
65 | 65 | if ((inv2 == inv2)) | |
66 | 66 | then { | |
67 | 67 | let profit = (getBalance(sendAsset) - initSendBalance) | |
68 | 68 | if ((profit == profit)) | |
69 | 69 | then if ((profit > minProfit)) | |
70 | 70 | then nil | |
71 | 71 | else throw("no profit") | |
72 | 72 | else throw("Strict value is not equal to itself.") | |
73 | 73 | } | |
74 | 74 | else throw("Strict value is not equal to itself.") | |
75 | 75 | } | |
76 | 76 | else throw("Strict value is not equal to itself.") | |
77 | 77 | } | |
78 | 78 | else throw("Strict value is not equal to itself.") | |
79 | 79 | } | |
80 | 80 | else throw("Strict value is not equal to itself.") | |
81 | 81 | } | |
82 | 82 | else throw("Strict value is not equal to itself.") | |
83 | 83 | } | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | @Callable(i) | |
87 | 87 | func sw (amount,minProfit) = { | |
88 | 88 | let check = if ((i.caller == this)) | |
89 | 89 | then true | |
90 | 90 | else throw("permission denied") | |
91 | 91 | if ((check == check)) | |
92 | 92 | then arbitrage(waves, amount, minProfit) | |
93 | 93 | else throw("Strict value is not equal to itself.") | |
94 | 94 | } | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | ||
98 | 98 | @Callable(i) | |
99 | 99 | func su (amount,minProfit) = { | |
100 | 100 | let check = if ((i.caller == this)) | |
101 | 101 | then true | |
102 | 102 | else throw("permission denied") | |
103 | 103 | if ((check == check)) | |
104 | 104 | then arbitrage(usdt, amount, minProfit) | |
105 | 105 | else throw("Strict value is not equal to itself.") | |
106 | 106 | } | |
107 | 107 | ||
108 | 108 | ||
109 | + | ||
110 | + | @Callable(i) | |
111 | + | func suu (amount,minProfit) = { | |
112 | + | let check = if ((i.caller == this)) | |
113 | + | then true | |
114 | + | else throw("permission denied") | |
115 | + | if ((check == check)) | |
116 | + | then { | |
117 | + | let res = invoke(simpleAmmAddress, "swapREADONLY", ["WAVES", amount], nil) | |
118 | + | let newAmount = match res { | |
119 | + | case r: (Int, Int, Int) => | |
120 | + | r._1 | |
121 | + | case _ => | |
122 | + | throw("something wrong") | |
123 | + | } | |
124 | + | let newMinProfit = fraction(minProfit, newAmount, amount) | |
125 | + | arbitrage(usdt, newAmount, newMinProfit) | |
126 | + | } | |
127 | + | else throw("Strict value is not equal to itself.") | |
128 | + | } | |
129 | + | ||
130 | + |
github/deemru/w8io/3ef1775 32.81 ms ◑