tx · 4kBdEaqqLH5ibEnKY9QtKxe2jW2BBCiLtJhSteDY2YPK

3MvR4iqxAoHzXYFXCPxuVW4yZKbkWFvm5ir:  -0.01500000 Waves

2019.06.26 16:21 [559144] smart account 3MvR4iqxAoHzXYFXCPxuVW4yZKbkWFvm5ir > SELF 0.00000000 Waves

{ "type": 13, "id": "4kBdEaqqLH5ibEnKY9QtKxe2jW2BBCiLtJhSteDY2YPK", "fee": 1500000, "feeAssetId": null, "timestamp": 1561555300773, "version": 1, "sender": "3MvR4iqxAoHzXYFXCPxuVW4yZKbkWFvm5ir", "senderPublicKey": "ANtyVyyW2Hoc2L1E4wQCsAckcMVF3Gz5HKRj1kipL3Rx", "proofs": [ "4NTpkP3seTdkVqVGk4dZK4zhTfgeHwY1pFWNgGBoKUf3N7p7zvVVeqvcXtrGHrbt1TQ2ue6yXXjihwi6yygZRH3z" ], "script": "base64:AAIDAAAAAAAAAAAAAAAPAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAGPYmFzZTY0Ok1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcWxBaUFOU21CcERIWUtQOXNLZ2VOL2wxYkFiMjhnL3RHbGdEa3dUNUZpTU40WDNwd2R2ZHhFN212U1I4LzQxZFU5cng0akcrNnRacGIxVUxWRFBzNDMxdFIySVJhVFh3NUNqK0FjMnZoTCs1SmFtQ2VyR0QxVVcrYmgvRUdRdHhvOFczWUxEcm9mWEI1UUhKeDRQa3oyS2dmK29TL0M4aEh1Qi9VNGtyTzc2VTA1MDdHVGpaUFA5a1JRMHVMU01lcVFYdDh3WFMrbk1wNXdhanF4UHBETE1hU1JFZ3NLd3YvQUVrUDRkenBUWWJpa0xCWWw0cXRkSnNEODRITEZTa2l3ZDNCaGNPclBqb0lZbUx4UXVCRDVUSU1LVEtEM3NkWmdhWTlyc3lxeDNBMDBpbm55eEQ2enAzYjRnRnBVT1g4SnhLWmRFQzJteUVxbGVOZ2c3R3p3SURBUUFCAAAAAAZTRVJWRVIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM05DaUcyOExtV3lUaWdXRzEzRTVRbnZkSEJzWkZZWFNTMmoAAAAAEFNFU1NJT05JREZJWFNJWkUAAAAAAAAAADIAAAAACUVNUFRZVkVDVAkAAZsAAAABAgAAAAAAAAAACVNUQVRFSU5JVAIAAAAESU5JVAAAAAAKU1RBVEVSRUFEWQIAAAAFUkVBRFkAAAAADVNUQVRFRklOSVNIRUQCAAAACEZJTklTSEVEAQAAAANhYnMAAAABAAAAA3ZhbAMJAABmAAAAAgAAAAAAAAAAAAUAAAADdmFsCQEAAAABLQAAAAEFAAAAA3ZhbAUAAAADdmFsAQAAABJmb3JtYXRTdGF0ZURhdGFTdHIAAAADAAAACWRyYXdTdGF0ZQAAABFvcmdhbml6ZXJQdWJLZXk1OAAAAAtyYW5kT3JFbXB0eQQAAAAMZnVsbFN0YXRlU3RyCQABLAAAAAIJAAEsAAAAAgUAAAAJZHJhd1N0YXRlAgAAAAFfBQAAABFvcmdhbml6ZXJQdWJLZXk1OAMJAAAAAAAAAgUA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AAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAACWluaXRTdGF0ZQkBAAAAEmZvcm1hdFN0YXRlRGF0YVN0cgAAAAMFAAAACVNUQVRFSU5JVAUAAAARb3JnYW5pemVyUHViS2V5NTgCAAAAAAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAJc2Vzc2lvbklkBQAAAAlpbml0U3RhdGUFAAAAA25pbAAAAAFpAQAAAAVyZWFkeQAAAAEAAAAJc2Vzc2lvbklkBAAAAA5kcmF3UGFyYW1zTGlzdAkBAAAAE2V4dHJhY3RHYW1lRGF0YUxpc3QAAAABBQAAAAlzZXNzaW9uSWQEAAAACWRyYXdTdGF0ZQkAAZEAAAACBQAAAA5kcmF3UGFyYW1zTGlzdAAAAAAAAAAAAAQAAAARb3JnYW5pemVyUHViS2V5NTgJAAGRAAAAAgUAAAAOZHJhd1BhcmFtc0xpc3QAAAAAAAAAAAEEAAAAD29yZ2FuaXplclB1YktleQkAAlkAAAABBQAAABFvcmdhbml6ZXJQdWJLZXk1OAMJAQAAAAIhPQAAAAIFAAAACWRyYXdTdGF0ZQUAAAAJU1RBVEVJTklUCQAAAgAAAAEJAAEsAAAAAgUAAAAJc2Vzc2lvbklkAgAAAD4gZHJhdzogbW92aW5nIGludG8gUkVBRFkgc3RhdGUgaXMgYWxsb3dlZCBvbmx5IGZyb20gSU5JVCBzdGF0ZQMJAQAAAAIhPQAAAAIFAAAAD29yZ2FuaXplclB1YktleQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAEJAAEsAAAAAgUAAAAJc2Vzc2lvbklkAgAAADtkcmF3OiBtb3ZpbmcgaW50byBSRUFEWSBzdGF0ZSBpcyBhbGxvd2VkIGZvciBvcmdhbml6ZXIgb25seQQAAAAKcmVhZHlTdGF0ZQkBAAAAEmZvcm1hdFN0YXRlRGF0YVN0cgAAAAMFAAAACVNUQVRFSU5JVAUAAAARb3JnYW5pemVyUHViS2V5NTgCAAAAAAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAJc2Vzc2lvbklkBQAAAApyZWFkeVN0YXRlBQAAAANuaWwAAAAAIb+7EQ==", "chainId": 84, "height": 559144, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqlAiANSmBpDHYKP9sKgeN/l1bAb28g/tGlgDkwT5FiMN4X3pwdvdxE7mvSR8/41dU9rx4jG+6tZpb1ULVDPs431tR2IRaTXw5Cj+Ac2vhL+5JamCerGD1UW+bh/EGQtxo8W3YLDrofXB5QHJx4Pkz2Kgf+oS/C8hHuB/U4krO76U0507GTjZPP9kRQ0uLSMeqQXt8wXS+nMp5wajqxPpDLMaSREgsKwv/AEkP4dzpTYbikLBYl4qtdJsD84HLFSkiwd3BhcOrPjoIYmLxQuBD5TIMKTKD3sdZgaY9rsyqx3A00innyxD6zp3b4gFpUOX8JxKZdEC2myEqleNgg7GzwIDAQAB")
5+
6+let SERVER = addressFromStringValue("3NCiG28LmWyTigWG13E5QnvdHBsZFYXSS2j")
7+
8+let SESSIONIDFIXSIZE = 50
9+
10+let EMPTYVECT = toBytes("")
11+
12+let STATEINIT = "INIT"
13+
14+let STATEREADY = "READY"
15+
16+let STATEFINISHED = "FINISHED"
17+
18+func abs (val) = if ((0 > val))
19+ then -(val)
20+ else val
21+
22+
23+func formatStateDataStr (drawState,organizerPubKey58,randOrEmpty) = {
24+ let fullStateStr = ((drawState + "_") + organizerPubKey58)
25+ if ((randOrEmpty == ""))
26+ then fullStateStr
27+ else ((fullStateStr + "_") + randOrEmpty)
28+ }
29+
30+
31+func extractGameDataList (sessionId) = {
32+ let rawDataStr = getStringValue(this, sessionId)
33+ split(rawDataStr, "_")
34+ }
35+
36+
37+func nextRand (currRandsVect,remainingHash) = {
38+ let nextRandInt = abs(toInt(remainingHash))
39+ let nextRandVect = toBytes(nextRandInt)
40+ let s = (size(currRandsVect) / 8)
41+ if ((0 == s))
42+ then [nextRandVect, drop(remainingHash, 1)]
43+ else {
44+ let duplicate = if (if (if (if (if (if (if (if (if ((s >= 1))
45+ then (take(currRandsVect, 8) == nextRandVect)
46+ else false)
47+ then true
48+ else if ((s >= 2))
49+ then (take(drop(currRandsVect, (1 * 8)), 8) == nextRandVect)
50+ else false)
51+ then true
52+ else if ((s >= 3))
53+ then (take(drop(currRandsVect, (2 * 8)), 8) == nextRandVect)
54+ else false)
55+ then true
56+ else if ((s >= 4))
57+ then (take(drop(currRandsVect, (3 * 8)), 8) == nextRandVect)
58+ else false)
59+ then true
60+ else if ((s >= 5))
61+ then (take(drop(currRandsVect, (4 * 8)), 8) == nextRandVect)
62+ else false)
63+ then true
64+ else if ((s >= 6))
65+ then (take(drop(currRandsVect, (5 * 8)), 8) == nextRandVect)
66+ else false)
67+ then true
68+ else if ((s >= 7))
69+ then (take(drop(currRandsVect, (6 * 8)), 8) == nextRandVect)
70+ else false)
71+ then true
72+ else if ((s >= 8))
73+ then (take(drop(currRandsVect, (7 * 8)), 8) == nextRandVect)
74+ else false)
75+ then true
76+ else if ((s >= 9))
77+ then (take(drop(currRandsVect, (8 * 8)), 8) == nextRandVect)
78+ else false
79+ if (duplicate)
80+ then [currRandsVect, drop(remainingHash, 1)]
81+ else [(currRandsVect + nextRandVect), drop(remainingHash, 1)]
82+ }
83+ }
84+
85+
86+func generateRandsVector (sessionId,from,to,rsaSign) = {
87+ let emptyVec = toBytes("")
88+ let randHash = sha256(rsaSign)
89+ let de = DataEntry("r1", 10)
90+ let dtx = DataTransaction(nil, emptyVec, 0, 0, 0, this, emptyVec, emptyVec, [emptyVec])
91+ let nextInfo1 = nextRand(emptyVec, randHash)
92+ let nextInfo2 = nextRand(nextInfo1[0], nextInfo1[1])
93+ let nextInfo3 = nextRand(nextInfo2[0], nextInfo2[1])
94+ let nextInfo4 = nextRand(nextInfo3[0], nextInfo3[1])
95+ let nextInfo5 = nextRand(nextInfo4[0], nextInfo4[1])
96+ let nextInfo6 = nextRand(nextInfo5[0], nextInfo5[1])
97+ let nextInfo7 = nextRand(nextInfo6[0], nextInfo6[1])
98+ let nextInfo8 = nextRand(nextInfo7[0], nextInfo7[1])
99+ let nextInfo9 = nextRand(nextInfo8[0], nextInfo8[1])
100+nextInfo9[0]
101+ }
102+
103+
104+func validateDtxKey (sessionId,data,dataEntriesCount,iteration) = {
105+ let sessionIdFromKey = take(data.key, SESSIONIDFIXSIZE)
106+ if ((iteration >= dataEntriesCount))
107+ then true
108+ else if (if (if ((sessionId == sessionIdFromKey))
109+ then (size(data.key) > SESSIONIDFIXSIZE)
110+ else false)
111+ then !(isDefined(getString(this, data.key)))
112+ else false)
113+ then match data.value {
114+ case str: String =>
115+ true
116+ case _ =>
117+ throw((sessionId + " draw: only String type is accepted for data transactions"))
118+ }
119+ else false
120+ }
121+
122+
123+func nextRand2 (randCtx) = {
124+ let remainingHash = randCtx.bodyBytes
125+ let currRandsEntries = randCtx.data
126+ let nextRandInt = abs(toInt(remainingHash))
127+ let nextHash = drop(remainingHash, 1)
128+ let s = size(currRandsEntries)
129+ if ((0 == s))
130+ then {
131+ let r1Entry = DataEntry(toString(nextRandInt), nextRandInt)
132+ DataTransaction([r1Entry], EMPTYVECT, 0, 0, 0, this, EMPTYVECT, nextHash, [EMPTYVECT])
133+ }
134+ else {
135+ let duplicate = if (if (if (if (if (if ((s >= 1))
136+ then (currRandsEntries[0].value == nextRandInt)
137+ else false)
138+ then true
139+ else if ((s >= 2))
140+ then (currRandsEntries[1].value == nextRandInt)
141+ else false)
142+ then true
143+ else if ((s >= 3))
144+ then (currRandsEntries[2].value == nextRandInt)
145+ else false)
146+ then true
147+ else if ((s >= 4))
148+ then (currRandsEntries[3].value == nextRandInt)
149+ else false)
150+ then true
151+ else if ((s >= 5))
152+ then (currRandsEntries[4].value == nextRandInt)
153+ else false)
154+ then true
155+ else if ((s >= 6))
156+ then (currRandsEntries[5].value == nextRandInt)
157+ else false
158+ if (duplicate)
159+ then DataTransaction(currRandsEntries, EMPTYVECT, 0, 0, 0, this, EMPTYVECT, nextHash, [EMPTYVECT])
160+ else {
161+ let newRandsEntries = DataEntry(toString(nextRandInt), nextRandInt) :: currRandsEntries
162+ DataTransaction(newRandsEntries, EMPTYVECT, 0, 0, 0, this, EMPTYVECT, nextHash, [EMPTYVECT])
163+ }
164+ }
165+ }
166+
167+
168+func generateRandsVector2 (sessionId,from,to,rsaSign) = {
169+ let randHash = sha256(rsaSign)
170+ let randCtx = DataTransaction(nil, EMPTYVECT, 0, 0, 0, this, EMPTYVECT, randHash, [EMPTYVECT])
171+ nextRand2(nextRand2(nextRand2(nextRand2(nextRand2(nextRand2(randCtx))))))
172+ }
173+
174+
175+@Callable(i)
176+func random2 (sessionId,rsaSign) = {
177+ let from = 1
178+ let to = 100
179+ let drawParamsList = extractGameDataList(sessionId)
180+ let drawState = drawParamsList[0]
181+ let organizerPubKey58 = drawParamsList[1]
182+ let organizerPubKey = fromBase58String(organizerPubKey58)
183+ if ((drawState != STATEREADY))
184+ then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
185+ else if (!(rsaVerify(SHA256, toBytes(sessionId), rsaSign, RSAPUBLIC)))
186+ then throw("Invalid RSA signature")
187+ else {
188+ let randCtx = generateRandsVector2(sessionId, from, to, rsaSign)
189+ let s = size(randCtx.data)
190+ let rand0 = if ((s >= 1))
191+ then randCtx.data[0].key
192+ else ""
193+ let rand1 = if ((s >= 2))
194+ then ((rand0 + "_") + randCtx.data[0].key)
195+ else rand0
196+ let rand2 = if ((s >= 3))
197+ then ((rand1 + "_") + randCtx.data[1].key)
198+ else rand1
199+ let rand3 = if ((s >= 4))
200+ then ((rand2 + "_") + randCtx.data[2].key)
201+ else rand2
202+ let rand4 = if ((s >= 5))
203+ then ((rand3 + "_") + randCtx.data[3].key)
204+ else rand3
205+ let rand5 = if ((s >= 6))
206+ then ((rand4 + "_") + randCtx.data[4].key)
207+ else rand4
208+ WriteSet([DataEntry(sessionId, formatStateDataStr(STATEFINISHED, organizerPubKey58, rand5))])
209+ }
210+ }
211+
212+
213+
214+@Callable(i)
215+func initDraw (sessionId) = {
216+ let base58Valid = (size(fromBase58String(sessionId)) > 0)
217+ if ((size(sessionId) != SESSIONIDFIXSIZE))
218+ then throw("Draw Id must be exactly 50 simbols")
219+ else if (!(base58Valid))
220+ then throw("Draw id must be in Base58 format")
221+ else {
222+ let organizerPubKey58 = toBase58String(i.callerPublicKey)
223+ let initState = formatStateDataStr(STATEINIT, organizerPubKey58, "")
224+ WriteSet([DataEntry(sessionId, initState)])
225+ }
226+ }
227+
228+
229+
230+@Callable(i)
231+func ready (sessionId) = {
232+ let drawParamsList = extractGameDataList(sessionId)
233+ let drawState = drawParamsList[0]
234+ let organizerPubKey58 = drawParamsList[1]
235+ let organizerPubKey = fromBase58String(organizerPubKey58)
236+ if ((drawState != STATEINIT))
237+ then throw((sessionId + " draw: moving into READY state is allowed only from INIT state"))
238+ else if ((organizerPubKey != i.callerPublicKey))
239+ then throw((sessionId + "draw: moving into READY state is allowed for organizer only"))
240+ else {
241+ let readyState = formatStateDataStr(STATEINIT, organizerPubKey58, "")
242+ WriteSet([DataEntry(sessionId, readyState)])
243+ }
244+ }
245+
246+

github/deemru/w8io/169f3d6 
40.70 ms