tx · 5ea13jGJD1Esq9aCfvqriRK6Bgx1vC6gUQQKBAxPBtCu

3N49jiLi2EoVYzJqfNisyq7WsjVDwCbFG7f:  -0.01400000 Waves

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

{ "type": 13, "id": "5ea13jGJD1Esq9aCfvqriRK6Bgx1vC6gUQQKBAxPBtCu", "fee": 1400000, "feeAssetId": null, "timestamp": 1566986360736, "version": 1, "sender": "3N49jiLi2EoVYzJqfNisyq7WsjVDwCbFG7f", "senderPublicKey": "7mySEw1dKqSgeCSWSSdWQgdjNJL3v7zZsex8cMjSLCBw", "proofs": [ "5UEYBgCoQwjVeJ64N7hJxaciVEe8KKHG3jFNcQQTnJucsp4YVTwwM3tUTMb9YUgUTqmP46ksSYavZN77Vqdgb2Ek" ], "script": "base64:AwQAAAAHUHViS2V5MQEAAAAgaQxxSAhSITOlMYdvwKcfK7u/x0yzOg/68EH0ax0QlWUEAAAAB1B1YktleTIBAAAAILb58FcZXTIbjEshMW6ayDB2XcNop87YatlbtNE8j6N0BAAAAARzaWcxAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAB1B1YktleTEAAAAAAAAAAAEAAAAAAAAAAAAEAAAABHNpZzIDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQUAAAAHUHViS2V5MgAAAAAAAAAAAQAAAAAAAAAAAAkAAGYAAAACCQAAZAAAAAIFAAAABHNpZzEFAAAABHNpZzIAAAAAAAAAAADO+UOI", "chainId": 84, "height": 650904, "spentComplexity": 0 } View: original | compacted Prev: 2KSHPWdnX22tPJjJ4AipAWsav79mHpmkTaLvUkDh7heu Next: Chs1UBbKRSimsQ2JR3o3G8xwRAXnG7JdJTxWznn86ogH 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) > 183))
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- if (if ((0 >= y))
212- then true
213- else (0 >= z))
214- then throw("randFrom and randTo must be greater than 0")
215- else if ((y >= z))
216- then throw("randFrom must be strict less then randTo")
217- else if ((A > bk))
218- then throw(((((((("Impossible to generate " + toString(A)) + " unique numbers for provided random range [") + toString(y)) + ", ") + toString(z)) + "] with actual size ") + toString(bk)))
219- else if ((A > bl))
220- 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)))
221- else if (!(isDefined(bj.payment)))
222- then throw("Please provide payment to generate unique random numbers")
223- else {
224- let aT = extract(bj.payment)
225- let aU = ((5 * c) / 1000)
226- let bm = aS(A, aT, aU)
227- let bn = (aT.amount - bm)
228- let bo = (bn / aU)
229- let C = (bo * 5)
230- let x = toBase58String(bj.callerPublicKey)
231- let bp = toString(A)
232- let bq = v(g, x, toString(y), toString(z), bp, bp, toString(C), "null", "0", "0", "1", "0", "1", "")
233- ScriptResult(WriteSet([DataEntry(M, bq)]), TransferSet([ScriptTransfer(b, bm, unit)]))
234- }
235- }
236-
237-
238-
239-@Callable(bj)
240-func ready (M) = {
241- let br = L(M)
242- let w = br[j]
243- let x = br[k]
244- let bp = br[n]
245- let bs = br[o]
246- let bt = br[l]
247- let bu = br[m]
248- let C = br[p]
249- let bv = fromBase58String(x)
250- if ((w != g))
251- then throw((M + " draw: moving into READY state is allowed only from INIT state"))
252- else if ((bv != bj.callerPublicKey))
253- then throw((M + "draw: moving into READY state is allowed for organizer only"))
254- else {
255- let bw = v(h, x, bt, bu, bp, bs, C, toBase58String(bj.transactionId), "0", "0", "1", "0", "1", "")
256- WriteSet([DataEntry(M, bw)])
257- }
258- }
259-
260-
261-
262-@Callable(bj)
263-func random (M,Z) = {
264- let br = L(M)
265- let w = br[j]
266- let x = br[k]
267- let bp = br[n]
268- let bx = parseIntValue(br[o])
269- let aa = parseIntValue(br[r])
270- let R = br[s]
271- let bt = br[l]
272- let bu = br[m]
273- let D = br[q]
274- let F = parseIntValue(br[9])
275- let G = parseIntValue(br[10])
276- let H = parseIntValue(br[11])
277- let I = parseIntValue(br[12])
278- let X = parseIntValue(bt)
279- let Y = parseIntValue(bu)
280- let bv = fromBase58String(x)
281- if ((w != h))
282- then throw((M + " draw: it must be in READY state to generate random numbers"))
283- else if (!(rsaVerify(SHA256, (toBytes(M) + toBytes(D)), Z, a)))
284- then throw("Invalid RSA signature")
285- else {
286- let by = W(M, X, Y, Z, R, bx, aa, F, G, H, I)
287- let bz = by[1]
288- let bA = if ((bz == "0"))
289- then i
290- else h
291- WriteSet([DataEntry(M, v(bA, x, bt, bu, bp, bz, br[p], D, by[2], by[3], by[4], by[5], by[6], by[0]))])
292- }
293- }
294-
295-
296-@Verifier(bB)
297-func bC () = {
298- let aQ = bB
299- if ($isInstanceOf(aQ, "DataTransaction"))
300- then {
301- let bD = aQ
302- let bE = bD.data[0]
303- let M = take(bE.key, d)
304- let br = L(M)
305- let w = br[j]
306- let x = br[k]
307- let C = parseIntValue(br[p])
308- let bv = fromBase58String(x)
309- let bF = size(bD.data)
310- let bG = sigVerify(bB.bodyBytes, bB.proofs[0], bv)
311- let bH = (bF == 5)
312- let bI = if (if (if (if (aJ(M, C, bE))
313- then aJ(M, C, bD.data[1])
314- else false)
315- then aJ(M, C, bD.data[2])
316- else false)
317- then aJ(M, C, bD.data[3])
318- else false)
319- then aJ(M, C, bD.data[4])
320- else false
321- if (if (if ((w == g))
322- then bG
323- else false)
324- then bH
325- else false)
326- then bI
327- else false
328- }
329- else if ($isInstanceOf(aQ, "SetScriptTransaction"))
330- then {
331- let bJ = aQ
332- true
333- }
334- else if ($isInstanceOf(aQ, "TransferTransaction"))
335- then {
336- let bK = aQ
337- true
338- }
339- else false
340- }
341-
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 
36.74 ms