tx · D45DDqZ4yWQvtUV4LRstjPfkmK3cYAGEVi75ZngBHeHV

3P3qCUfvbDUjRnjrfM5XFMrXrzxxiad94Ez:  -0.01000000 Waves

2023.02.06 18:30 [3503510] smart account 3P3qCUfvbDUjRnjrfM5XFMrXrzxxiad94Ez > SELF 0.00000000 Waves

{ "type": 13, "id": "D45DDqZ4yWQvtUV4LRstjPfkmK3cYAGEVi75ZngBHeHV", "fee": 1000000, "feeAssetId": null, "timestamp": 1675697447439, "version": 2, "chainId": 87, "sender": "3P3qCUfvbDUjRnjrfM5XFMrXrzxxiad94Ez", "senderPublicKey": "3zaQerEjh4SK1xhin9zzs5qr337aLRFhz7z1ckjFGhMz", "proofs": [ "56S2kXK9gqznfPFEC2D8JxmLmMB5ybrs2p2th6GqmZqJZ8BZzm1NwHePK6qqxkvnievn6yeT2dH79dGeK2bK3JSF" ], "script": "base64:BgLoBAgCEgMKAQESBAoCCAgSAwoBCCIEYm9zcyIOYWRtaW5QdWJsaWNLZXkiCWdldFB1dEdldCIJaXNfc3RhYmxlIgdwdXRGdW5jIgdnZXRGdW5jIgpnZXRCYWxhbmNlIgdhc3NldElkIgckbWF0Y2gwIgFiIghnZXRCYXNlMSIEZGF0YSIGcF9kYXRhIgFhIgJhMiIHYXNzZXRJbiIIYW1vdW50SW4iCGdldEJhc2UyIgJwMSIDbHAxIgtpc19zdGFibGVfMSIBaSIDa2V5IgN2YWwiCmRhdGFfYXJyYXkiCyR0MDE0NzUxNTMxIgskdDAxNTM2MTU4OCILJHQwMTU5MzE2NDUiAnAyIgNscDIiC2lzX3N0YWJsZV8yIgskdDAxNjUwMTcwMiICcDMiA2xwMyILaXNfc3RhYmxlXzMiEWFtb3VudF9iZWZfYXNzZXQxIgskdDAxNzY4MTgzNCIIcHV0RnVuYzEiCGdldEZ1bmMxIgskdDAxODM5MTkwNSIIcHV0RnVuYzIiCGdldEZ1bmMyIgskdDAxOTEwMTk3NiIIcHV0RnVuYzMiCGdldEZ1bmMzIgRwdXQxIgtscDFfYXNzZXRpZCILbHBCYWxhbmNlXzEiBGdldDEiAm5iIhFhbW91bnRfYmVmX2Fzc2V0MiIEcHV0MiILbHAyX2Fzc2V0aWQiC2xwQmFsYW5jZV8yIgRnZXQyIhVhbW91bnRfYmVmX2Jhc2VfYXNzZXQiA25iMiIEcHV0MyILbHAzX2Fzc2V0aWQiC2xwQmFsYW5jZV8zIgRnZXQzIgNuYjMiAnR4IgZ2ZXJpZnkGAAFhCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUFJFNUtIOW9QR2ZGUHM3ZkduUWNKNHdOc2hFRFVQR2oxdAABYgEgr/8efHaHn138Hq+fsexc54494j5bIbLgBnFNFv+bFW0BAWMBAWQEAWUDCQAAAgUBZAABAgtwdXRPbmVUa25WMgIJcHV0T25lVGtuBAFmAwkAAAIFAWQAAQILZ2V0T25lVGtuVjICCWdldE9uZVRrbgkAlAoCBQFlBQFmAQFnAQFoBAFpBQFoAwkAAQIFAWkCCkJ5dGVWZWN0b3IEAWoFAWkJAPAHAgUEdGhpcwUBaggJAO8HAQUEdGhpcwlhdmFpbGFibGUBAWsBAWwEAW0JALUJAgUBbAIBXwQBbgkAkQMCBQFtAAAEAW8JAJEDAgUBbQABBAFwCQCRAwIFAW0AAgQBcQkAkQMCBQFtAAMJAJYKBAUBbgUBbwUBcAUBcQEBcgEBbAQBbQkAtQkCBQFsAgFfBAFzCQCRAwIFAW0AAAQBdAkAkQMCBQFtAAEEAXUJAJEDAgUBbQACCQCVCgMFAXMFAXQFAXUDAXYBCHNldEFtb3V0AQFuAwkBAiE9AggFAXYGY2FsbGVyBQR0aGlzCQACAQIbeW91IGFyZSBub3QgYWxsb3dlZCB0byBzZXQhCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgdtb250YW50BQFuBQNuaWwBdgEPc2V0S2V5VmFsU3RyaW5nAgF3AXgDCQECIT0CCAUBdgZjYWxsZXIFBHRoaXMJAAIBAht5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHNldCEJAMwIAgkBC1N0cmluZ0VudHJ5AgUBdwUBeAUDbmlsAXYBAncyAQFsAwMJAQIhPQIIBQF2BmNhbGxlcgUEdGhpcwkBAiE9AggFAXYGY2FsbGVyBQFhBwkAAgECG3lvdSBhcmUgbm90IGFsbG93ZWQgdG8gYXJiIQQBeQkAvAkCBQFsAgF8BAF6CQEBawEJAJEDAgUBeQAABAFuCAUBegJfMQQBbwgFAXoCXzIEAXAIBQF6Al8zBAFxCAUBegJfNAQBQQkBAXIBCQCRAwIFAXkAAQQBcwgFAUECXzEEAXQIBQFBAl8yBAF1CAUBQQJfMwQBQgkBAXIBCQCRAwIFAXkAAgQBQwgFAUICXzEEAUQIBQFCAl8yBAFFCAUBQgJfMwQBRgkBAXIBCQCRAwIFAXkAAwQBRwgFAUYCXzEEAUgIBQFGAl8yBAFJCAUBRgJfMwQBSgkBAWcBCQDZBAEFAW4EAUsJAQFjAQkBBXZhbHVlAQkAtgkBBQF1BAFMCAUBSwJfMQQBTQgFAUsCXzIEAU4JAQFjAQkBBXZhbHVlAQkAtgkBBQF1BAFPCAUBTgJfMQQBUAgFAU4CXzIEAVEJAQFjAQkBBXZhbHVlAQkAtgkBBQF1BAFSCAUBUQJfMQQBUwgFAVECXzIEAVQJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAXMFAUwJAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUBcAkBBXZhbHVlAQkAtgkBBQFxBQNuaWwDCQAAAgUBVAUBVAQBVQkA2QQBBQF0BAFWCQEBZwEFAVUDCQAAAgUBVgUBVgQBVwkA/AcECQEHQWRkcmVzcwEJANkEAQUBcwUBTQkAzAgCBQFuCQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQFVBQFWBQNuaWwDCQAAAgUBVwUBVwQBWAkAZQIJAQFnAQkA2QQBBQFuBQFKAwkAAAIFAVgFAVgEAVkJAQFnAQkA2QQBBQFvAwkAAAIFAVkFAVkEAVoJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAUMFAU8JAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUBbgUBWAUDbmlsAwkAAAIFAVoFAVoEAmFhCQDZBAEFAUQEAmFiCQEBZwEFAmFhAwkAAAIFAmFiBQJhYgQCYWMJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAUMFAVAJAMwIAgUBbwkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYWEFAmFiBQNuaWwDCQAAAgUCYWMFAmFjBAJhZAkBAWcBCQDZBAEFAXADCQAAAgUCYWQFAmFkBAJhZQkAZQIJAQFnAQkA2QQBBQFvBQFZAwkAAAIFAmFlBQJhZQQCYWYJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAUcFAVMJAMwIAgABCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUBbwUCYWUFA25pbAMJAAACBQJhZgUCYWYEAmFnCQDZBAEFAUgEAmFoCQEBZwEFAmFnAwkAAAIFAmFoBQJhaAQCYWkJAPwHBAkBB0FkZHJlc3MBCQDZBAEFAUcFAVMJAMwIAgUBcAkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYWcFAmFoBQNuaWwDCQAAAgUCYWkFAmFpBAJhagkAZQIJAQFnAQkA2QQBBQFwBQJhZAMJAAACBQJhagUCYWoDCQBmAgUCYWoAZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBdgZjYWxsZXIFAmFqCQDZBAEFAXAFA25pbAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgILYW1vdW50SW4gPSAFAXECDCwgbmV3QmFsXzE6IAkApAMBBQFYAgwsIG5ld0JhbF8yOiAJAKQDAQUCYWUCDCwgbmV3QmFsXzM6IAkApAMBBQJhagkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECYWsBAmFsAAMJAMgTAwgFAmFrCWJvZHlCeXRlcwkAkQMCCAUCYWsGcHJvb2ZzAAAIBQJhaw9zZW5kZXJQdWJsaWNLZXkGCQDIEwMIBQJhawlib2R5Qnl0ZXMJAJEDAggFAmFrBnByb29mcwAABQFiN47NmQ==", "height": 3503510, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GphW4yxB1o2E7kiL9cWsdTmiZEksznM8cakvVckiefAp Next: 5yodXP3AEZxy6MTLZ3xfCABR6GPpyHQDeq3yHGNcwHsz Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let boss = addressFromStringValue("3PRE5KH9oPGfFPs7fGnQcJ4wNshEDUPGj1t")
55
6-let usdtAssetIdString = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
7-
8-let usdcAssetIdString = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"
9-
106 let adminPublicKey = base58'Cr1ybL2JGg9GwJHA2JwqxBPfSW6Q7Jg4HvNrsEiCsHu6'
117
12-func getStringByKey (key) = valueOrElse(getString(this, key), "")
13-
14-
15-let decimals_multi = [10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000]
16-
17-func getBase (data) = {
18- let data_arr = split(getStringByKey(data), "_")
19- let p_data = split(data, "_")
20- let p = addressFromStringValue(p_data[0])
21- let a1 = fromBase58String(p_data[1])
22- let a1d = valueOrElse(parseInt(p_data[2]), 0)
23- let a2 = fromBase58String(p_data[3])
24- let a2d = valueOrElse(parseInt(p_data[4]), 0)
25- let lp = fromBase58String(p_data[5])
26- let s = p_data[6]
27- let as = if ((p_data[1] == "WAVES"))
28- then "WAVES"
29- else p_data[1]
30- let a2s = if ((p_data[3] == "WAVES"))
31- then "WAVES"
32- else p_data[3]
33- let waid = unit
34- $Tuple10(p, a1, a1d, a2, a2d, lp, s, as, a2s, waid)
35- }
36-
37-
38-func getBaseBal (aid,aids,aid2,aid2s,throw_err) = if (throw_err)
39- then throw(((((((toBase58String(aid) + " - ") + aids) + " - ") + toBase58String(aid2)) + " - ") + aid2s))
40- else {
41- let aidb = if ((aids == "WAVES"))
42- then wavesBalance(this).available
43- else assetBalance(this, aid)
44- if ((aidb == aidb))
45- then {
46- let aid2b = if ((aid2s == "WAVES"))
47- then wavesBalance(this).available
48- else assetBalance(this, aid2)
49- if ((aid2b == aid2b))
50- then $Tuple2(aidb, aid2b)
51- else throw("Strict value is not equal to itself.")
52- }
53- else throw("Strict value is not equal to itself.")
54- }
55-
56-
57-func getPutGet (aids) = {
58- let putFunc = if (if ((usdtAssetIdString == aids))
59- then true
60- else (usdcAssetIdString == aids))
8+func getPutGet (is_stable) = {
9+ let putFunc = if ((is_stable == 1))
6110 then "putOneTknV2"
6211 else "putOneTkn"
63- let getFunc = if (if ((usdtAssetIdString == aids))
64- then true
65- else (usdcAssetIdString == aids))
12+ let getFunc = if ((is_stable == 1))
6613 then "getOneTknV2"
6714 else "getOneTkn"
6815 $Tuple2(putFunc, getFunc)
6916 }
7017
7118
72-func getBalToSwap (aid_str,aidbb,aid) = if ((aid_str == "WAVES"))
73- then (wavesBalance(this).available - aidbb)
74- else (assetBalance(this, aid) - aidbb)
19+func getBalance (assetId) = match assetId {
20+ case b: ByteVector =>
21+ assetBalance(this, b)
22+ case _ =>
23+ wavesBalance(this).available
24+}
25+
26+
27+func getBase1 (data) = {
28+ let p_data = split(data, "_")
29+ let a = p_data[0]
30+ let a2 = p_data[1]
31+ let assetIn = p_data[2]
32+ let amountIn = p_data[3]
33+ $Tuple4(a, a2, assetIn, amountIn)
34+ }
35+
36+
37+func getBase2 (data) = {
38+ let p_data = split(data, "_")
39+ let p1 = p_data[0]
40+ let lp1 = p_data[1]
41+ let is_stable_1 = p_data[2]
42+ $Tuple3(p1, lp1, is_stable_1)
43+ }
7544
7645
7746 @Callable(i)
8958
9059
9160 @Callable(i)
92-func w (data) = if (if ((i.caller != this))
61+func w2 (data) = if (if ((i.caller != this))
9362 then (i.caller != boss)
9463 else false)
9564 then throw("you are not allowed to arb!")
9665 else {
9766 let data_array = split_4C(data, "|")
98- let $t036923782 = getBase(data_array[0])
99- let p1 = $t036923782._1
100- let p1a1 = $t036923782._2
101- let p1a1d = $t036923782._3
102- let p1a2 = $t036923782._4
103- let p1a2d = $t036923782._5
104- let p1lp = $t036923782._6
105- let p1s = $t036923782._7
106- let p1a1s = $t036923782._8
107- let p1a2s = $t036923782._9
108- let waid = $t036923782._10
109- let $t037873871 = getBase(data_array[1])
110- let p2 = $t037873871._1
111- let p2a1 = $t037873871._2
112- let p2a1d = $t037873871._3
113- let p2a2 = $t037873871._4
114- let p2a2d = $t037873871._5
115- let p2lp = $t037873871._6
116- let p2s = $t037873871._7
117- let p2a1s = $t037873871._8
118- let p2a2s = $t037873871._9
119- let $t038763960 = getBase(data_array[2])
120- let p3 = $t038763960._1
121- let p3a1 = $t038763960._2
122- let p3a1d = $t038763960._3
123- let p3a2 = $t038763960._4
124- let p3a2d = $t038763960._5
125- let p3lp = $t038763960._6
126- let p3s = $t038763960._7
127- let p3a1s = $t038763960._8
128- let p3a2s = $t038763960._9
129- let assetToSwap = if ((parseInt(data_array[3]) == 1))
130- then p1a1
131- else p1a2
132- let assetToSwapDecimal = if ((assetToSwap == p1a1))
133- then p1a1d
134- else p1a2d
135- let assetToGet = if ((assetToSwap == p1a1))
136- then p1a2
137- else p1a1
138- let assetToGetDecimal = if ((assetToGet == p1a1))
139- then p1a1d
140- else p1a2d
141- let amountToSwap = 10
142- let $t043324470 = getBaseBal(assetToSwap, toBase58String(assetToSwap), assetToGet, toBase58String(assetToGet), false)
143- if (($t043324470 == $t043324470))
67+ let $t014751531 = getBase1(data_array[0])
68+ let a = $t014751531._1
69+ let a2 = $t014751531._2
70+ let assetIn = $t014751531._3
71+ let amountIn = $t014751531._4
72+ let $t015361588 = getBase2(data_array[1])
73+ let p1 = $t015361588._1
74+ let lp1 = $t015361588._2
75+ let is_stable_1 = $t015361588._3
76+ let $t015931645 = getBase2(data_array[2])
77+ let p2 = $t015931645._1
78+ let lp2 = $t015931645._2
79+ let is_stable_2 = $t015931645._3
80+ let $t016501702 = getBase2(data_array[3])
81+ let p3 = $t016501702._1
82+ let lp3 = $t016501702._2
83+ let is_stable_3 = $t016501702._3
84+ let amount_bef_asset1 = getBalance(fromBase58String(a))
85+ let $t017681834 = getPutGet(value(parseInt(is_stable_1)))
86+ let putFunc1 = $t017681834._1
87+ let getFunc1 = $t017681834._2
88+ let $t018391905 = getPutGet(value(parseInt(is_stable_1)))
89+ let putFunc2 = $t018391905._1
90+ let getFunc2 = $t018391905._2
91+ let $t019101976 = getPutGet(value(parseInt(is_stable_1)))
92+ let putFunc3 = $t019101976._1
93+ let getFunc3 = $t019101976._2
94+ let put1 = invoke(Address(fromBase58String(p1)), putFunc1, [1, false], [AttachedPayment(fromBase58String(assetIn), value(parseInt(amountIn)))])
95+ if ((put1 == put1))
14496 then {
145- let assetToGetbb = $t043324470._2
146- let assetToSwapbb = $t043324470._1
147- let $t044804546 = getPutGet(toBase58String(assetToSwap))
148- if (($t044804546 == $t044804546))
97+ let lp1_assetid = fromBase58String(lp1)
98+ let lpBalance_1 = getBalance(lp1_assetid)
99+ if ((lpBalance_1 == lpBalance_1))
149100 then {
150- let getFunc = $t044804546._2
151- let putFunc = $t044804546._1
152- let put = invoke(p1, putFunc, [1, false], [AttachedPayment(if ((toBase58String(assetToSwap) == "WAVES"))
153- then waid
154- else assetToSwap, (amountToSwap * decimals_multi[(assetToSwapDecimal - 1)]))])
155- if ((put == put))
101+ let get1 = invoke(Address(fromBase58String(p1)), getFunc1, [a, 1], [AttachedPayment(lp1_assetid, lpBalance_1)])
102+ if ((get1 == get1))
156103 then {
157- let lpb = assetBalance(this, p1lp)
158- if ((lpb == lpb))
104+ let nb = (getBalance(fromBase58String(a)) - amount_bef_asset1)
105+ if ((nb == nb))
159106 then {
160- let get = invoke(p1, getFunc, [toBase58String(assetToGet), 1], [AttachedPayment(p1lp, lpb)])
161- if ((get == get))
107+ let amount_bef_asset2 = getBalance(fromBase58String(a2))
108+ if ((amount_bef_asset2 == amount_bef_asset2))
162109 then {
163- let balToSwap = getBalToSwap(toBase58String(assetToGet), assetToGetbb, assetToGet)
164- if ((balToSwap == balToSwap))
110+ let put2 = invoke(Address(fromBase58String(p2)), putFunc2, [1, false], [AttachedPayment(fromBase58String(a), nb)])
111+ if ((put2 == put2))
165112 then {
166- let assetToGet2 = if ((assetToGet == p2a1))
167- then p2a2
168- else p2a1
169- if ((assetToGet2 == assetToGet2))
113+ let lp2_assetid = fromBase58String(lp2)
114+ let lpBalance_2 = getBalance(lp2_assetid)
115+ if ((lpBalance_2 == lpBalance_2))
170116 then {
171- let $t052825421 = getBaseBal(assetToGet, toBase58String(assetToGet), assetToGet2, toBase58String(assetToGet2), false)
172- if (($t052825421 == $t052825421))
117+ let get2 = invoke(Address(fromBase58String(p2)), getFunc2, [a2, 1], [AttachedPayment(lp2_assetid, lpBalance_2)])
118+ if ((get2 == get2))
173119 then {
174- let assetToGet2bb = $t052825421._2
175- let assetToGetbb2 = $t052825421._1
176- let $t054265493 = getPutGet(toBase58String(assetToGet))
177- if (($t054265493 == $t054265493))
120+ let amount_bef_base_asset = getBalance(fromBase58String(assetIn))
121+ if ((amount_bef_base_asset == amount_bef_base_asset))
178122 then {
179- let getFunc2 = $t054265493._2
180- let putFunc2 = $t054265493._1
181- let put2 = invoke(p2, putFunc2, [1, false], [AttachedPayment(if ((toBase58String(assetToGet) == "WAVES"))
182- then waid
183- else assetToGet, balToSwap)])
184- if ((put2 == put2))
123+ let nb2 = (getBalance(fromBase58String(a2)) - amount_bef_asset2)
124+ if ((nb2 == nb2))
185125 then {
186- let p2lpb = assetBalance(this, p2lp)
187- if ((p2lpb == p2lpb))
126+ let put3 = invoke(Address(fromBase58String(p3)), getFunc3, [1, false], [AttachedPayment(fromBase58String(a2), nb2)])
127+ if ((put3 == put3))
188128 then {
189- let get2 = invoke(p2, getFunc2, [toBase58String(assetToGet2), 1], [AttachedPayment(p2lp, p2lpb)])
190- if ((get2 == get2))
129+ let lp3_assetid = fromBase58String(lp3)
130+ let lpBalance_3 = getBalance(lp3_assetid)
131+ if ((lpBalance_3 == lpBalance_3))
191132 then {
192- let balToSwap2 = getBalToSwap(toBase58String(assetToGet2), assetToGet2bb, assetToGet2)
193- if ((balToSwap2 == balToSwap2))
133+ let get3 = invoke(Address(fromBase58String(p3)), getFunc3, [assetIn, 1], [AttachedPayment(lp3_assetid, lpBalance_3)])
134+ if ((get3 == get3))
194135 then {
195- let assetToGet3 = if ((assetToSwap == p3a1))
196- then p3a2
197- else p3a1
198- if ((assetToGet3 == assetToGet3))
199- then {
200- let $t059686110 = getBaseBal(assetToGet3, toBase58String(assetToGet3), assetToSwap, toBase58String(assetToSwap), false)
201- if (($t059686110 == $t059686110))
202- then {
203- let assetToSwapbb3 = $t059686110._2
204- let assetToGet3bb = $t059686110._1
205- let $t061156183 = getPutGet(toBase58String(assetToGet2))
206- if (($t061156183 == $t061156183))
207- then {
208- let getFunc3 = $t061156183._2
209- let putFunc3 = $t061156183._1
210- let put3 = invoke(p3, putFunc3, [1, false], [AttachedPayment(if ((toBase58String(assetToGet2) == "WAVES"))
211- then waid
212- else assetToGet2, balToSwap2)])
213- if ((put3 == put3))
214- then {
215- let p3lpb = assetBalance(this, p3lp)
216- if ((p3lpb == p3lpb))
217- then {
218- let get3 = invoke(p3, getFunc3, [toBase58String(assetToSwap), 1], [AttachedPayment(p3lp, p3lpb)])
219- if ((get3 == get3))
220- then {
221- let $t064986639 = getBaseBal(assetToSwap, toBase58String(assetToSwap), assetToGet3, toBase58String(assetToGet3), false)
222- if (($t064986639 == $t064986639))
223- then {
224- let assetToGet3ba = $t064986639._2
225- let assetToSwapba = $t064986639._1
226- if (if ((0 > (assetToSwapba - assetToSwapbb)))
227- then true
228- else (0 > (assetToGet3ba - assetToGet3bb)))
229- then throw(((("assetToSwapba - assetToSwapbb = " + toString((assetToSwapba - assetToSwapbb))) + " assetToGet3ba - assetToGet3bb = ") + toString((assetToGet3ba - assetToGet3bb))))
230- else if (true)
231- then throw(((((((((((("assetToSwapbb = " + toString(assetToSwapbb)) + " - assetToGetbb = ") + toString(assetToGetbb)) + " vs assetToGetbb2 = ") + toString(assetToGetbb2)) + " - assetToGet2bb = ") + toString(assetToGet2bb)) + " vs assetToGet3bb = ") + toString(assetToGet3bb)) + " - assetToSwapbb3 = ") + toString(assetToSwapbb3)))
232- else nil
233- }
234- else throw("Strict value is not equal to itself.")
235- }
236- else throw("Strict value is not equal to itself.")
237- }
238- else throw("Strict value is not equal to itself.")
239- }
240- else throw("Strict value is not equal to itself.")
241- }
242- else throw("Strict value is not equal to itself.")
243- }
244- else throw("Strict value is not equal to itself.")
245- }
136+ let nb3 = (getBalance(fromBase58String(assetIn)) - amount_bef_base_asset)
137+ if ((nb3 == nb3))
138+ then if ((nb3 > 100))
139+ then [ScriptTransfer(i.caller, nb3, fromBase58String(assetIn))]
140+ else throw(((((((("amountIn = " + amountIn) + ", newBal_1: ") + toString(nb)) + ", newBal_2: ") + toString(nb2)) + ", newBal_3: ") + toString(nb3)))
246141 else throw("Strict value is not equal to itself.")
247142 }
248143 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let boss = addressFromStringValue("3PRE5KH9oPGfFPs7fGnQcJ4wNshEDUPGj1t")
55
6-let usdtAssetIdString = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ"
7-
8-let usdcAssetIdString = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"
9-
106 let adminPublicKey = base58'Cr1ybL2JGg9GwJHA2JwqxBPfSW6Q7Jg4HvNrsEiCsHu6'
117
12-func getStringByKey (key) = valueOrElse(getString(this, key), "")
13-
14-
15-let decimals_multi = [10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000]
16-
17-func getBase (data) = {
18- let data_arr = split(getStringByKey(data), "_")
19- let p_data = split(data, "_")
20- let p = addressFromStringValue(p_data[0])
21- let a1 = fromBase58String(p_data[1])
22- let a1d = valueOrElse(parseInt(p_data[2]), 0)
23- let a2 = fromBase58String(p_data[3])
24- let a2d = valueOrElse(parseInt(p_data[4]), 0)
25- let lp = fromBase58String(p_data[5])
26- let s = p_data[6]
27- let as = if ((p_data[1] == "WAVES"))
28- then "WAVES"
29- else p_data[1]
30- let a2s = if ((p_data[3] == "WAVES"))
31- then "WAVES"
32- else p_data[3]
33- let waid = unit
34- $Tuple10(p, a1, a1d, a2, a2d, lp, s, as, a2s, waid)
35- }
36-
37-
38-func getBaseBal (aid,aids,aid2,aid2s,throw_err) = if (throw_err)
39- then throw(((((((toBase58String(aid) + " - ") + aids) + " - ") + toBase58String(aid2)) + " - ") + aid2s))
40- else {
41- let aidb = if ((aids == "WAVES"))
42- then wavesBalance(this).available
43- else assetBalance(this, aid)
44- if ((aidb == aidb))
45- then {
46- let aid2b = if ((aid2s == "WAVES"))
47- then wavesBalance(this).available
48- else assetBalance(this, aid2)
49- if ((aid2b == aid2b))
50- then $Tuple2(aidb, aid2b)
51- else throw("Strict value is not equal to itself.")
52- }
53- else throw("Strict value is not equal to itself.")
54- }
55-
56-
57-func getPutGet (aids) = {
58- let putFunc = if (if ((usdtAssetIdString == aids))
59- then true
60- else (usdcAssetIdString == aids))
8+func getPutGet (is_stable) = {
9+ let putFunc = if ((is_stable == 1))
6110 then "putOneTknV2"
6211 else "putOneTkn"
63- let getFunc = if (if ((usdtAssetIdString == aids))
64- then true
65- else (usdcAssetIdString == aids))
12+ let getFunc = if ((is_stable == 1))
6613 then "getOneTknV2"
6714 else "getOneTkn"
6815 $Tuple2(putFunc, getFunc)
6916 }
7017
7118
72-func getBalToSwap (aid_str,aidbb,aid) = if ((aid_str == "WAVES"))
73- then (wavesBalance(this).available - aidbb)
74- else (assetBalance(this, aid) - aidbb)
19+func getBalance (assetId) = match assetId {
20+ case b: ByteVector =>
21+ assetBalance(this, b)
22+ case _ =>
23+ wavesBalance(this).available
24+}
25+
26+
27+func getBase1 (data) = {
28+ let p_data = split(data, "_")
29+ let a = p_data[0]
30+ let a2 = p_data[1]
31+ let assetIn = p_data[2]
32+ let amountIn = p_data[3]
33+ $Tuple4(a, a2, assetIn, amountIn)
34+ }
35+
36+
37+func getBase2 (data) = {
38+ let p_data = split(data, "_")
39+ let p1 = p_data[0]
40+ let lp1 = p_data[1]
41+ let is_stable_1 = p_data[2]
42+ $Tuple3(p1, lp1, is_stable_1)
43+ }
7544
7645
7746 @Callable(i)
7847 func setAmout (a) = if ((i.caller != this))
7948 then throw("you are not allowed to set!")
8049 else [IntegerEntry("montant", a)]
8150
8251
8352
8453 @Callable(i)
8554 func setKeyValString (key,val) = if ((i.caller != this))
8655 then throw("you are not allowed to set!")
8756 else [StringEntry(key, val)]
8857
8958
9059
9160 @Callable(i)
92-func w (data) = if (if ((i.caller != this))
61+func w2 (data) = if (if ((i.caller != this))
9362 then (i.caller != boss)
9463 else false)
9564 then throw("you are not allowed to arb!")
9665 else {
9766 let data_array = split_4C(data, "|")
98- let $t036923782 = getBase(data_array[0])
99- let p1 = $t036923782._1
100- let p1a1 = $t036923782._2
101- let p1a1d = $t036923782._3
102- let p1a2 = $t036923782._4
103- let p1a2d = $t036923782._5
104- let p1lp = $t036923782._6
105- let p1s = $t036923782._7
106- let p1a1s = $t036923782._8
107- let p1a2s = $t036923782._9
108- let waid = $t036923782._10
109- let $t037873871 = getBase(data_array[1])
110- let p2 = $t037873871._1
111- let p2a1 = $t037873871._2
112- let p2a1d = $t037873871._3
113- let p2a2 = $t037873871._4
114- let p2a2d = $t037873871._5
115- let p2lp = $t037873871._6
116- let p2s = $t037873871._7
117- let p2a1s = $t037873871._8
118- let p2a2s = $t037873871._9
119- let $t038763960 = getBase(data_array[2])
120- let p3 = $t038763960._1
121- let p3a1 = $t038763960._2
122- let p3a1d = $t038763960._3
123- let p3a2 = $t038763960._4
124- let p3a2d = $t038763960._5
125- let p3lp = $t038763960._6
126- let p3s = $t038763960._7
127- let p3a1s = $t038763960._8
128- let p3a2s = $t038763960._9
129- let assetToSwap = if ((parseInt(data_array[3]) == 1))
130- then p1a1
131- else p1a2
132- let assetToSwapDecimal = if ((assetToSwap == p1a1))
133- then p1a1d
134- else p1a2d
135- let assetToGet = if ((assetToSwap == p1a1))
136- then p1a2
137- else p1a1
138- let assetToGetDecimal = if ((assetToGet == p1a1))
139- then p1a1d
140- else p1a2d
141- let amountToSwap = 10
142- let $t043324470 = getBaseBal(assetToSwap, toBase58String(assetToSwap), assetToGet, toBase58String(assetToGet), false)
143- if (($t043324470 == $t043324470))
67+ let $t014751531 = getBase1(data_array[0])
68+ let a = $t014751531._1
69+ let a2 = $t014751531._2
70+ let assetIn = $t014751531._3
71+ let amountIn = $t014751531._4
72+ let $t015361588 = getBase2(data_array[1])
73+ let p1 = $t015361588._1
74+ let lp1 = $t015361588._2
75+ let is_stable_1 = $t015361588._3
76+ let $t015931645 = getBase2(data_array[2])
77+ let p2 = $t015931645._1
78+ let lp2 = $t015931645._2
79+ let is_stable_2 = $t015931645._3
80+ let $t016501702 = getBase2(data_array[3])
81+ let p3 = $t016501702._1
82+ let lp3 = $t016501702._2
83+ let is_stable_3 = $t016501702._3
84+ let amount_bef_asset1 = getBalance(fromBase58String(a))
85+ let $t017681834 = getPutGet(value(parseInt(is_stable_1)))
86+ let putFunc1 = $t017681834._1
87+ let getFunc1 = $t017681834._2
88+ let $t018391905 = getPutGet(value(parseInt(is_stable_1)))
89+ let putFunc2 = $t018391905._1
90+ let getFunc2 = $t018391905._2
91+ let $t019101976 = getPutGet(value(parseInt(is_stable_1)))
92+ let putFunc3 = $t019101976._1
93+ let getFunc3 = $t019101976._2
94+ let put1 = invoke(Address(fromBase58String(p1)), putFunc1, [1, false], [AttachedPayment(fromBase58String(assetIn), value(parseInt(amountIn)))])
95+ if ((put1 == put1))
14496 then {
145- let assetToGetbb = $t043324470._2
146- let assetToSwapbb = $t043324470._1
147- let $t044804546 = getPutGet(toBase58String(assetToSwap))
148- if (($t044804546 == $t044804546))
97+ let lp1_assetid = fromBase58String(lp1)
98+ let lpBalance_1 = getBalance(lp1_assetid)
99+ if ((lpBalance_1 == lpBalance_1))
149100 then {
150- let getFunc = $t044804546._2
151- let putFunc = $t044804546._1
152- let put = invoke(p1, putFunc, [1, false], [AttachedPayment(if ((toBase58String(assetToSwap) == "WAVES"))
153- then waid
154- else assetToSwap, (amountToSwap * decimals_multi[(assetToSwapDecimal - 1)]))])
155- if ((put == put))
101+ let get1 = invoke(Address(fromBase58String(p1)), getFunc1, [a, 1], [AttachedPayment(lp1_assetid, lpBalance_1)])
102+ if ((get1 == get1))
156103 then {
157- let lpb = assetBalance(this, p1lp)
158- if ((lpb == lpb))
104+ let nb = (getBalance(fromBase58String(a)) - amount_bef_asset1)
105+ if ((nb == nb))
159106 then {
160- let get = invoke(p1, getFunc, [toBase58String(assetToGet), 1], [AttachedPayment(p1lp, lpb)])
161- if ((get == get))
107+ let amount_bef_asset2 = getBalance(fromBase58String(a2))
108+ if ((amount_bef_asset2 == amount_bef_asset2))
162109 then {
163- let balToSwap = getBalToSwap(toBase58String(assetToGet), assetToGetbb, assetToGet)
164- if ((balToSwap == balToSwap))
110+ let put2 = invoke(Address(fromBase58String(p2)), putFunc2, [1, false], [AttachedPayment(fromBase58String(a), nb)])
111+ if ((put2 == put2))
165112 then {
166- let assetToGet2 = if ((assetToGet == p2a1))
167- then p2a2
168- else p2a1
169- if ((assetToGet2 == assetToGet2))
113+ let lp2_assetid = fromBase58String(lp2)
114+ let lpBalance_2 = getBalance(lp2_assetid)
115+ if ((lpBalance_2 == lpBalance_2))
170116 then {
171- let $t052825421 = getBaseBal(assetToGet, toBase58String(assetToGet), assetToGet2, toBase58String(assetToGet2), false)
172- if (($t052825421 == $t052825421))
117+ let get2 = invoke(Address(fromBase58String(p2)), getFunc2, [a2, 1], [AttachedPayment(lp2_assetid, lpBalance_2)])
118+ if ((get2 == get2))
173119 then {
174- let assetToGet2bb = $t052825421._2
175- let assetToGetbb2 = $t052825421._1
176- let $t054265493 = getPutGet(toBase58String(assetToGet))
177- if (($t054265493 == $t054265493))
120+ let amount_bef_base_asset = getBalance(fromBase58String(assetIn))
121+ if ((amount_bef_base_asset == amount_bef_base_asset))
178122 then {
179- let getFunc2 = $t054265493._2
180- let putFunc2 = $t054265493._1
181- let put2 = invoke(p2, putFunc2, [1, false], [AttachedPayment(if ((toBase58String(assetToGet) == "WAVES"))
182- then waid
183- else assetToGet, balToSwap)])
184- if ((put2 == put2))
123+ let nb2 = (getBalance(fromBase58String(a2)) - amount_bef_asset2)
124+ if ((nb2 == nb2))
185125 then {
186- let p2lpb = assetBalance(this, p2lp)
187- if ((p2lpb == p2lpb))
126+ let put3 = invoke(Address(fromBase58String(p3)), getFunc3, [1, false], [AttachedPayment(fromBase58String(a2), nb2)])
127+ if ((put3 == put3))
188128 then {
189- let get2 = invoke(p2, getFunc2, [toBase58String(assetToGet2), 1], [AttachedPayment(p2lp, p2lpb)])
190- if ((get2 == get2))
129+ let lp3_assetid = fromBase58String(lp3)
130+ let lpBalance_3 = getBalance(lp3_assetid)
131+ if ((lpBalance_3 == lpBalance_3))
191132 then {
192- let balToSwap2 = getBalToSwap(toBase58String(assetToGet2), assetToGet2bb, assetToGet2)
193- if ((balToSwap2 == balToSwap2))
133+ let get3 = invoke(Address(fromBase58String(p3)), getFunc3, [assetIn, 1], [AttachedPayment(lp3_assetid, lpBalance_3)])
134+ if ((get3 == get3))
194135 then {
195- let assetToGet3 = if ((assetToSwap == p3a1))
196- then p3a2
197- else p3a1
198- if ((assetToGet3 == assetToGet3))
199- then {
200- let $t059686110 = getBaseBal(assetToGet3, toBase58String(assetToGet3), assetToSwap, toBase58String(assetToSwap), false)
201- if (($t059686110 == $t059686110))
202- then {
203- let assetToSwapbb3 = $t059686110._2
204- let assetToGet3bb = $t059686110._1
205- let $t061156183 = getPutGet(toBase58String(assetToGet2))
206- if (($t061156183 == $t061156183))
207- then {
208- let getFunc3 = $t061156183._2
209- let putFunc3 = $t061156183._1
210- let put3 = invoke(p3, putFunc3, [1, false], [AttachedPayment(if ((toBase58String(assetToGet2) == "WAVES"))
211- then waid
212- else assetToGet2, balToSwap2)])
213- if ((put3 == put3))
214- then {
215- let p3lpb = assetBalance(this, p3lp)
216- if ((p3lpb == p3lpb))
217- then {
218- let get3 = invoke(p3, getFunc3, [toBase58String(assetToSwap), 1], [AttachedPayment(p3lp, p3lpb)])
219- if ((get3 == get3))
220- then {
221- let $t064986639 = getBaseBal(assetToSwap, toBase58String(assetToSwap), assetToGet3, toBase58String(assetToGet3), false)
222- if (($t064986639 == $t064986639))
223- then {
224- let assetToGet3ba = $t064986639._2
225- let assetToSwapba = $t064986639._1
226- if (if ((0 > (assetToSwapba - assetToSwapbb)))
227- then true
228- else (0 > (assetToGet3ba - assetToGet3bb)))
229- then throw(((("assetToSwapba - assetToSwapbb = " + toString((assetToSwapba - assetToSwapbb))) + " assetToGet3ba - assetToGet3bb = ") + toString((assetToGet3ba - assetToGet3bb))))
230- else if (true)
231- then throw(((((((((((("assetToSwapbb = " + toString(assetToSwapbb)) + " - assetToGetbb = ") + toString(assetToGetbb)) + " vs assetToGetbb2 = ") + toString(assetToGetbb2)) + " - assetToGet2bb = ") + toString(assetToGet2bb)) + " vs assetToGet3bb = ") + toString(assetToGet3bb)) + " - assetToSwapbb3 = ") + toString(assetToSwapbb3)))
232- else nil
233- }
234- else throw("Strict value is not equal to itself.")
235- }
236- else throw("Strict value is not equal to itself.")
237- }
238- else throw("Strict value is not equal to itself.")
239- }
240- else throw("Strict value is not equal to itself.")
241- }
242- else throw("Strict value is not equal to itself.")
243- }
244- else throw("Strict value is not equal to itself.")
245- }
136+ let nb3 = (getBalance(fromBase58String(assetIn)) - amount_bef_base_asset)
137+ if ((nb3 == nb3))
138+ then if ((nb3 > 100))
139+ then [ScriptTransfer(i.caller, nb3, fromBase58String(assetIn))]
140+ else throw(((((((("amountIn = " + amountIn) + ", newBal_1: ") + toString(nb)) + ", newBal_2: ") + toString(nb2)) + ", newBal_3: ") + toString(nb3)))
246141 else throw("Strict value is not equal to itself.")
247142 }
248143 else throw("Strict value is not equal to itself.")
249144 }
250145 else throw("Strict value is not equal to itself.")
251146 }
252147 else throw("Strict value is not equal to itself.")
253148 }
254149 else throw("Strict value is not equal to itself.")
255150 }
256151 else throw("Strict value is not equal to itself.")
257152 }
258153 else throw("Strict value is not equal to itself.")
259154 }
260155 else throw("Strict value is not equal to itself.")
261156 }
262157 else throw("Strict value is not equal to itself.")
263158 }
264159 else throw("Strict value is not equal to itself.")
265160 }
266161 else throw("Strict value is not equal to itself.")
267162 }
268163 else throw("Strict value is not equal to itself.")
269164 }
270165 else throw("Strict value is not equal to itself.")
271166 }
272167 else throw("Strict value is not equal to itself.")
273168 }
274169
275170
276171 @Verifier(tx)
277172 func verify () = if (sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
278173 then true
279174 else sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], adminPublicKey)
280175

github/deemru/w8io/3ef1775 
71.24 ms