tx · CiDjp7Z5qoJtJ5XavpMGk1kM4rsrtrL7E54b7AktrfZB

3N7AyMYR2ovan7TNvPE9jMRTejZyXPcV9NP:  -0.05000000 Waves

2021.08.23 19:15 [1671196] smart account 3N7AyMYR2ovan7TNvPE9jMRTejZyXPcV9NP > SELF 0.00000000 Waves

{ "type": 13, "id": "CiDjp7Z5qoJtJ5XavpMGk1kM4rsrtrL7E54b7AktrfZB", "fee": 5000000, "feeAssetId": null, "timestamp": 1629735345036, "version": 2, "chainId": 84, "sender": "3N7AyMYR2ovan7TNvPE9jMRTejZyXPcV9NP", "senderPublicKey": "Go3xxijfukFnawU9Jyy1yX4dSyxKT9SYT6Tp3g6iTAjt", "proofs": [ "p5UNtdjzTnWTZrrcEmzX56f7wZBENAika4eqBHATvZiPaDycLpB3Fw5py4zARH56PYFEyxSsvf9xSXGp1mzQLfM" ], "script": "base64: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", "height": 1671196, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DnBq9Q8gpE7Ume3vPDXSU3WHAhhJUrXF3DL7EHLusSY5 Next: 71sAFQK4iHoqYqzPGHyaNJUThHUo5UzTmhTU6Eduyn3r Diff:
OldNewDifferences
2424 func k (l,m,n) = {
2525 let o = fraction(m, n, (n + l))
2626 let p = fraction(o, (i - j), i)
27- p
27+ (p - 1)
2828 }
2929
3030
101101 }
102102 else throw("Strict value is not equal to itself.")
103103 }
104- else throw(("difw" + toString(D)))
104+ else throw(((((("difu= " + toString(B)) + " / difs= ") + toString(C)) + " / difw= ") + toString(D)))
105105 else throw("Strict value is not equal to itself.")
106106 }
107107 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = addressFromStringValue(value("3NDD3ifAC17cLzxuYqsgXDRY9DTQ5BqmvwL"))
55
66 let b = addressFromStringValue(value("3NAzES7pSjfoHsKNumP5HRtSt3qadbqnHip"))
77
88 let c = addressFromStringValue(value("3MrBtdped4oUFs1BvLNu53Dm1AMGiTHkT9B"))
99
1010 let d = base58'3Tg4GRpKeek5wWAQRJKH1ucjMuKNom3f2h67WNNu6xVS'
1111
1212 let e = base58'gAAmMoquySsX6q5EmzciFfB8RecAhZR9W1HKNntNekL'
1313
1414 let f = base58'89G3XEYzMSztS6RPN5h2da7j43r4zgKufReZWn1MqX7g'
1515
1616 let g = addressFromStringValue("3N97G98bPF5ghnZ1iMmQ7tMH6MBsNZnS272")
1717
1818 let h = 100000000
1919
2020 let i = 1000000
2121
2222 let j = 3000
2323
2424 func k (l,m,n) = {
2525 let o = fraction(m, n, (n + l))
2626 let p = fraction(o, (i - j), i)
27- p
27+ (p - 1)
2828 }
2929
3030
3131 @Callable(q)
3232 func call1 (n,r) = if ((q.caller != g))
3333 then throw("only admin")
3434 else {
3535 let s = getIntegerValue(a, "A_asset_balance")
3636 if ((s == s))
3737 then {
3838 let t = getIntegerValue(a, "B_asset_balance")
3939 if ((t == t))
4040 then {
4141 let u = getIntegerValue(c, "A_asset_balance")
4242 if ((u == u))
4343 then {
4444 let v = getIntegerValue(c, "B_asset_balance")
4545 if ((v == v))
4646 then {
4747 let w = getIntegerValue(b, "A_asset_balance")
4848 if ((w == w))
4949 then {
5050 let x = getIntegerValue(b, "B_asset_balance")
5151 if ((x == x))
5252 then {
5353 let y = assetBalance(this, e)
5454 if ((y == y))
5555 then {
5656 let z = assetBalance(this, d)
5757 if ((z == z))
5858 then {
5959 let A = assetBalance(this, f)
6060 if ((A == A))
6161 then {
6262 let B = k(s, t, (n * h))
6363 if ((B == B))
6464 then {
6565 let C = k(v, u, B)
6666 if ((C == C))
6767 then {
6868 let D = k(w, x, C)
6969 if ((D == D))
7070 then if ((D > ((n * h) + r)))
7171 then {
7272 let E = invoke(a, "exchange", [1], [AttachedPayment(d, (n * h))])
7373 if ((E == E))
7474 then {
7575 let F = (assetBalance(this, e) - y)
7676 if ((F == F))
7777 then {
7878 let G = invoke(c, "exchange", [1], [AttachedPayment(e, F)])
7979 if ((G == G))
8080 then {
8181 let H = (assetBalance(this, f) - A)
8282 if ((H == H))
8383 then {
8484 let I = invoke(b, "exchange", [1], [AttachedPayment(f, H)])
8585 if ((I == I))
8686 then {
8787 let J = (assetBalance(this, d) - z)
8888 if ((J == J))
8989 then if ((J > r))
9090 then [IntegerEntry("debug", J)]
9191 else throw(("diffw" + toString(J)))
9292 else throw("Strict value is not equal to itself.")
9393 }
9494 else throw("Strict value is not equal to itself.")
9595 }
9696 else throw("Strict value is not equal to itself.")
9797 }
9898 else throw("Strict value is not equal to itself.")
9999 }
100100 else throw("Strict value is not equal to itself.")
101101 }
102102 else throw("Strict value is not equal to itself.")
103103 }
104- else throw(("difw" + toString(D)))
104+ else throw(((((("difu= " + toString(B)) + " / difs= ") + toString(C)) + " / difw= ") + toString(D)))
105105 else throw("Strict value is not equal to itself.")
106106 }
107107 else throw("Strict value is not equal to itself.")
108108 }
109109 else throw("Strict value is not equal to itself.")
110110 }
111111 else throw("Strict value is not equal to itself.")
112112 }
113113 else throw("Strict value is not equal to itself.")
114114 }
115115 else throw("Strict value is not equal to itself.")
116116 }
117117 else throw("Strict value is not equal to itself.")
118118 }
119119 else throw("Strict value is not equal to itself.")
120120 }
121121 else throw("Strict value is not equal to itself.")
122122 }
123123 else throw("Strict value is not equal to itself.")
124124 }
125125 else throw("Strict value is not equal to itself.")
126126 }
127127 else throw("Strict value is not equal to itself.")
128128 }
129129
130130
131131
132132 @Callable(q)
133133 func call2 (n,r) = if ((q.caller != g))
134134 then throw("only admin")
135135 else {
136136 let y = assetBalance(this, e)
137137 let z = assetBalance(this, d)
138138 let A = assetBalance(this, f)
139139 if (if (if ((y == y))
140140 then (z == z)
141141 else false)
142142 then (A == A)
143143 else false)
144144 then {
145145 let E = invoke(b, "exchange", [1], [AttachedPayment(d, (n * h))])
146146 if ((E == E))
147147 then {
148148 let H = (assetBalance(this, f) - A)
149149 if ((H == H))
150150 then {
151151 let G = invoke(c, "exchange", [1], [AttachedPayment(f, H)])
152152 if ((G == G))
153153 then {
154154 let F = (assetBalance(this, e) - y)
155155 if ((F == F))
156156 then {
157157 let I = invoke(a, "exchange", [1], [AttachedPayment(e, F)])
158158 if ((I == I))
159159 then {
160160 let J = (assetBalance(this, d) - z)
161161 if ((J == J))
162162 then if ((J > r))
163163 then {
164164 let K = "ok"
165165 [IntegerEntry("debug", J)]
166166 }
167167 else throw(toString(J))
168168 else throw("strict")
169169 }
170170 else throw("strict")
171171 }
172172 else throw("strict")
173173 }
174174 else throw("strict")
175175 }
176176 else throw("strict")
177177 }
178178 else throw("strict")
179179 }
180180 else throw("Strict")
181181 }
182182
183183
184184 @Verifier(L)
185185 func M () = sigVerify(L.bodyBytes, L.proofs[0], L.senderPublicKey)
186186

github/deemru/w8io/169f3d6 
45.37 ms