tx · FZU3x2ej42T7QXdfRqysebUgF2r5VGBVpLpPLzyXRUCv

3NApQZND35BcskVdo5Ukk7gSyP1148wtktt:  -0.01400000 Waves

2019.09.16 21:43 [679161] smart account 3NApQZND35BcskVdo5Ukk7gSyP1148wtktt > SELF 0.00000000 Waves

{ "type": 13, "id": "FZU3x2ej42T7QXdfRqysebUgF2r5VGBVpLpPLzyXRUCv", "fee": 1400000, "feeAssetId": null, "timestamp": 1568659370737, "version": 1, "sender": "3NApQZND35BcskVdo5Ukk7gSyP1148wtktt", "senderPublicKey": "Hf6mTifVmE4QjnGG5MrTpZxwegLPYVUkrUnGYGE1hrVh", "proofs": [ "21cpi2JLikX8UduJp2fzD6sK5TFMXJNkecNinB2YNAemXzfv9acQZjmsTLVAhLbhnjYP9KoRtgtSczKHeUJdU88R" ], "script": "base64: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ZWYzBQAAAAckbWF0Y2gyBAAAAAlpbmNMZXZlbDMJAABpAAAAAgkAAGgAAAACBQAAAAlyZWZBbW91bnQFAAAABmxldmVsMwAAAAAAAAAD6AkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAABHJlZjMFAAAACWluY0xldmVsMwkABEwAAAACCQEAAAAWcmVjb3JkQmFsYW5jZUluY3JlbWVudAAAAAYFAAAABHJlZjMFAAAADXdpbm5lckFkZHJlc3MFAAAACWluY0xldmVsMwIAAAACbDMFAAAABHR4aWQFAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAADWNoYW5nZUFkZHJlc3MJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxBQAAAAlpbmNMZXZlbDIFAAAACWluY0xldmVsMwkABEwAAAACCQEAAAAWcmVjb3JkQmFsYW5jZUluY3JlbWVudAAAAAYFAAAADWNoYW5nZUFkZHJlc3MFAAAADXdpbm5lckFkZHJlc3MJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxBQAAAAlpbmNMZXZlbDIFAAAACWluY0xldmVsMwIAAAAGY2hhbmdlBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAFAAAAA25pbAkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAADWNoYW5nZUFkZHJlc3MJAABlAAAAAgkAAGUAAAACBQAAAAlyZWZBbW91bnQFAAAACWluY0xldmVsMQUAAAAJaW5jTGV2ZWwyCQAETAAAAAIJAQAAABZyZWNvcmRCYWxhbmNlSW5jcmVtZW50AAAABgUAAAANY2hhbmdlQWRkcmVzcwUAAAANd2lubmVyQWRkcmVzcwkAAGUAAAACCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxBQAAAAlpbmNMZXZlbDICAAAABmNoYW5nZQUAAAAEdHhpZAUAAAAJdGltZXN0YW1wBQAAAANuaWwJAARMAAAAAgkBAAAAEGJhbGFuY2VJbmNyZW1lbnQAAAACBQAAAA1jaGFuZ2VBZGRyZXNzCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxCQAETAAAAAIJAQAAABZyZWNvcmRCYWxhbmNlSW5jcmVtZW50AAAABgUAAAANY2hhbmdlQWRkcmVzcwUAAAANd2lubmVyQWRkcmVzcwkAAGUAAAACBQAAAAlyZWZBbW91bnQFAAAACWluY0xldmVsMQIAAAAGY2hhbmdlBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAFAAAAA25pbAkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAADWNoYW5nZUFkZHJlc3MFAAAACXJlZkFtb3VudAkABEwAAAACCQEAAAAWcmVjb3JkQmFsYW5jZUluY3JlbWVudAAAAAYFAAAADWNoYW5nZUFkZHJlc3MFAAAADXdpbm5lckFkZHJlc3MFAAAACXJlZkFtb3VudAIAAAAGY2hhbmdlBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIIBQAAAAFpAAAAA2ZlZQUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAADXdpbm5lckFkZHJlc3MJAABlAAAAAgUAAAAGYW1vdW50BQAAAAlyZWZBbW91bnQFAAAACmJldEFzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAhkZWxlZ2F0ZQAAAAMAAAAKZGVsZWdhdGVUbwAAABFlbmFibGVBdXRvQXBwcm92ZQAAABBlbmFibGVBdXRvQ2FuY2VsCQEAAAAIcmVwYXlGZWUAAAAFBQAAAAFpCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJZGVsZWdhdGVfBQAAAApkZWxlZ2F0ZVRvAgAAAAhfYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzCQAETAAAAAIJAQAAAAlEYXRhRW50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", "chainId": 84, "height": 679161, "spentComplexity": 0 } View: original | compacted Prev: 9EduTHtEjczMrDzN1FyDBGVk7JUNR3VVbw7xYQ7oA9hE Next: C6ewsMT7WfdUNprYC6VAsc3zEig2n4r8vr1W9ygnU3SH Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = [DataEntry("sportr", "AcTzTgW1QbJK4Qu6hCsUCLjpxUyD3dofv8xq2CAPbzKJ"), DataEntry("dex", "WAVES")]
55
6-let b = 5000000
6+let b = addressFromStringValue("")
77
88 let c = 5000000
99
10-let d = 30000000
10+let d = 5000000
1111
12-let e = 5000000
12+let e = 30000000
1313
14-let f = 250
14+let f = 5000000
1515
16-let g = 150
16+let g = ((1000 * 60) * 5)
1717
18-let h = 100
18+let h = 250
1919
20-let i = 500
20+let i = 150
2121
22-let j = 10
22+let j = 100
2323
24-let k = "3NAxsbHxS63azdAicVvLGsxjAQ9DsK6L4NL"
24+let k = 500
2525
26-let l = 1000000
26+let l = 10
2727
28-func m (n,o) = {
29- let p = toBase58String(n.caller.bytes)
30- let q = ("delegate_" + p)
31- if ((getBoolean(this, ((q + "_") + o)) == true))
28+let m = "3NAxsbHxS63azdAicVvLGsxjAQ9DsK6L4NL"
29+
30+let n = 1000000
31+
32+func o (p,q) = {
33+ let r = toBase58String(p.caller.bytes)
34+ let s = ("delegate_" + r)
35+ if ((getBoolean(this, ((s + "_") + q)) == true))
3236 then {
33- let r = getString(this, (q + "_address"))
34- if ($isInstanceOf(r, "String"))
37+ let t = getString(this, (s + "_address"))
38+ if ($isInstanceOf(t, "String"))
3539 then {
36- let s = r
37- s
40+ let u = t
41+ u
3842 }
39- else p
43+ else r
4044 }
41- else p
45+ else r
4246 }
4347
4448
45-func t (n) = if ((n.fee > b))
49+func v (p) = if ((p.fee > c))
4650 then throw("unreasonable large fee")
47- else if ((n.feeAssetId != unit))
51+ else if ((p.feeAssetId != unit))
4852 then throw("fee must be in WAVES")
4953 else true
5054
5155
52-func u (n,v,w,x,y) = if (t(n))
53- then if (if ((w > 0))
54- then isDefined(x)
56+func w (p,x,y,z,A) = if (v(p))
57+ then if (if ((y > 0))
58+ then isDefined(z)
5559 else false)
56- then ScriptResult(v, TransferSet([ScriptTransfer(n.caller, n.fee, unit), ScriptTransfer(extract(x), w, y)]))
57- else ScriptResult(v, TransferSet([ScriptTransfer(n.caller, n.fee, unit)]))
60+ then ScriptResult(x, TransferSet([ScriptTransfer(p.caller, p.fee, unit), ScriptTransfer(extract(z), y, A)]))
61+ else ScriptResult(x, TransferSet([ScriptTransfer(p.caller, p.fee, unit)]))
5862 else throw("error")
5963
6064
61-func z (n,A) = (getString(this, (A + "_owner")) == toBase58String(n.caller.bytes))
65+func B (p,C) = (getString(this, (C + "_owner")) == toBase58String(p.caller.bytes))
6266
6367
64-func B (A) = (extract(getInteger(this, (A + "_amount"))) - extract(getInteger(this, (A + "_spent"))))
68+func D (C) = (extract(getInteger(this, (C + "_amount"))) - extract(getInteger(this, (C + "_spent"))))
6569
6670
67-func C (A) = {
68- let D = getInteger(this, (A + "_defeat"))
69- if ((D == 1))
71+func E (C) = {
72+ let F = getInteger(this, (C + "_defeat"))
73+ if ((F == 1))
7074 then true
71- else (D == 3)
75+ else (F == 3)
7276 }
7377
7478
75-func E (F) = getString(this, (F + "_referer"))
79+func G (H) = getString(this, (H + "_referer"))
7680
7781
78-func G (H,I) = {
79- let J = (H + "_balance")
80- DataEntry(J, (I + {
81- let r = getInteger(this, J)
82- if ($isInstanceOf(r, "Int"))
82+func I (J,K) = {
83+ let L = (J + "_balance")
84+ DataEntry(L, (K + {
85+ let t = getInteger(this, L)
86+ if ($isInstanceOf(t, "Int"))
8387 then {
84- let K = r
85- K
88+ let M = t
89+ M
8690 }
8791 else 0
8892 }))
8993 }
9094
9195
92-func L (H,M,I,N,O,P) = DataEntry(((("fund_" + H) + "_") + O), ((((((M + ":") + toString(I)) + ":") + N) + ":") + P))
96+func N (J,O,K,P,Q,R) = DataEntry(((("fund_" + J) + "_") + Q), ((((((O + ":") + toString(K)) + ":") + P) + ":") + R))
9397
9498
95-func Q (R) = {
96- let S = getStringValue(a, R)
97- if ((S == "WAVES"))
99+func S (T) = {
100+ let U = getStringValue(a, T)
101+ if ((U == "WAVES"))
98102 then unit
99- else fromBase58String(S)
103+ else fromBase58String(U)
100104 }
101105
102106
103-func T (U) = if ((U == unit))
107+func V (W) = if ((W == unit))
104108 then "WAVES"
105- else toBase58String(extract(U))
109+ else toBase58String(extract(W))
106110
107111
108-@Callable(n)
109-func bet (V,W,X,Y,R) = {
110- let Z = ("market_" + V)
111- let y = Q(R)
112- let M = toBase58String(n.caller.bytes)
113- let aa = extract(n.payment)
114- if ((aa.assetId != y))
115- then throw(((("bet must be in asset " + T(y)) + " for adapter ") + R))
116- else if ((c > aa.amount))
117- then throw(("minimum allowed bet is " + toString(c)))
118- else if (if (if ((R == "dex"))
119- then (d > aa.amount)
112+@Callable(p)
113+func bet (X,Y,Z,aa,T) = {
114+ let ab = ("market_" + X)
115+ let A = S(T)
116+ let O = toBase58String(p.caller.bytes)
117+ let ac = extract(p.payment)
118+ if ((ac.assetId != A))
119+ then throw(((("bet must be in asset " + V(A)) + " for adapter ") + T))
120+ else if ((d > ac.amount))
121+ then throw(("minimum allowed bet is " + toString(d)))
122+ else if (if (if ((T == "dex"))
123+ then (e > ac.amount)
120124 else false)
121- then (getBoolean(this, Z) == unit)
125+ then (getBoolean(this, ab) == unit)
122126 else false)
123- then throw(("min amount to create first bet is " + toString(d)))
124- else if (if ((X != "for"))
125- then (X != "against")
127+ then throw(("min amount to create first bet is " + toString(e)))
128+ else if (if ((Z != "for"))
129+ then (Z != "against")
126130 else false)
127131 then throw("unexpected side")
128132 else {
129- let A = (((((("bet_" + V) + "_") + toBase58String(n.caller.bytes)) + "_") + take(toBase58String(n.transactionId), 15)) + "_")
130- let ab = ((("seq_" + V) + "_") + W)
131- let ac = {
132- let r = getInteger(this, ab)
133- if ($isInstanceOf(r, "Int"))
133+ let C = (((((("bet_" + X) + "_") + toBase58String(p.caller.bytes)) + "_") + take(toBase58String(p.transactionId), 15)) + "_")
134+ let ad = ((("seq_" + X) + "_") + Y)
135+ let ae = {
136+ let t = getInteger(this, ad)
137+ if ($isInstanceOf(t, "Int"))
134138 then {
135- let ad = r
136- (ad + 1)
139+ let af = t
140+ (af + 1)
137141 }
138142 else 1
139143 }
140- u(n, WriteSet([DataEntry((A + "owner"), M), DataEntry((A + "event"), V), DataEntry((A + "subevent"), W), DataEntry((A + "side"), X), DataEntry((A + "odds"), Y), DataEntry((A + "amount"), aa.amount), DataEntry((A + "spent"), 0), DataEntry((A + "adapter"), R), DataEntry((A + "timestamp"), lastBlock.timestamp), DataEntry((A + "sequence"), ac), DataEntry(Z, true), DataEntry(ab, ac)]), 0, unit, unit)
144+ w(p, WriteSet([DataEntry((C + "owner"), O), DataEntry((C + "event"), X), DataEntry((C + "subevent"), Y), DataEntry((C + "side"), Z), DataEntry((C + "odds"), aa), DataEntry((C + "amount"), ac.amount), DataEntry((C + "spent"), 0), DataEntry((C + "adapter"), T), DataEntry((C + "timestamp"), lastBlock.timestamp), DataEntry((C + "sequence"), ae), DataEntry(ab, true), DataEntry(ad, ae)]), 0, unit, unit)
141145 }
142146 }
143147
144148
145149
146-@Callable(n)
147-func cancel (A) = if ((getString(this, (A + "_owner")) != m(n, "autocancel")))
150+@Callable(p)
151+func cancel (C) = if ((getString(this, (C + "_owner")) != o(p, "autocancel")))
148152 then throw("must be owner or its delegate to cancel")
149153 else {
150- let R = getStringValue(this, (A + "_adapter"))
151- let w = getIntegerValue(this, (A + "_amount"))
152- let ae = getIntegerValue(this, (A + "_spent"))
153- let af = (w - ae)
154- u(n, WriteSet([DataEntry((A + "_spent"), w), DataEntry((A + "_cancel_amount"), af), DataEntry((A + "_cancel_tx"), toBase58String(n.transactionId))]), af, n.caller, Q(R))
154+ let T = getStringValue(this, (C + "_adapter"))
155+ let y = getIntegerValue(this, (C + "_amount"))
156+ let ag = getIntegerValue(this, (C + "_spent"))
157+ let ah = (y - ag)
158+ w(p, WriteSet([DataEntry((C + "_spent"), y), DataEntry((C + "_cancel_amount"), ah), DataEntry((C + "_cancel_tx"), toBase58String(p.transactionId))]), ah, p.caller, S(T))
155159 }
156160
157161
158162
159-@Callable(n)
160-func betMatch (ag,ah) = if ((getString(this, (ag + "_event")) != getString(this, (ah + "_event"))))
163+@Callable(p)
164+func betMatch (ai,aj) = if ((getString(this, (ai + "_event")) != getString(this, (aj + "_event"))))
161165 then throw("event id must match")
162- else if ((getString(this, (ag + "_subevent")) != getString(this, (ah + "_subevent"))))
166+ else if ((getString(this, (ai + "_subevent")) != getString(this, (aj + "_subevent"))))
163167 then throw("subevent id must match")
164- else if ((getString(this, (ag + "_side")) != "for"))
168+ else if ((getString(this, (ai + "_side")) != "for"))
165169 then throw("invalid *for* bet")
166- else if ((getString(this, (ah + "_side")) != "against"))
170+ else if ((getString(this, (aj + "_side")) != "against"))
167171 then throw("invalid *against* bet")
168172 else {
169- let R = getStringValue(this, (ag + "_adapter"))
170- if ((R != getStringValue(this, (ah + "_adapter"))))
173+ let T = getStringValue(this, (ai + "_adapter"))
174+ if ((T != getStringValue(this, (aj + "_adapter"))))
171175 then throw("bets has different adapters")
172176 else {
173- let ai = getStringValue(this, (ag + "_owner"))
174- let aj = getStringValue(this, (ah + "_owner"))
175- let ak = extract(getString(this, (ag + "_event")))
176- let al = (((((((("match_" + ak) + "_") + takeRight(ai, 10)) + "_") + takeRight(aj, 10)) + "_") + toBase58String(n.transactionId)) + "_")
177- let Y = extract(getInteger(this, (ag + "_odds")))
178- let am = B(ag)
179- let an = B(ah)
180- let ao = am
181- let ap = ((an * 100) / (Y - 100))
182- let aq = if ((ao > ap))
183- then ap
184- else ao
185- if ((e > aq))
177+ let ak = getStringValue(this, (ai + "_owner"))
178+ let al = getStringValue(this, (aj + "_owner"))
179+ let am = extract(getString(this, (ai + "_event")))
180+ let an = (((((((("match_" + am) + "_") + takeRight(ak, 10)) + "_") + takeRight(al, 10)) + "_") + takeRight(toBase58String(p.transactionId), 10)) + "_")
181+ let aa = extract(getInteger(this, (ai + "_odds")))
182+ let ao = D(ai)
183+ let ap = D(aj)
184+ let aq = ao
185+ let ar = ((ap * 100) / (aa - 100))
186+ let as = if ((aq > ar))
187+ then ar
188+ else aq
189+ if ((f > as))
186190 then throw("match nominal too low")
187191 else {
188- let ar = aq
189- let as = ((aq * (Y - 100)) / 100)
190- let at = (ar + extract(getInteger(this, (ag + "_spent"))))
191- let au = (as + extract(getInteger(this, (ah + "_spent"))))
192- if ((at > extract(getInteger(this, (ag + "_amount")))))
192+ let at = as
193+ let au = ((as * (aa - 100)) / 100)
194+ let av = (at + extract(getInteger(this, (ai + "_spent"))))
195+ let aw = (au + extract(getInteger(this, (aj + "_spent"))))
196+ if ((av > extract(getInteger(this, (ai + "_amount")))))
193197 then throw("invalid match")
194- else if ((au > extract(getInteger(this, (ah + "_amount")))))
198+ else if ((aw > extract(getInteger(this, (aj + "_amount")))))
195199 then throw("invalid match")
196- else u(n, WriteSet([DataEntry((al + "amount"), (ar + as)), DataEntry((al + "adapter"), R), DataEntry((al + "for"), ag), DataEntry((al + "against"), ah), DataEntry((ag + "_spent"), at), DataEntry((ah + "_spent"), au)]), 0, unit, unit)
200+ else w(p, WriteSet([DataEntry((an + "amount"), (at + au)), DataEntry((an + "adapter"), T), DataEntry((an + "for"), ai), DataEntry((an + "against"), aj), DataEntry((ai + "_spent"), av), DataEntry((aj + "_spent"), aw)]), 0, unit, unit)
197201 }
198202 }
199203 }
200204
201205
202206
203-@Callable(n)
204-func approveDefeat (av,aw) = if (if (isDefined(getInteger(this, (av + "_defeat"))))
205- then (aw == 2)
207+@Callable(p)
208+func approveDefeat (ax,ay) = if (if (isDefined(getInteger(this, (ax + "_defeat"))))
209+ then (ay == 2)
206210 else false)
207211 then throw("can't dispute after approve")
208- else if ((getString(this, (av + "_owner")) != m(n, "autoapprove")))
212+ else if ((getString(this, (ax + "_owner")) != o(p, "autoapprove")))
209213 then throw("must be owner or its delegate to approve")
210- else u(n, WriteSet([DataEntry((av + "_defeat"), aw)]), 0, unit, unit)
214+ else w(p, WriteSet([DataEntry((ax + "_defeat"), ay)]), 0, unit, unit)
211215
212216
213217
214-@Callable(n)
215-func payWinner (ax) = if (!(t(n)))
218+@Callable(p)
219+func judgeDexMatch (az,Q) = if ((getStringValue(this, (az + "_adapter")) != "dex"))
220+ then throw("method is only for dex matches")
221+ else {
222+ let ai = getStringValue(this, (az + "_for"))
223+ let aj = getStringValue(this, (az + "_for"))
224+ let X = getStringValue(this, (ai + "_event"))
225+ let aA = split(X, ":")
226+ let aB = aA[1]
227+ let aC = parseIntValue(aA[2])
228+ let aD = parseIntValue(aA[3])
229+ let aE = ((aD * 1000) + g)
230+ if ((aE > lastBlock.timestamp))
231+ then throw(("please wait for timestamp " + toString(aE)))
232+ else {
233+ let aF = getIntegerValue(b, (X + "_rate"))
234+ let aG = if ((aF >= aC))
235+ then aj
236+ else ai
237+ w(p, WriteSet([DataEntry((aG + "_defeat"), 1)]), 0, unit, unit)
238+ }
239+ }
240+
241+
242+
243+@Callable(p)
244+func payWinner (az) = if (!(v(p)))
216245 then throw("error")
217- else if (isDefined(getInteger(this, (ax + "_paid"))))
246+ else if (isDefined(getInteger(this, (az + "_paid"))))
218247 then throw("already paid")
219248 else {
220- let R = getStringValue(this, (ax + "_adapter"))
221- let y = Q(R)
222- let ay = extract(getString(this, (ax + "_for")))
223- let az = extract(getString(this, (ax + "_against")))
224- let aA = C(ay)
225- let aB = C(az)
226- if (if (!(aA))
227- then !(aB)
249+ let T = getStringValue(this, (az + "_adapter"))
250+ let A = S(T)
251+ let aH = extract(getString(this, (az + "_for")))
252+ let aI = extract(getString(this, (az + "_against")))
253+ let aJ = E(aH)
254+ let aK = E(aI)
255+ if (if (!(aJ))
256+ then !(aK)
228257 else false)
229258 then throw("no side approved defeat")
230259 else {
231- let aC = if (aA)
232- then az
233- else ay
234- let aD = getStringValue(this, (aC + "_owner"))
235- let w = extract(getInteger(this, (ax + "_amount")))
236- let aE = toBase58String(n.transactionId)
237- let P = toString(lastBlock.timestamp)
238- let aF = ((w * j) / 1000)
239- ScriptResult(WriteSet([DataEntry((ax + "_paid"), toBase58String(n.transactionId)), {
240- let r = E(aD)
241- if ($isInstanceOf(r, "String"))
260+ let aL = if (aJ)
261+ then aI
262+ else aH
263+ let aM = getStringValue(this, (aL + "_owner"))
264+ let y = extract(getInteger(this, (az + "_amount")))
265+ let aN = toBase58String(p.transactionId)
266+ let R = toString(lastBlock.timestamp)
267+ let aO = ((y * l) / 1000)
268+ ScriptResult(WriteSet([DataEntry((az + "_paid"), toBase58String(p.transactionId)), {
269+ let t = G(aM)
270+ if ($isInstanceOf(t, "String"))
242271 then {
243- let aG = r
244- let aH = ((aF * f) / 1000)
245- let aI = ((aF * i) / 1000)
246-[G(aD, aI), L(aD, aD, aI, "cashback", aE, P), G(aG, aH), L(aG, aD, aH, "l1", aE, P), {
247- let aJ = E(aG)
248- if ($isInstanceOf(aJ, "String"))
272+ let aP = t
273+ let aQ = ((aO * h) / 1000)
274+ let aR = ((aO * k) / 1000)
275+[I(aM, aR), N(aM, aM, aR, "cashback", aN, R), I(aP, aQ), N(aP, aM, aQ, "l1", aN, R), {
276+ let aS = G(aP)
277+ if ($isInstanceOf(aS, "String"))
249278 then {
250- let aK = aJ
251- let aL = ((aF * g) / 1000)
252-[G(aK, aL), L(aK, aD, aL, "l2", aE, P), {
253- let aM = E(aK)
254- if ($isInstanceOf(aM, "String"))
279+ let aT = aS
280+ let aU = ((aO * i) / 1000)
281+[I(aT, aU), N(aT, aM, aU, "l2", aN, R), {
282+ let aV = G(aT)
283+ if ($isInstanceOf(aV, "String"))
255284 then {
256- let aN = aM
257- let aO = ((aF * h) / 1000)
258-[G(aN, aO), L(aN, aD, aO, "l3", aE, P), G(k, (((aF - aH) - aL) - aO)), L(k, aD, (((aF - aH) - aL) - aO), "change", aE, P)]
285+ let aW = aV
286+ let aX = ((aO * j) / 1000)
287+[I(aW, aX), N(aW, aM, aX, "l3", aN, R), I(m, (((aO - aQ) - aU) - aX)), N(m, aM, (((aO - aQ) - aU) - aX), "change", aN, R)]
259288 }
260- else [G(k, ((aF - aH) - aL)), L(k, aD, ((aF - aH) - aL), "change", aE, P)]
289+ else [I(m, ((aO - aQ) - aU)), N(m, aM, ((aO - aQ) - aU), "change", aN, R)]
261290 }]
262291 }
263- else [G(k, (aF - aH)), L(k, aD, (aF - aH), "change", aE, P)]
292+ else [I(m, (aO - aQ)), N(m, aM, (aO - aQ), "change", aN, R)]
264293 }]
265294 }
266- else [G(k, aF), L(k, aD, aF, "change", aE, P)]
267- }]), TransferSet([ScriptTransfer(n.caller, n.fee, unit), ScriptTransfer(addressFromStringValue(aD), (w - aF), y)]))
295+ else [I(m, aO), N(m, aM, aO, "change", aN, R)]
296+ }]), TransferSet([ScriptTransfer(p.caller, p.fee, unit), ScriptTransfer(addressFromStringValue(aM), (y - aO), A)]))
268297 }
269298 }
270299
271300
272301
273-@Callable(n)
274-func delegate (aP,aQ,aR) = u(n, WriteSet([DataEntry((("delegate_" + aP) + "_address"), toBase58String(n.caller.bytes)), DataEntry((("delegate_" + aP) + "_autoapprove"), aQ), DataEntry((("delegate_" + aP) + "_autocancel"), aR)]), 0, unit, unit)
302+@Callable(p)
303+func delegate (aY,aZ,ba) = w(p, WriteSet([DataEntry((("delegate_" + aY) + "_address"), toBase58String(p.caller.bytes)), DataEntry((("delegate_" + aY) + "_autoapprove"), aZ), DataEntry((("delegate_" + aY) + "_autocancel"), ba)]), 0, unit, unit)
275304
276305
277306
278-@Callable(n)
279-func withdraw () = if (!(t(n)))
307+@Callable(p)
308+func withdraw () = if (!(v(p)))
280309 then throw("error")
281310 else {
282- let M = toBase58String(n.caller.bytes)
283- let aE = toBase58String(n.transactionId)
284- let J = (M + "_balance")
285- let w = {
286- let r = getInteger(this, J)
287- if ($isInstanceOf(r, "Int"))
311+ let O = toBase58String(p.caller.bytes)
312+ let aN = toBase58String(p.transactionId)
313+ let L = (O + "_balance")
314+ let y = {
315+ let t = getInteger(this, L)
316+ if ($isInstanceOf(t, "Int"))
288317 then {
289- let K = r
290- K
318+ let M = t
319+ M
291320 }
292321 else 0
293322 }
294- if ((l > w))
295- then throw(("Min withdraw amount is" + toString(l)))
296- else ScriptResult(WriteSet([DataEntry(J, 0), DataEntry(((("withdraw_" + M) + "_") + aE), ((toString(w) + ":") + toString(lastBlock.timestamp)))]), TransferSet([ScriptTransfer(n.caller, (w + n.fee), unit)]))
323+ if ((n > y))
324+ then throw(("Min withdraw amount is" + toString(n)))
325+ else ScriptResult(WriteSet([DataEntry(L, 0), DataEntry(((("withdraw_" + O) + "_") + aN), ((toString(y) + ":") + toString(lastBlock.timestamp)))]), TransferSet([ScriptTransfer(p.caller, (y + p.fee), unit)]))
297326 }
298327
299328
300329
301-@Callable(n)
302-func register (aS,aT) = if (!(t(n)))
330+@Callable(p)
331+func register (bb,bc) = if (!(v(p)))
303332 then throw("error")
304- else if ((take(toBase58String(n.transactionId), 3) != "123"))
333+ else if ((take(toBase58String(p.transactionId), 3) != "123"))
305334 then throw("proof of work failed")
306335 else {
307- let M = toBase58String(n.caller.bytes)
308- if (isDefined(E(M)))
336+ let O = toBase58String(p.caller.bytes)
337+ if (isDefined(G(O)))
309338 then throw("Already registered")
310- else ScriptResult(WriteSet([DataEntry((M + "_referer"), aS), DataEntry(((aS + "_referral_") + M), M)]), TransferSet([ScriptTransfer(n.caller, n.fee, unit)]))
339+ else ScriptResult(WriteSet([DataEntry((O + "_referer"), bb), DataEntry(((bb + "_referral_") + O), O)]), TransferSet([ScriptTransfer(p.caller, p.fee, unit)]))
311340 }
312341
313342
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = [DataEntry("sportr", "AcTzTgW1QbJK4Qu6hCsUCLjpxUyD3dofv8xq2CAPbzKJ"), DataEntry("dex", "WAVES")]
55
6-let b = 5000000
6+let b = addressFromStringValue("")
77
88 let c = 5000000
99
10-let d = 30000000
10+let d = 5000000
1111
12-let e = 5000000
12+let e = 30000000
1313
14-let f = 250
14+let f = 5000000
1515
16-let g = 150
16+let g = ((1000 * 60) * 5)
1717
18-let h = 100
18+let h = 250
1919
20-let i = 500
20+let i = 150
2121
22-let j = 10
22+let j = 100
2323
24-let k = "3NAxsbHxS63azdAicVvLGsxjAQ9DsK6L4NL"
24+let k = 500
2525
26-let l = 1000000
26+let l = 10
2727
28-func m (n,o) = {
29- let p = toBase58String(n.caller.bytes)
30- let q = ("delegate_" + p)
31- if ((getBoolean(this, ((q + "_") + o)) == true))
28+let m = "3NAxsbHxS63azdAicVvLGsxjAQ9DsK6L4NL"
29+
30+let n = 1000000
31+
32+func o (p,q) = {
33+ let r = toBase58String(p.caller.bytes)
34+ let s = ("delegate_" + r)
35+ if ((getBoolean(this, ((s + "_") + q)) == true))
3236 then {
33- let r = getString(this, (q + "_address"))
34- if ($isInstanceOf(r, "String"))
37+ let t = getString(this, (s + "_address"))
38+ if ($isInstanceOf(t, "String"))
3539 then {
36- let s = r
37- s
40+ let u = t
41+ u
3842 }
39- else p
43+ else r
4044 }
41- else p
45+ else r
4246 }
4347
4448
45-func t (n) = if ((n.fee > b))
49+func v (p) = if ((p.fee > c))
4650 then throw("unreasonable large fee")
47- else if ((n.feeAssetId != unit))
51+ else if ((p.feeAssetId != unit))
4852 then throw("fee must be in WAVES")
4953 else true
5054
5155
52-func u (n,v,w,x,y) = if (t(n))
53- then if (if ((w > 0))
54- then isDefined(x)
56+func w (p,x,y,z,A) = if (v(p))
57+ then if (if ((y > 0))
58+ then isDefined(z)
5559 else false)
56- then ScriptResult(v, TransferSet([ScriptTransfer(n.caller, n.fee, unit), ScriptTransfer(extract(x), w, y)]))
57- else ScriptResult(v, TransferSet([ScriptTransfer(n.caller, n.fee, unit)]))
60+ then ScriptResult(x, TransferSet([ScriptTransfer(p.caller, p.fee, unit), ScriptTransfer(extract(z), y, A)]))
61+ else ScriptResult(x, TransferSet([ScriptTransfer(p.caller, p.fee, unit)]))
5862 else throw("error")
5963
6064
61-func z (n,A) = (getString(this, (A + "_owner")) == toBase58String(n.caller.bytes))
65+func B (p,C) = (getString(this, (C + "_owner")) == toBase58String(p.caller.bytes))
6266
6367
64-func B (A) = (extract(getInteger(this, (A + "_amount"))) - extract(getInteger(this, (A + "_spent"))))
68+func D (C) = (extract(getInteger(this, (C + "_amount"))) - extract(getInteger(this, (C + "_spent"))))
6569
6670
67-func C (A) = {
68- let D = getInteger(this, (A + "_defeat"))
69- if ((D == 1))
71+func E (C) = {
72+ let F = getInteger(this, (C + "_defeat"))
73+ if ((F == 1))
7074 then true
71- else (D == 3)
75+ else (F == 3)
7276 }
7377
7478
75-func E (F) = getString(this, (F + "_referer"))
79+func G (H) = getString(this, (H + "_referer"))
7680
7781
78-func G (H,I) = {
79- let J = (H + "_balance")
80- DataEntry(J, (I + {
81- let r = getInteger(this, J)
82- if ($isInstanceOf(r, "Int"))
82+func I (J,K) = {
83+ let L = (J + "_balance")
84+ DataEntry(L, (K + {
85+ let t = getInteger(this, L)
86+ if ($isInstanceOf(t, "Int"))
8387 then {
84- let K = r
85- K
88+ let M = t
89+ M
8690 }
8791 else 0
8892 }))
8993 }
9094
9195
92-func L (H,M,I,N,O,P) = DataEntry(((("fund_" + H) + "_") + O), ((((((M + ":") + toString(I)) + ":") + N) + ":") + P))
96+func N (J,O,K,P,Q,R) = DataEntry(((("fund_" + J) + "_") + Q), ((((((O + ":") + toString(K)) + ":") + P) + ":") + R))
9397
9498
95-func Q (R) = {
96- let S = getStringValue(a, R)
97- if ((S == "WAVES"))
99+func S (T) = {
100+ let U = getStringValue(a, T)
101+ if ((U == "WAVES"))
98102 then unit
99- else fromBase58String(S)
103+ else fromBase58String(U)
100104 }
101105
102106
103-func T (U) = if ((U == unit))
107+func V (W) = if ((W == unit))
104108 then "WAVES"
105- else toBase58String(extract(U))
109+ else toBase58String(extract(W))
106110
107111
108-@Callable(n)
109-func bet (V,W,X,Y,R) = {
110- let Z = ("market_" + V)
111- let y = Q(R)
112- let M = toBase58String(n.caller.bytes)
113- let aa = extract(n.payment)
114- if ((aa.assetId != y))
115- then throw(((("bet must be in asset " + T(y)) + " for adapter ") + R))
116- else if ((c > aa.amount))
117- then throw(("minimum allowed bet is " + toString(c)))
118- else if (if (if ((R == "dex"))
119- then (d > aa.amount)
112+@Callable(p)
113+func bet (X,Y,Z,aa,T) = {
114+ let ab = ("market_" + X)
115+ let A = S(T)
116+ let O = toBase58String(p.caller.bytes)
117+ let ac = extract(p.payment)
118+ if ((ac.assetId != A))
119+ then throw(((("bet must be in asset " + V(A)) + " for adapter ") + T))
120+ else if ((d > ac.amount))
121+ then throw(("minimum allowed bet is " + toString(d)))
122+ else if (if (if ((T == "dex"))
123+ then (e > ac.amount)
120124 else false)
121- then (getBoolean(this, Z) == unit)
125+ then (getBoolean(this, ab) == unit)
122126 else false)
123- then throw(("min amount to create first bet is " + toString(d)))
124- else if (if ((X != "for"))
125- then (X != "against")
127+ then throw(("min amount to create first bet is " + toString(e)))
128+ else if (if ((Z != "for"))
129+ then (Z != "against")
126130 else false)
127131 then throw("unexpected side")
128132 else {
129- let A = (((((("bet_" + V) + "_") + toBase58String(n.caller.bytes)) + "_") + take(toBase58String(n.transactionId), 15)) + "_")
130- let ab = ((("seq_" + V) + "_") + W)
131- let ac = {
132- let r = getInteger(this, ab)
133- if ($isInstanceOf(r, "Int"))
133+ let C = (((((("bet_" + X) + "_") + toBase58String(p.caller.bytes)) + "_") + take(toBase58String(p.transactionId), 15)) + "_")
134+ let ad = ((("seq_" + X) + "_") + Y)
135+ let ae = {
136+ let t = getInteger(this, ad)
137+ if ($isInstanceOf(t, "Int"))
134138 then {
135- let ad = r
136- (ad + 1)
139+ let af = t
140+ (af + 1)
137141 }
138142 else 1
139143 }
140- u(n, WriteSet([DataEntry((A + "owner"), M), DataEntry((A + "event"), V), DataEntry((A + "subevent"), W), DataEntry((A + "side"), X), DataEntry((A + "odds"), Y), DataEntry((A + "amount"), aa.amount), DataEntry((A + "spent"), 0), DataEntry((A + "adapter"), R), DataEntry((A + "timestamp"), lastBlock.timestamp), DataEntry((A + "sequence"), ac), DataEntry(Z, true), DataEntry(ab, ac)]), 0, unit, unit)
144+ w(p, WriteSet([DataEntry((C + "owner"), O), DataEntry((C + "event"), X), DataEntry((C + "subevent"), Y), DataEntry((C + "side"), Z), DataEntry((C + "odds"), aa), DataEntry((C + "amount"), ac.amount), DataEntry((C + "spent"), 0), DataEntry((C + "adapter"), T), DataEntry((C + "timestamp"), lastBlock.timestamp), DataEntry((C + "sequence"), ae), DataEntry(ab, true), DataEntry(ad, ae)]), 0, unit, unit)
141145 }
142146 }
143147
144148
145149
146-@Callable(n)
147-func cancel (A) = if ((getString(this, (A + "_owner")) != m(n, "autocancel")))
150+@Callable(p)
151+func cancel (C) = if ((getString(this, (C + "_owner")) != o(p, "autocancel")))
148152 then throw("must be owner or its delegate to cancel")
149153 else {
150- let R = getStringValue(this, (A + "_adapter"))
151- let w = getIntegerValue(this, (A + "_amount"))
152- let ae = getIntegerValue(this, (A + "_spent"))
153- let af = (w - ae)
154- u(n, WriteSet([DataEntry((A + "_spent"), w), DataEntry((A + "_cancel_amount"), af), DataEntry((A + "_cancel_tx"), toBase58String(n.transactionId))]), af, n.caller, Q(R))
154+ let T = getStringValue(this, (C + "_adapter"))
155+ let y = getIntegerValue(this, (C + "_amount"))
156+ let ag = getIntegerValue(this, (C + "_spent"))
157+ let ah = (y - ag)
158+ w(p, WriteSet([DataEntry((C + "_spent"), y), DataEntry((C + "_cancel_amount"), ah), DataEntry((C + "_cancel_tx"), toBase58String(p.transactionId))]), ah, p.caller, S(T))
155159 }
156160
157161
158162
159-@Callable(n)
160-func betMatch (ag,ah) = if ((getString(this, (ag + "_event")) != getString(this, (ah + "_event"))))
163+@Callable(p)
164+func betMatch (ai,aj) = if ((getString(this, (ai + "_event")) != getString(this, (aj + "_event"))))
161165 then throw("event id must match")
162- else if ((getString(this, (ag + "_subevent")) != getString(this, (ah + "_subevent"))))
166+ else if ((getString(this, (ai + "_subevent")) != getString(this, (aj + "_subevent"))))
163167 then throw("subevent id must match")
164- else if ((getString(this, (ag + "_side")) != "for"))
168+ else if ((getString(this, (ai + "_side")) != "for"))
165169 then throw("invalid *for* bet")
166- else if ((getString(this, (ah + "_side")) != "against"))
170+ else if ((getString(this, (aj + "_side")) != "against"))
167171 then throw("invalid *against* bet")
168172 else {
169- let R = getStringValue(this, (ag + "_adapter"))
170- if ((R != getStringValue(this, (ah + "_adapter"))))
173+ let T = getStringValue(this, (ai + "_adapter"))
174+ if ((T != getStringValue(this, (aj + "_adapter"))))
171175 then throw("bets has different adapters")
172176 else {
173- let ai = getStringValue(this, (ag + "_owner"))
174- let aj = getStringValue(this, (ah + "_owner"))
175- let ak = extract(getString(this, (ag + "_event")))
176- let al = (((((((("match_" + ak) + "_") + takeRight(ai, 10)) + "_") + takeRight(aj, 10)) + "_") + toBase58String(n.transactionId)) + "_")
177- let Y = extract(getInteger(this, (ag + "_odds")))
178- let am = B(ag)
179- let an = B(ah)
180- let ao = am
181- let ap = ((an * 100) / (Y - 100))
182- let aq = if ((ao > ap))
183- then ap
184- else ao
185- if ((e > aq))
177+ let ak = getStringValue(this, (ai + "_owner"))
178+ let al = getStringValue(this, (aj + "_owner"))
179+ let am = extract(getString(this, (ai + "_event")))
180+ let an = (((((((("match_" + am) + "_") + takeRight(ak, 10)) + "_") + takeRight(al, 10)) + "_") + takeRight(toBase58String(p.transactionId), 10)) + "_")
181+ let aa = extract(getInteger(this, (ai + "_odds")))
182+ let ao = D(ai)
183+ let ap = D(aj)
184+ let aq = ao
185+ let ar = ((ap * 100) / (aa - 100))
186+ let as = if ((aq > ar))
187+ then ar
188+ else aq
189+ if ((f > as))
186190 then throw("match nominal too low")
187191 else {
188- let ar = aq
189- let as = ((aq * (Y - 100)) / 100)
190- let at = (ar + extract(getInteger(this, (ag + "_spent"))))
191- let au = (as + extract(getInteger(this, (ah + "_spent"))))
192- if ((at > extract(getInteger(this, (ag + "_amount")))))
192+ let at = as
193+ let au = ((as * (aa - 100)) / 100)
194+ let av = (at + extract(getInteger(this, (ai + "_spent"))))
195+ let aw = (au + extract(getInteger(this, (aj + "_spent"))))
196+ if ((av > extract(getInteger(this, (ai + "_amount")))))
193197 then throw("invalid match")
194- else if ((au > extract(getInteger(this, (ah + "_amount")))))
198+ else if ((aw > extract(getInteger(this, (aj + "_amount")))))
195199 then throw("invalid match")
196- else u(n, WriteSet([DataEntry((al + "amount"), (ar + as)), DataEntry((al + "adapter"), R), DataEntry((al + "for"), ag), DataEntry((al + "against"), ah), DataEntry((ag + "_spent"), at), DataEntry((ah + "_spent"), au)]), 0, unit, unit)
200+ else w(p, WriteSet([DataEntry((an + "amount"), (at + au)), DataEntry((an + "adapter"), T), DataEntry((an + "for"), ai), DataEntry((an + "against"), aj), DataEntry((ai + "_spent"), av), DataEntry((aj + "_spent"), aw)]), 0, unit, unit)
197201 }
198202 }
199203 }
200204
201205
202206
203-@Callable(n)
204-func approveDefeat (av,aw) = if (if (isDefined(getInteger(this, (av + "_defeat"))))
205- then (aw == 2)
207+@Callable(p)
208+func approveDefeat (ax,ay) = if (if (isDefined(getInteger(this, (ax + "_defeat"))))
209+ then (ay == 2)
206210 else false)
207211 then throw("can't dispute after approve")
208- else if ((getString(this, (av + "_owner")) != m(n, "autoapprove")))
212+ else if ((getString(this, (ax + "_owner")) != o(p, "autoapprove")))
209213 then throw("must be owner or its delegate to approve")
210- else u(n, WriteSet([DataEntry((av + "_defeat"), aw)]), 0, unit, unit)
214+ else w(p, WriteSet([DataEntry((ax + "_defeat"), ay)]), 0, unit, unit)
211215
212216
213217
214-@Callable(n)
215-func payWinner (ax) = if (!(t(n)))
218+@Callable(p)
219+func judgeDexMatch (az,Q) = if ((getStringValue(this, (az + "_adapter")) != "dex"))
220+ then throw("method is only for dex matches")
221+ else {
222+ let ai = getStringValue(this, (az + "_for"))
223+ let aj = getStringValue(this, (az + "_for"))
224+ let X = getStringValue(this, (ai + "_event"))
225+ let aA = split(X, ":")
226+ let aB = aA[1]
227+ let aC = parseIntValue(aA[2])
228+ let aD = parseIntValue(aA[3])
229+ let aE = ((aD * 1000) + g)
230+ if ((aE > lastBlock.timestamp))
231+ then throw(("please wait for timestamp " + toString(aE)))
232+ else {
233+ let aF = getIntegerValue(b, (X + "_rate"))
234+ let aG = if ((aF >= aC))
235+ then aj
236+ else ai
237+ w(p, WriteSet([DataEntry((aG + "_defeat"), 1)]), 0, unit, unit)
238+ }
239+ }
240+
241+
242+
243+@Callable(p)
244+func payWinner (az) = if (!(v(p)))
216245 then throw("error")
217- else if (isDefined(getInteger(this, (ax + "_paid"))))
246+ else if (isDefined(getInteger(this, (az + "_paid"))))
218247 then throw("already paid")
219248 else {
220- let R = getStringValue(this, (ax + "_adapter"))
221- let y = Q(R)
222- let ay = extract(getString(this, (ax + "_for")))
223- let az = extract(getString(this, (ax + "_against")))
224- let aA = C(ay)
225- let aB = C(az)
226- if (if (!(aA))
227- then !(aB)
249+ let T = getStringValue(this, (az + "_adapter"))
250+ let A = S(T)
251+ let aH = extract(getString(this, (az + "_for")))
252+ let aI = extract(getString(this, (az + "_against")))
253+ let aJ = E(aH)
254+ let aK = E(aI)
255+ if (if (!(aJ))
256+ then !(aK)
228257 else false)
229258 then throw("no side approved defeat")
230259 else {
231- let aC = if (aA)
232- then az
233- else ay
234- let aD = getStringValue(this, (aC + "_owner"))
235- let w = extract(getInteger(this, (ax + "_amount")))
236- let aE = toBase58String(n.transactionId)
237- let P = toString(lastBlock.timestamp)
238- let aF = ((w * j) / 1000)
239- ScriptResult(WriteSet([DataEntry((ax + "_paid"), toBase58String(n.transactionId)), {
240- let r = E(aD)
241- if ($isInstanceOf(r, "String"))
260+ let aL = if (aJ)
261+ then aI
262+ else aH
263+ let aM = getStringValue(this, (aL + "_owner"))
264+ let y = extract(getInteger(this, (az + "_amount")))
265+ let aN = toBase58String(p.transactionId)
266+ let R = toString(lastBlock.timestamp)
267+ let aO = ((y * l) / 1000)
268+ ScriptResult(WriteSet([DataEntry((az + "_paid"), toBase58String(p.transactionId)), {
269+ let t = G(aM)
270+ if ($isInstanceOf(t, "String"))
242271 then {
243- let aG = r
244- let aH = ((aF * f) / 1000)
245- let aI = ((aF * i) / 1000)
246-[G(aD, aI), L(aD, aD, aI, "cashback", aE, P), G(aG, aH), L(aG, aD, aH, "l1", aE, P), {
247- let aJ = E(aG)
248- if ($isInstanceOf(aJ, "String"))
272+ let aP = t
273+ let aQ = ((aO * h) / 1000)
274+ let aR = ((aO * k) / 1000)
275+[I(aM, aR), N(aM, aM, aR, "cashback", aN, R), I(aP, aQ), N(aP, aM, aQ, "l1", aN, R), {
276+ let aS = G(aP)
277+ if ($isInstanceOf(aS, "String"))
249278 then {
250- let aK = aJ
251- let aL = ((aF * g) / 1000)
252-[G(aK, aL), L(aK, aD, aL, "l2", aE, P), {
253- let aM = E(aK)
254- if ($isInstanceOf(aM, "String"))
279+ let aT = aS
280+ let aU = ((aO * i) / 1000)
281+[I(aT, aU), N(aT, aM, aU, "l2", aN, R), {
282+ let aV = G(aT)
283+ if ($isInstanceOf(aV, "String"))
255284 then {
256- let aN = aM
257- let aO = ((aF * h) / 1000)
258-[G(aN, aO), L(aN, aD, aO, "l3", aE, P), G(k, (((aF - aH) - aL) - aO)), L(k, aD, (((aF - aH) - aL) - aO), "change", aE, P)]
285+ let aW = aV
286+ let aX = ((aO * j) / 1000)
287+[I(aW, aX), N(aW, aM, aX, "l3", aN, R), I(m, (((aO - aQ) - aU) - aX)), N(m, aM, (((aO - aQ) - aU) - aX), "change", aN, R)]
259288 }
260- else [G(k, ((aF - aH) - aL)), L(k, aD, ((aF - aH) - aL), "change", aE, P)]
289+ else [I(m, ((aO - aQ) - aU)), N(m, aM, ((aO - aQ) - aU), "change", aN, R)]
261290 }]
262291 }
263- else [G(k, (aF - aH)), L(k, aD, (aF - aH), "change", aE, P)]
292+ else [I(m, (aO - aQ)), N(m, aM, (aO - aQ), "change", aN, R)]
264293 }]
265294 }
266- else [G(k, aF), L(k, aD, aF, "change", aE, P)]
267- }]), TransferSet([ScriptTransfer(n.caller, n.fee, unit), ScriptTransfer(addressFromStringValue(aD), (w - aF), y)]))
295+ else [I(m, aO), N(m, aM, aO, "change", aN, R)]
296+ }]), TransferSet([ScriptTransfer(p.caller, p.fee, unit), ScriptTransfer(addressFromStringValue(aM), (y - aO), A)]))
268297 }
269298 }
270299
271300
272301
273-@Callable(n)
274-func delegate (aP,aQ,aR) = u(n, WriteSet([DataEntry((("delegate_" + aP) + "_address"), toBase58String(n.caller.bytes)), DataEntry((("delegate_" + aP) + "_autoapprove"), aQ), DataEntry((("delegate_" + aP) + "_autocancel"), aR)]), 0, unit, unit)
302+@Callable(p)
303+func delegate (aY,aZ,ba) = w(p, WriteSet([DataEntry((("delegate_" + aY) + "_address"), toBase58String(p.caller.bytes)), DataEntry((("delegate_" + aY) + "_autoapprove"), aZ), DataEntry((("delegate_" + aY) + "_autocancel"), ba)]), 0, unit, unit)
275304
276305
277306
278-@Callable(n)
279-func withdraw () = if (!(t(n)))
307+@Callable(p)
308+func withdraw () = if (!(v(p)))
280309 then throw("error")
281310 else {
282- let M = toBase58String(n.caller.bytes)
283- let aE = toBase58String(n.transactionId)
284- let J = (M + "_balance")
285- let w = {
286- let r = getInteger(this, J)
287- if ($isInstanceOf(r, "Int"))
311+ let O = toBase58String(p.caller.bytes)
312+ let aN = toBase58String(p.transactionId)
313+ let L = (O + "_balance")
314+ let y = {
315+ let t = getInteger(this, L)
316+ if ($isInstanceOf(t, "Int"))
288317 then {
289- let K = r
290- K
318+ let M = t
319+ M
291320 }
292321 else 0
293322 }
294- if ((l > w))
295- then throw(("Min withdraw amount is" + toString(l)))
296- else ScriptResult(WriteSet([DataEntry(J, 0), DataEntry(((("withdraw_" + M) + "_") + aE), ((toString(w) + ":") + toString(lastBlock.timestamp)))]), TransferSet([ScriptTransfer(n.caller, (w + n.fee), unit)]))
323+ if ((n > y))
324+ then throw(("Min withdraw amount is" + toString(n)))
325+ else ScriptResult(WriteSet([DataEntry(L, 0), DataEntry(((("withdraw_" + O) + "_") + aN), ((toString(y) + ":") + toString(lastBlock.timestamp)))]), TransferSet([ScriptTransfer(p.caller, (y + p.fee), unit)]))
297326 }
298327
299328
300329
301-@Callable(n)
302-func register (aS,aT) = if (!(t(n)))
330+@Callable(p)
331+func register (bb,bc) = if (!(v(p)))
303332 then throw("error")
304- else if ((take(toBase58String(n.transactionId), 3) != "123"))
333+ else if ((take(toBase58String(p.transactionId), 3) != "123"))
305334 then throw("proof of work failed")
306335 else {
307- let M = toBase58String(n.caller.bytes)
308- if (isDefined(E(M)))
336+ let O = toBase58String(p.caller.bytes)
337+ if (isDefined(G(O)))
309338 then throw("Already registered")
310- else ScriptResult(WriteSet([DataEntry((M + "_referer"), aS), DataEntry(((aS + "_referral_") + M), M)]), TransferSet([ScriptTransfer(n.caller, n.fee, unit)]))
339+ else ScriptResult(WriteSet([DataEntry((O + "_referer"), bb), DataEntry(((bb + "_referral_") + O), O)]), TransferSet([ScriptTransfer(p.caller, p.fee, unit)]))
311340 }
312341
313342

github/deemru/w8io/873ac7e 
145.54 ms