tx · CCmffCmLvwRKQ1cNukWLgLHSwxa1NwVwcQzc188jNeYg

3MozFTvErSVccnAWsKkbjXLvA1eMXzX6hEk:  -0.01400000 Waves

2019.08.28 12:59 [650904] smart account 3MozFTvErSVccnAWsKkbjXLvA1eMXzX6hEk > SELF 0.00000000 Waves

{ "type": 13, "id": "CCmffCmLvwRKQ1cNukWLgLHSwxa1NwVwcQzc188jNeYg", "fee": 1400000, "feeAssetId": null, "timestamp": 1566986359574, "version": 1, "sender": "3MozFTvErSVccnAWsKkbjXLvA1eMXzX6hEk", "senderPublicKey": "ARTz5gzyVzbDFw2WVKni8FTEPDZDKYoTqUNGpy7JHzQ8", "proofs": [ "5e1b4tR6BubQ11eRjKaPweJP9YXDftP28qRu3dnm28K6P7RtURMY9ZxdnrutYWG8d3HiW2iquSV59ykumZ3Un2G9" ], "script": "base64:AwQAAAAHUHViS2V5MQEAAAAgaQxxSAhSITOlMYdvwKcfK7u/x0yzOg/68EH0ax0QlWUEAAAAB1B1YktleTIBAAAAILb58FcZXTIbjEshMW6ayDB2XcNop87YatlbtNE8j6N0BAAAAARzaWcxAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAB1B1YktleTEAAAAAAAAAAAEAAAAAAAAAAAAEAAAABHNpZzIDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQUAAAAHUHViS2V5MgAAAAAAAAAAAQAAAAAAAAAAAAkAAGYAAAACCQAAZAAAAAIFAAAABHNpZzEFAAAABHNpZzIAAAAAAAAAAADO+UOI", "chainId": 84, "height": 650904, "spentComplexity": 0 } View: original | compacted Prev: HFRen7BmJ8xStNeNtEQymBm1SQXxhJv6AAw9fMkhBpXx Next: 7LX9QoB9gRUpm77MA1NnFtbaQkhUKTkvoWDbPq5qgyiL Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
2-{-# SCRIPT_TYPE ACCOUNT #-}
3-{-# CONTENT_TYPE DAPP #-}
4-let a = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqlAiANSmBpDHYKP9sKgeN/l1bAb28g/tGlgDkwT5FiMN4X3pwdvdxE7mvSR8/41dU9rx4jG+6tZpb1ULVDPs431tR2IRaTXw5Cj+Ac2vhL+5JamCerGD1UW+bh/EGQtxo8W3YLDrofXB5QHJx4Pkz2Kgf+oS/C8hHuB/U4krO76U0507GTjZPP9kRQ0uLSMeqQXt8wXS+nMp5wajqxPpDLMaSREgsKwv/AEkP4dzpTYbikLBYl4qtdJsD84HLFSkiwd3BhcOrPjoIYmLxQuBD5TIMKTKD3sdZgaY9rsyqx3A00innyxD6zp3b4gFpUOX8JxKZdEC2myEqleNgg7GzwIDAQAB")
5-
6-let b = addressFromStringValue("3NCiG28LmWyTigWG13E5QnvdHBsZFYXSS2j")
7-
8-let c = ((100 * 1000) * 1000)
9-
10-let d = 44
11-
12-let e = ((5 * c) / 1000)
13-
14-let f = 14
15-
16-let g = "INIT"
17-
18-let h = "READY"
19-
20-let i = "FINISHED"
21-
22-let j = 0
23-
24-let k = 1
25-
26-let l = 2
27-
28-let m = 3
29-
30-let n = 4
31-
32-let o = 5
33-
34-let p = 6
35-
36-let q = 7
37-
38-let r = 8
39-
40-let s = 13
41-
42-func t (u) = if ((0 > u))
43- then -(u)
44- else u
45-
46-
47-func v (w,x,y,z,A,B,C,D,E,F,G,H,I,J) = {
48- let K = ((((((((((((((((((((((((w + "_") + x) + "_") + y) + "_") + z) + "_") + A) + "_") + B) + "_") + C) + "_") + D) + "_") + E) + "_") + F) + "_") + G) + "_") + H) + "_") + I)
49- if ((J == ""))
50- then ((K + "_") + "-")
51- else ((K + "_") + J)
52- }
53-
54-
55-func L (M) = {
56- let N = getStringValue(this, M)
57- split(N, "_")
58- }
59-
60-
61-func O (P,Q,R,B,S) = {
62- let T = ((t(toInt(S)) % P) + Q)
63- let U = toString(T)
64- let V = isDefined(indexOf(R, U))
65- if (if (!(V))
66- then (B > 0)
67- else false)
68- then [((R + "-") + U), "yes"]
69- else [R, ""]
70- }
71-
72-
73-func W (M,X,Y,Z,R,B,aa,ab,ac,ad,ae) = {
74- let af = if (((aa + 1) > 87))
75- then if ((ae > 241))
76- then [0, (ab + 1), (ac + 1), 0, 1]
77- else [0, ab, ac, (ad + 1), (ae + 1)]
78- else [(aa + 1), ab, ac, ad, ae]
79- let ag = af[0]
80- let ah = af[1]
81- let ai = af[2]
82- let aj = af[3]
83- let ak = af[4]
84- let al = (((((((take(drop(Z, ah), 1) + take(drop(Z, 1), 1)) + take(drop(Z, aj), 1)) + take(drop(Z, 3), 1)) + take(drop(Z, ai), 1)) + take(drop(Z, 5), 1)) + take(drop(Z, 6), 1)) + take(drop(Z, ak), 1))
85- let am = ((sha256(al) + blake2b256(al)) + keccak256(al))
86- let P = ((Y - X) + 1)
87- let an = O(P, X, R, B, drop(am, ag))
88- let ao = if ((an[1] != ""))
89- then (B - 1)
90- else B
91- let ap = O(P, X, an[0], ao, drop(am, (ag + 1)))
92- let aq = if ((ap[1] != ""))
93- then (ao - 1)
94- else ao
95- let ar = O(P, X, ap[0], aq, drop(am, (ag + 2)))
96- let as = if ((ar[1] != ""))
97- then (aq - 1)
98- else aq
99- let at = O(P, X, ar[0], as, drop(am, (ag + 3)))
100- let au = if ((at[1] != ""))
101- then (as - 1)
102- else as
103- let av = O(P, X, at[0], au, drop(am, (ag + 4)))
104- let aw = if ((av[1] != ""))
105- then (au - 1)
106- else au
107- let ax = O(P, X, av[0], aw, drop(am, (ag + 5)))
108- let ay = if ((ax[1] != ""))
109- then (aw - 1)
110- else aw
111- let az = O(P, X, ax[0], ay, drop(am, (ag + 6)))
112- let aA = if ((az[1] != ""))
113- then (ay - 1)
114- else ay
115- let aB = O(P, X, az[0], aA, drop(am, (ag + 7)))
116- let aC = if ((aB[1] != ""))
117- then (aA - 1)
118- else aA
119- let aD = O(P, X, aB[0], aC, drop(am, (ag + 8)))
120- let aE = if ((aD[1] != ""))
121- then (aC - 1)
122- else aC
123- let aF = O(P, X, aD[0], aE, drop(am, (ag + 9)))
124- let aG = if ((aF[1] != ""))
125- then (aE - 1)
126- else aE
127- let aH = O(P, X, aF[0], aG, drop(am, (ag + 10)))
128- let aI = if ((aH[1] != ""))
129- then (aG - 1)
130- else aG
131-[aH[0], if ((aI == 0))
132- then "0"
133- else toString(aI), toString((ag + 10)), toString(ah), toString(ai), toString(aj), toString(ak)]
134- }
135-
136-
137-func aJ (M,C,aK) = {
138- let aL = split(aK.key, "_")
139- if ((size(aL) != 2))
140- then throw("Invalid data key format. It must follow to ${sessionId}_${num}")
141- else {
142- let aM = aL[0]
143- let aN = aL[1]
144- if ((M != aM))
145- then throw(((("Several data keys have different sessionId: " + M) + " and ") + aM))
146- else if (isDefined(getString(this, aK.key)))
147- then throw(("One of the data keys has already presented in account state: key=" + aK.key))
148- else if ((size(aN) > 4))
149- then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} length couldn't be greater than 4")
150- else if ((take(aN, 1) == "0"))
151- then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} couldn't start from 0")
152- else {
153- let aO = parseInt(aN)
154- if (isDefined(aO))
155- then {
156- let aP = extract(aO)
157- if (if ((1 > aP))
158- then true
159- else (aP > C))
160- then throw((((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to ") + toString(C)) + " but actualNum=") + toString(aP)))
161- else {
162- let aQ = aK.value
163- if ($isInstanceOf(aQ, "String"))
164- then {
165- let aR = aQ
166- true
167- }
168- else throw((M + " draw: only String type is accepted for data transactions"))
169- }
170- }
171- else throw((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to 7145 but actualNum=") + aN))
172- }
173- }
174- }
175-
176-
177-func aS (A,aT,aU) = {
178- let aV = 1000
179- let aW = ((13 * c) / 100)
180- let aX = 50
181- let aY = ((8 * c) / 100)
182- let aZ = 5000
183- let ba = ((297 * c) / 100)
184- let bb = 1000
185- let bc = ((143 * c) / 100)
186- let bd = 50000
187- let be = ((1427 * c) / 100)
188- let bf = 5000
189- let bg = ((705 * c) / 100)
190- let bh = if ((aV > A))
191- then (aW + ((A / aX) * aY))
192- else if ((aZ > A))
193- then (ba + (((A / bb) - 1) * bc))
194- else if ((bd > A))
195- then (be + (((A / bf) - 1) * bg))
196- else throw("Please contact our sales team to generate more than 50k rands")
197- let bi = (bh + aU)
198- if (isDefined(aT.assetId))
199- then throw("Only WAVES can be used as a payment for rands generation")
200- else if ((bi > aT.amount))
201- then throw(((((("Attached payment is to small to generate " + toString(A)) + " unique randoms numbers and upload at least 1 data tx: actualPmt=") + toString(aT.amount)) + " but minPmt is ") + toString(bi)))
202- else bh
203- }
204-
205-
206-@Callable(bj)
207-func initDraw (y,z,A) = {
208- let M = toBase58String(bj.transactionId)
209- let bk = ((z - y) + 1)
210- let bl = (bk / 2)
211- let bm = size(toString((z - 1)))
212- let bn = size(toString(A))
213- let bo = (((2 * bm) + (2 * bn)) + 4)
214- let bp = (((5120 - 175) - bo) / (bm + 1))
215- if (if ((0 >= y))
216- then true
217- else (0 >= z))
218- then throw("randFrom and randTo must be greater than 0")
219- else if ((y >= z))
220- then throw("randFrom must be strict less then randTo")
221- else if ((A > bk))
222- then throw(((((((("Impossible to generate " + toString(A)) + " unique numbers for provided random range [") + toString(y)) + ", ") + toString(z)) + "] with actual size ") + toString(bk)))
223- else if ((A > bl))
224- then throw(((((((((("randsCount must be less then 50% of passed range length: range=[" + toString(y)) + ", ") + toString(z)) + "], rangeLength=") + toString(bk)) + " randsCount=") + toString(A)) + " allowedRandsCount=") + toString(bl)))
225- else if ((A > bp))
226- then throw(((((("randsCount couldn't be kept in 1 data entry: 1_randNumSpace=" + toString((bm + 1))) + " maxAllowedRandsCount=") + toString(bp)) + " actualRandsCount=") + toString(A)))
227- else if (!(isDefined(bj.payment)))
228- then throw("Please provide payment to generate unique random numbers")
229- else {
230- let aT = extract(bj.payment)
231- let aU = ((((c * 1) / 1000) * 33) + ((c * 4) / 1000))
232- let bq = aS(A, aT, aU)
233- let br = (aT.amount - bq)
234- let bs = (br / aU)
235- let C = if ((7145 >= (bs * 5)))
236- then (bs * 5)
237- else 7145
238- let x = toBase58String(bj.callerPublicKey)
239- let bt = toString(A)
240- let bu = v(g, x, toString(y), toString(z), bt, bt, toString(C), "null", "0", "0", "1", "0", "1", "")
241- ScriptResult(WriteSet([DataEntry(M, bu)]), TransferSet([ScriptTransfer(b, bq, unit)]))
242- }
243- }
244-
245-
246-
247-@Callable(bj)
248-func ready (M) = {
249- let bv = L(M)
250- let w = bv[j]
251- let x = bv[k]
252- let bt = bv[n]
253- let bw = bv[o]
254- let bx = bv[l]
255- let by = bv[m]
256- let C = bv[p]
257- let bz = fromBase58String(x)
258- if ((w != g))
259- then throw((M + " draw: moving into READY state is allowed only from INIT state"))
260- else if ((bz != bj.callerPublicKey))
261- then throw((M + "draw: moving into READY state is allowed for organizer only"))
262- else {
263- let bA = v(h, x, bx, by, bt, bw, C, toBase58String(bj.transactionId), "0", "0", "1", "0", "1", "")
264- WriteSet([DataEntry(M, bA)])
265- }
266- }
267-
268-
269-
270-@Callable(bj)
271-func random (M,Z) = {
272- let bv = L(M)
273- let w = bv[j]
274- let x = bv[k]
275- let bt = bv[n]
276- let bB = parseIntValue(bv[o])
277- let aa = parseIntValue(bv[r])
278- let R = bv[s]
279- let bx = bv[l]
280- let by = bv[m]
281- let D = bv[q]
282- let F = parseIntValue(bv[9])
283- let G = parseIntValue(bv[10])
284- let H = parseIntValue(bv[11])
285- let I = parseIntValue(bv[12])
286- let X = parseIntValue(bx)
287- let Y = parseIntValue(by)
288- let bz = fromBase58String(x)
289- if ((w != h))
290- then throw((M + " draw: it must be in READY state to generate random numbers"))
291- else if (!(rsaVerify(SHA256, (toBytes(M) + toBytes(D)), Z, a)))
292- then throw("Invalid RSA signature")
293- else {
294- let bC = W(M, X, Y, Z, R, bB, aa, F, G, H, I)
295- let bD = bC[1]
296- let bE = if ((bD == "0"))
297- then i
298- else h
299- WriteSet([DataEntry(M, v(bE, x, bx, by, bt, bD, bv[p], D, bC[2], bC[3], bC[4], bC[5], bC[6], bC[0]))])
300- }
301- }
302-
303-
304-@Verifier(bF)
305-func bG () = {
306- let aQ = bF
307- if ($isInstanceOf(aQ, "DataTransaction"))
308- then {
309- let bH = aQ
310- let bI = bH.data[0]
311- let M = take(bI.key, d)
312- let bv = L(M)
313- let w = bv[j]
314- let x = bv[k]
315- let C = parseIntValue(bv[p])
316- let bz = fromBase58String(x)
317- let bJ = size(bH.data)
318- let bK = 5
319- let bL = (32 * 1024)
320- let bM = sigVerify(bF.bodyBytes, bF.proofs[0], bz)
321- let bN = (bJ == bK)
322- let aU = ((((c * 1) / 1000) * 33) + ((c * 4) / 1000))
323- let bO = (bH.fee == aU)
324- let bP = if (if (if (if (aJ(M, C, bI))
325- then aJ(M, C, bH.data[1])
326- else false)
327- then aJ(M, C, bH.data[2])
328- else false)
329- then aJ(M, C, bH.data[3])
330- else false)
331- then aJ(M, C, bH.data[4])
332- else false
333- let bQ = (bL >= size(bH.bodyBytes))
334- if ((w != g))
335- then throw(((("Data transaction is allowed for " + g) + " status only, current status is ") + w))
336- else if (!(bM))
337- then throw("Invalid data transaction signature")
338- else if (!(bO))
339- then throw(("Invalid DataTransaction fee. Fee must be exact " + toString(aU)))
340- else if (!(bN))
341- then throw(("Invalid data entries count. Data entries count must be exact " + toString(bK)))
342- else if (!(bP))
343- then throw("Invalid data keys format")
344- else if (!(bQ))
345- then throw((("Invalid DataTransaction size. Max allowed size is " + toString(bL)) + " bytes"))
346- else true
347- }
348- else if ($isInstanceOf(aQ, "SetScriptTransaction"))
349- then {
350- let bR = aQ
351- true
352- }
353- else if ($isInstanceOf(aQ, "TransferTransaction"))
354- then {
355- let bS = aQ
356- true
357- }
358- else false
359- }
360-
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let PubKey1 = base58'854p8BYzrj6yBPRPmfQur3oF1Rjc1AJ548qRp5FT5kDa'
4+let PubKey2 = base58'DKGFPozLrsiR8NM4NJzqQaBYC8NyGYjuw2hDYicQVjco'
5+let sig1 = if (sigVerify(tx.bodyBytes, tx.proofs[0], PubKey1))
6+ then 1
7+ else 0
8+let sig2 = if (sigVerify(tx.bodyBytes, tx.proofs[1], PubKey2))
9+ then 1
10+ else 0
11+((sig1 + sig2) > 0)

github/deemru/w8io/873ac7e 
67.49 ms