tx · CSFdhsqkh9g5B4kLheaGubPkKVqD3216a6jrFzjqpnRP

3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z:  -0.01100000 Waves

2021.12.08 11:02 [1825011] smart account 3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z > SELF 0.00000000 Waves

{ "type": 13, "id": "CSFdhsqkh9g5B4kLheaGubPkKVqD3216a6jrFzjqpnRP", "fee": 1100000, "feeAssetId": null, "timestamp": 1638950527348, "version": 2, "chainId": 84, "sender": "3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z", "senderPublicKey": "FsjTCE3KV2vD2r7Du9D3J6Ea2T643E6zxzn6y24outXr", "proofs": [ "3vXWHwjhP2pf7HEnsbrC1UkxNojqkHhUbxPErGn9jUcVai9bfEj8UqKZDzSaNHGELaMrU75WtqmDs63WfmgpvrTZ" ], "script": "base64:AAIDAAAAAAAACSQIARIFCgMBAQESAwoBCBIECgIIAhoPCgJhMRIJUlNBUFVCTElDGgwKAmEyEgZTRVJWRVIaDQoCYTMSB1dBVkVMRVQaFgoCYTQSEFNFU1NJT05JREZJWFNJWkUaFAoCYTUSDlJBTkRDWUNMRVBSSUNFGhYKAmE2EhBNQVhSQU5EU1BFUkNZQ0xFGg8KAmE3EglTVEFURUlOSVQaDgoCYTgSCERBVEFET05FGhMKAmE5Eg1TVEFURUZJTklTSEVEGg4KAmIxEghJZHhTdGF0ZRoVCgJiMhIPSWR4T3JnYW5pemVyUHViGhEKAmIzEgtJZHhSYW5kRnJvbRoPCgJiNBIJSWR4UmFuZFRvGhMKAmI1Eg1JZHhSYW5kc0NvdW50GhkKAmI2EhNJZHhSZW1haW5SYW5kc0NvdW50GhYKAmI3EhBJZHhEYXRhS2V5c0NvdW50GhUKAmI4Eg9JZHhEYXRhRG9uZVR4SWQaEwoCYjkSDUlkeExhc3RPZmZzZXQaEgoCYzESDElkeEN1cnJSYW5kcxoJCgJjMhIDYWJzGgkKAmMzEgN2YWwaGAoCYzQSEmZvcm1hdFN0YXRlRGF0YVN0choPCgJjNRIJZHJhd1N0YXRlGhcKAmM2EhFvcmdhbml6ZXJQdWJLZXk1OBoOCgJjNxIIcmFuZEZyb20aDAoCYzgSBnJhbmRUbxoQCgJjORIKcmFuZHNDb3VudBoUCgJkMRIOcmVtYWluaW5nUmFuZHMaEwoCZDISDWRhdGFLZXlzQ291bnQaEgoCZDMSDGRhdGFEb25lVHhJZBoQCgJkNBIKbGFzdE9mZnNldBoOCgJkNRIIc2xvd0lkeDEaDgoCZDYSCHNsb3dJZHgyGg4KAmQ3EghmYXN0SWR4MRoOCgJkOBIIZmFzdElkeDIaEQoCZDkSC3JhbmRPckVtcHR5GhIKAmUxEgxmdWxsU3RhdGVTdHIaGQoCZTISE2V4dHJhY3RHYW1lRGF0YUxpc3QaDwoCZTMSCXNlc3Npb25JZBoQCgJlNBIKcmF3RGF0YVN0choOCgJlNRIIbmV4dFJhbmQaCQoCZTYSA2RpdhoJCgJlNxIDbWluGhIKAmU4EgxjdXJyUmFuZHNTdHIaEwoCZTkSDXJlbWFpbmluZ0hhc2gaEQoCZjESC25leHRSYW5kSW50GhEKAmYyEgtuZXh0UmFuZFN0choPCgJmMxIJZHVwbGljYXRlGhIKAmY0EgxnZW5lcmF0ZVJhbmQaCgoCZjUSBGZyb20aDQoCZjYSB3JzYVNpZ24aFQoCZjcSD2xhc3RPZmZzZXRCeXRlcxoSCgJmOBIMY3VyclNsb3dJZHgxGhIKAmY5EgxjdXJyU2xvd0lkeDIaEgoCZzESDGN1cnJGYXN0SWR4MRoSCgJnMhIMY3VyckZhc3RJZHgyGhAKAmczEgpuZXdJbmNMaXN0GhQKAmc0Eg5uZXdPZmZzZXRCeXRlcxoRCgJnNRILbmV3U2xvd0lkeDEaEQoCZzYSC25ld1Nsb3dJZHgyGhEKAmc3EgtuZXdGYXN0SWR4MRoRCgJnOBILbmV3RmFzdElkeDIaDgoCZzkSCGJ5dGVWZWN0Gg4KAmgxEghyYW5kSGFzaBoLCgJoMhIFcmFuZDEaCgoCaDMSBHJlbTEaCwoCaDQSBXJhbmQyGgoKAmg1EgRyZW0yGgsKAmg2EgVyYW5kMxoKCgJoNxIEcmVtMxoLCgJoOBIFcmFuZDQaCgoCaDkSBHJlbTQaCwoCaTESBXJhbmQ1GgoKAmkyEgRyZW01GgsKAmkzEgVyYW5kNhoKCgJpNBIEcmVtNhoLCgJpNRIFcmFuZDcaCgoCaTYSBHJlbTcaCwoCaTcSBXJhbmQ4GgoKAmk4EgRyZW04GgsKAmk5EgVyYW5kORoKCgJqMRIEcmVtORoMCgJqMhIGcmFuZDEwGgsKAmozEgVyZW0xMBoMCgJqNBIGcmFuZDExGgsKAmo1EgVyZW0xMRoUCgJqNhIOdmFsaWRhdGVEdHhLZXkaCgoCajcSBGRhdGEaEQoCajgSC2RhdGFLZXlJbmZvGhIKAmo5EgxrZXlTZXNzaW9uSWQaEAoCazESCmtleVBvc3RmaXgaFgoCazISEGtleVBvc3RmaXhJbnRPcHQaEwoCazMSDWtleVBvc3RmaXhJbnQaDQoCazQSByRtYXRjaDAaCQoCazUSA3N0chocCgJrNhIWdmFsaWRhdGVBbmRHZXRSYW5kc1BtdBoJCgJrNxIDcG10GhAKAms4EgptaW5EYXRhUG10GgwKAms5EgZib3VuZDEaEAoCbDESCmJhc2VQcmljZTEaCgoCbDISBGRpdjEaCwoCbDMSBWRpZmYxGgwKAmw0EgZib3VuZDIaEAoCbDUSCmJhc2VQcmljZTIaCgoCbDYSBGRpdjIaCwoCbDcSBWRpZmYyGgwKAmw4EgZib3VuZDMaEAoCbDkSCmJhc2VQcmljZTMaCgoCbTESBGRpdjMaCwoCbTISBWRpZmYzGhEKAm0zEgttaW5SYW5kc1BtdBoMCgJtNBIGbWluUG10GhEKAm01EgtyYW5nZUxlbmd0aBoUCgJtNhIObWF4UmFuZ2VMZW5ndGgaDwoCbTcSCXJhbmRUb0xlbhoTCgJtOBINcmFuZHNDb3VudExlbhoWCgJtORIQZHluYW1pY1N0YXR1c0xlbhoTCgJuMRINbWF4UmFuZHNDb3VudBoOCgJuMhIIcmFuZHNQbXQaDQoCbjMSB2RhdGFQbXQaEQoCbjQSC2RhdGFUeENvdW50GhMKAm41Eg1yYW5kc0NvdW50U3RyGg8KAm42Eglpbml0U3RhdGUaFAoCbjcSDmRyYXdQYXJhbXNMaXN0GhkKAm44EhNyZW1haW5SYW5kc0NvdW50U3RyGg0KAm45Egdmcm9tU3RyGgsKAm8xEgV0b1N0choVCgJvMhIPb3JnYW5pemVyUHViS2V5GhAKAm8zEgpyZWFkeVN0YXRlGhYKAm80EhByZW1haW5SYW5kc0NvdW50GhEKAm81EgtyYW5kR2VuSW5mbxocCgJvNhIWbmV3UmVtYWluUmFuZHNDb3VudFN0choOCgJvNxIIbmV3U3RhdGUAAAAaAAAAAAJhMQkAAlsAAAABAgAAAudiYXNlNjQ6TUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFycE9tL1llZDRtL2xMMmRLeFpRS2RJZ2xGTnhoYzhPcTNKMy8va09CQnNzcEdDNGlRNWtiRWRudlNwUCtvNVFVNW1zWUtESFM4YWVvWTBWdUYvcHFCdit0ZEN0RmhLTy9BU1pGSnAwUFJ6MEM5dEYvMENQeGFORFhTMzlxVUd1eHBDdnZxSlpxbUFPd3Z3cEg5bHpGV2pKTENEQnZiOXNyTHlsTEhYbms3S1E2bStnUFE1Mzd3LzN3cDNzVk5rV2VjQmd5QmE3UWxMYUpXdXZqbEtzL3FlTmd3Z0xOZUlmZ08zaFBiemtEZWFoN3NjRlhYam8zMXBCNFprcHJRVlh4UlB0NDNBbklZNW9RMHFBeFhLY3BiMkhucmowYnZ5WU4zRXlSQjdHdW1tcDkrTTFKTVMvNHNITWVDbFFlSDVZbWZNbmNrTzc1bHAwek9zZDAvODlCano3SDM3NWUwenlJWnViRTdhMHBTRzFDOUFvMFBQbEVBQUd3Wk81Sk9iWmRtT0NvUDZZK21aUHQwWXQxcFhwVTNCZ2crUEhJaDBZc3lqY09LWHFGVnFWT0x1WjIySWNMSDFQaU82Q1VDQzAyTm9FZHd2QWRmRGU2bnB1NE94YjFWUjRpSkJxUVRGSEZ5Q2ZydGhvWFhCSFhOL0dYTjFqMUxmNnJwODBBZDVtdlJ3RFVDcmRGTVNWR3NjOUZNbGxBeTlaaE5nVUlnWUMyU2ovWktZdi9uL2pMTThuREgzYXUwcjhhL0J0c1FJVEJ4bGlNTFo0L0tmQTJnWHhKL3h6bzFzNnNCM1hrQUk3aUVlcDVxVGlEL0xhRHdJN1A2aENXM2pubWdpYUZyOHMrWmR0OG5jaTl4VXo0UmUxb2hXVzFHWGkrZC8yMTRxV3F4WDBqQ2ZoVzVDVUNBd0VBQVE9PQAAAAACYTIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM040dmRxTXNFc0FaU0pXZndZSmNhQ2dVekFTSlRDMkJXc1AAAAAAAmEzCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAACYTQAAAAAAAAAACwAAAAAAmE1CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAACYTMAAAAAAAAAA+gAAAAAAmE2AAAAAAAAAAAOAAAAAAJhNwIAAAAESU5JVAAAAAACYTgCAAAABVJFQURZAAAAAAJhOQIAAAAIRklOSVNIRUQAAAAAAmIxAAAAAAAAAAAAAAAAAAJiMgAAAAAAAAAAAQAAAAACYjMAAAAAAAAAAAIAAAAAAmI0AAAAAAAAAAADAAAAAAJiNQAAAAAAAAAABAAAAAACYjYAAAAAAAAAAAUAAAAAAmI3AAAAAAAAAAAGAAAAAAJiOAAAAAAAAAAABwAAAAACYjkAAAAAAAAAAAgAAAAAAmMxAAAAAAAAAAANAQAAAAJjMgAAAAEAAAACYzMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAAmMzCQEAAAABLQAAAAEF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AMoAAAACBQAAAAJoMQkAAGQAAAACBQAAAAJnNAAAAAAAAAAAAwQAAAACaDkDCQEAAAACIT0AAAACCQABkQAAAAIFAAAAAmg4AAAAAAAAAAABAgAAAAAJAABlAAAAAgUAAAACaDcAAAAAAAAAAAEFAAAAAmg3BAAAAAJpMQkBAAAAAmU1AAAABQUAAAACZTYFAAAAAmY1CQABkQAAAAIFAAAAAmg4AAAAAAAAAAAABQAAAAJoOQkAAMoAAAACBQAAAAJoMQkAAGQAAAACBQAAAAJnNAAAAAAAAAAABAQAAAACaTIDCQEAAAACIT0AAAACCQABkQAAAAIFAAAAAmkxAAAAAAAAAAABAgAAAAAJAABlAAAAAgUAAAACaDkAAAAAAAAAAAEFAAAAAmg5BAAAAAJpMwkBAAAAAmU1AAAABQUAAAACZTYFAAAAAmY1CQABkQAAAAIFAAAAAmkxAAAAAAAAAAAABQAAAAJpMgkAAMoAAAACBQAAAAJoMQkAAGQAAAACBQAAAAJnNAAAAAAAAAAABQQAAAACaTQDCQEAAAACIT0AAAACCQABkQAAAAIFAAAAAmkzAAAAAAAAAAABAgAAAAAJAABlAAAAAgUAAAACaTIAAAAAAAAAAAEFAAAAAmkyBAAAAAJpNQkBAAAAAmU1AAAABQUAAAACZTYFAAAAAmY1CQABkQAAAAIFAAAAAmkzAAAAAAAAAAAABQAAAAJpNAkAAMoAAAACBQAAAAJoMQkAAGQAAAACBQAAAAJnNAAAAAAAAAAABgQAAAACaTYDCQEAAAACIT0AAAACCQABkQAAAAIFAAAAAmk1AAAAAAAAAAABAgAAAAAJAABlAAAAAgUAAAACaTQAAAAAAAAAAAEFAAAAAmk0BAAAAAJpNwkBAAAAAmU1AAAABQUAAAACZTYFAAAAAmY1CQABkQAAAAIFAAAAAmk1AAAAAAAAAAAABQAAAAJpNgkAAMoAAAACBQAAAAJoMQkAAGQAAAACBQAAAAJnNAAAAAAAAAAABwQAAAACaTgDCQEAAAACIT0AAAACCQABkQAAAAIFAAAAAmk3AAAAAAAAAAABAgAAAAAJAABlAAAAAgUAAAACaTYAAAAAAAAAAAEFAAAAAmk2BAAAAAJpOQkBAAAAAmU1AAAABQUAAAACZTYFAAAAAmY1CQABkQAAAAIFAAAAAmk3AAAA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", "height": 1825011, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 7To33DRuHmafM4PQySDspsRPoDJbeHtBE5cUEWW7Swxk Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let RSAPUBLIC = fromBase64String("base64:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArpOm/Yed4m/lL2dKxZQKdIglFNxhc8Oq3J3//kOBBsspGC4iQ5kbEdnvSpP+o5QU5msYKDHS8aeoY0VuF/pqBv+tdCtFhKO/ASZFJp0PRz0C9tF/0CPxaNDXS39qUGuxpCvvqJZqmAOwvwpH9lzFWjJLCDBvb9srLylLHXnk7KQ6m+gPQ537w/3wp3sVNkWecBgyBa7QlLaJWuvjlKs/qeNgwgLNeIfgO3hPbzkDeah7scFXXjo31pB4ZkprQVXxRPt43AnIY5oQ0qAxXKcpb2Hnrj0bvyYN3EyRB7Gummp9+M1JMS/4sHMeClQeH5YmfMnckO75lp0zOsd0/89Bjz7H375e0zyIZubE7a0pSG1C9Ao0PPlEAAGwZO5JObZdmOCoP6Y+mZPt0Yt1pXpU3Bgg+PHIh0YsyjcOKXqFVqVOLuZ22IcLH1PiO6CUCC02NoEdwvAdfDe6npu4Oxb1VR4iJBqQTFHFyCfrthoXXBHXN/GXN1j1Lf6rp80Ad5mvRwDUCrdFMSVGsc9FMllAy9ZhNgUIgYC2Sj/ZKYv/n/jLM8nDH3au0r8a/BtsQITBxliMLZ4/KfA2gXxJ/xzo1s6sB3XkAI7iEep5qTiD/LaDwI7P6hCW3jnmgiaFr8s+Zdt8nci9xUz4Re1ohWW1GXi+d/214qWqxX0jCfhW5CUCAwEAAQ==")
5+
6+let SERVER = addressFromStringValue("3N4vdqMsEsAZSJWfwYJcaCgUzASJTC2BWsP")
7+
8+let WAVELET = ((100 * 1000) * 1000)
9+
10+let SESSIONIDFIXSIZE = 44
11+
12+let RANDCYCLEPRICE = ((5 * WAVELET) / 1000)
13+
14+let MAXRANDSPERCYCLE = 14
15+
16+let STATEINIT = "INIT"
17+
18+let DATADONE = "READY"
19+
20+let STATEFINISHED = "FINISHED"
21+
22+let IdxState = 0
23+
24+let IdxOrganizerPub = 1
25+
26+let IdxRandFrom = 2
27+
28+let IdxRandTo = 3
29+
30+let IdxRandsCount = 4
31+
32+let IdxRemainRandsCount = 5
33+
34+let IdxDataKeysCount = 6
35+
36+let IdxDataDoneTxId = 7
37+
38+let IdxLastOffset = 8
39+
40+let IdxCurrRands = 13
41+
42+func abs (val) = if ((0 > val))
43+ then -(val)
44+ else val
45+
46+
47+func formatStateDataStr (drawState,organizerPubKey58,randFrom,randTo,randsCount,remainingRands,dataKeysCount,dataDoneTxId,lastOffset,slowIdx1,slowIdx2,fastIdx1,fastIdx2,randOrEmpty) = {
48+ let fullStateStr = ((((((((((((((((((((((((drawState + "_") + organizerPubKey58) + "_") + randFrom) + "_") + randTo) + "_") + randsCount) + "_") + remainingRands) + "_") + dataKeysCount) + "_") + dataDoneTxId) + "_") + lastOffset) + "_") + slowIdx1) + "_") + slowIdx2) + "_") + fastIdx1) + "_") + fastIdx2)
49+ if ((randOrEmpty == ""))
50+ then ((fullStateStr + "_") + "-")
51+ else ((fullStateStr + "_") + randOrEmpty)
52+ }
53+
54+
55+func extractGameDataList (sessionId) = {
56+ let rawDataStr = getStringValue(this, sessionId)
57+ split(rawDataStr, "_")
58+ }
59+
60+
61+func nextRand (div,min,currRandsStr,remainingRands,remainingHash) = {
62+ let nextRandInt = ((abs(toInt(remainingHash)) % div) + min)
63+ let nextRandStr = toString(nextRandInt)
64+ let duplicate = isDefined(indexOf(currRandsStr, nextRandStr))
65+ if (if (!(duplicate))
66+ then (remainingRands > 0)
67+ else false)
68+ then [((currRandsStr + "-") + nextRandStr), "yes"]
69+ else [currRandsStr, ""]
70+ }
71+
72+
73+func generateRand (sessionId,from,to,rsaSign,currRandsStr,remainingRands,lastOffsetBytes,currSlowIdx1,currSlowIdx2,currFastIdx1,currFastIdx2) = {
74+ let newIncList = if (((lastOffsetBytes + 1) > 87))
75+ then if ((currFastIdx2 > 241))
76+ then [0, (currSlowIdx1 + 1), (currSlowIdx2 + 1), 0, 1]
77+ else [0, currSlowIdx1, currSlowIdx2, (currFastIdx1 + 1), (currFastIdx2 + 1)]
78+ else [(lastOffsetBytes + 1), currSlowIdx1, currSlowIdx2, currFastIdx1, currFastIdx2]
79+ let newOffsetBytes = newIncList[0]
80+ let newSlowIdx1 = newIncList[1]
81+ let newSlowIdx2 = newIncList[2]
82+ let newFastIdx1 = newIncList[3]
83+ let newFastIdx2 = newIncList[4]
84+ let byteVect = (((((((take(drop(rsaSign, newSlowIdx1), 1) + take(drop(rsaSign, 1), 1)) + take(drop(rsaSign, newFastIdx1), 1)) + take(drop(rsaSign, 3), 1)) + take(drop(rsaSign, newSlowIdx2), 1)) + take(drop(rsaSign, 5), 1)) + take(drop(rsaSign, 6), 1)) + take(drop(rsaSign, newFastIdx2), 1))
85+ let randHash = ((sha256(byteVect) + blake2b256(byteVect)) + keccak256(byteVect))
86+ let div = ((to - from) + 1)
87+ let rand1 = nextRand(div, from, currRandsStr, remainingRands, drop(randHash, newOffsetBytes))
88+ let rem1 = if ((rand1[1] != ""))
89+ then (remainingRands - 1)
90+ else remainingRands
91+ let rand2 = nextRand(div, from, rand1[0], rem1, drop(randHash, (newOffsetBytes + 1)))
92+ let rem2 = if ((rand2[1] != ""))
93+ then (rem1 - 1)
94+ else rem1
95+ let rand3 = nextRand(div, from, rand2[0], rem2, drop(randHash, (newOffsetBytes + 2)))
96+ let rem3 = if ((rand3[1] != ""))
97+ then (rem2 - 1)
98+ else rem2
99+ let rand4 = nextRand(div, from, rand3[0], rem3, drop(randHash, (newOffsetBytes + 3)))
100+ let rem4 = if ((rand4[1] != ""))
101+ then (rem3 - 1)
102+ else rem3
103+ let rand5 = nextRand(div, from, rand4[0], rem4, drop(randHash, (newOffsetBytes + 4)))
104+ let rem5 = if ((rand5[1] != ""))
105+ then (rem4 - 1)
106+ else rem4
107+ let rand6 = nextRand(div, from, rand5[0], rem5, drop(randHash, (newOffsetBytes + 5)))
108+ let rem6 = if ((rand6[1] != ""))
109+ then (rem5 - 1)
110+ else rem5
111+ let rand7 = nextRand(div, from, rand6[0], rem6, drop(randHash, (newOffsetBytes + 6)))
112+ let rem7 = if ((rand7[1] != ""))
113+ then (rem6 - 1)
114+ else rem6
115+ let rand8 = nextRand(div, from, rand7[0], rem7, drop(randHash, (newOffsetBytes + 7)))
116+ let rem8 = if ((rand8[1] != ""))
117+ then (rem7 - 1)
118+ else rem7
119+ let rand9 = nextRand(div, from, rand8[0], rem8, drop(randHash, (newOffsetBytes + 8)))
120+ let rem9 = if ((rand9[1] != ""))
121+ then (rem8 - 1)
122+ else rem8
123+ let rand10 = nextRand(div, from, rand9[0], rem9, drop(randHash, (newOffsetBytes + 9)))
124+ let rem10 = if ((rand10[1] != ""))
125+ then (rem9 - 1)
126+ else rem9
127+ let rand11 = nextRand(div, from, rand10[0], rem10, drop(randHash, (newOffsetBytes + 10)))
128+ let rem11 = if ((rand11[1] != ""))
129+ then (rem10 - 1)
130+ else rem10
131+[rand11[0], if ((rem11 == 0))
132+ then "0"
133+ else toString(rem11), toString((newOffsetBytes + 10)), toString(newSlowIdx1), toString(newSlowIdx2), toString(newFastIdx1), toString(newFastIdx2)]
134+ }
135+
136+
137+func validateDtxKey (sessionId,dataKeysCount,data) = {
138+ let dataKeyInfo = split(data.key, "_")
139+ if ((size(dataKeyInfo) != 2))
140+ then throw("Invalid data key format. It must follow to ${sessionId}_${num}")
141+ else {
142+ let keySessionId = dataKeyInfo[0]
143+ let keyPostfix = dataKeyInfo[1]
144+ if ((sessionId != keySessionId))
145+ then throw(((("Several data keys have different sessionId: " + sessionId) + " and ") + keySessionId))
146+ else if (isDefined(getString(this, data.key)))
147+ then throw(("One of the data keys has already presented in account state: key=" + data.key))
148+ else if ((size(keyPostfix) > 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(keyPostfix, 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 keyPostfixIntOpt = parseInt(keyPostfix)
154+ if (isDefined(keyPostfixIntOpt))
155+ then {
156+ let keyPostfixInt = extract(keyPostfixIntOpt)
157+ if (if ((1 > keyPostfixInt))
158+ then true
159+ else (keyPostfixInt > dataKeysCount))
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(dataKeysCount)) + " but actualNum=") + toString(keyPostfixInt)))
161+ else match data.value {
162+ case str: String =>
163+ true
164+ case _ =>
165+ throw((sessionId + " draw: only String type is accepted for data transactions"))
166+ }
167+ }
168+ else throw((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to 31250 but actualNum=") + keyPostfix))
169+ }
170+ }
171+ }
172+
173+
174+func validateAndGetRandsPmt (randsCount,pmt,minDataPmt) = {
175+ let bound1 = 1000
176+ let basePrice1 = ((13 * WAVELET) / 100)
177+ let div1 = 50
178+ let diff1 = ((8 * WAVELET) / 100)
179+ let bound2 = 5000
180+ let basePrice2 = ((297 * WAVELET) / 100)
181+ let div2 = 1000
182+ let diff2 = ((143 * WAVELET) / 100)
183+ let bound3 = 50000
184+ let basePrice3 = ((1427 * WAVELET) / 100)
185+ let div3 = 5000
186+ let diff3 = ((705 * WAVELET) / 100)
187+ let minRandsPmt = if ((bound1 > randsCount))
188+ then (basePrice1 + ((randsCount / div1) * diff1))
189+ else if ((bound2 > randsCount))
190+ then (basePrice2 + (((randsCount / div2) - 1) * diff2))
191+ else if ((bound3 > randsCount))
192+ then (basePrice3 + (((randsCount / div3) - 1) * diff3))
193+ else throw("Please contact our sales team to generate more than 50k rands")
194+ let minPmt = (minRandsPmt + minDataPmt)
195+ if (isDefined(pmt.assetId))
196+ then throw("Only WAVES can be used as a payment for rands generation")
197+ else if ((minPmt > pmt.amount))
198+ then throw(((((("Attached payment is to small to generate " + toString(randsCount)) + " unique randoms numbers and upload at least 1 data tx: actualPmt=") + toString(pmt.amount)) + " but minPmt is ") + toString(minPmt)))
199+ else minRandsPmt
200+ }
201+
202+
203+@Callable(i)
204+func initDraw (randFrom,randTo,randsCount) = {
205+ let sessionId = toBase58String(i.transactionId)
206+ let rangeLength = ((randTo - randFrom) + 1)
207+ let maxRangeLength = (rangeLength / 2)
208+ let randToLen = size(toString((randTo - 1)))
209+ let randsCountLen = size(toString(randsCount))
210+ let dynamicStatusLen = (((2 * randToLen) + (2 * randsCountLen)) + 4)
211+ let maxRandsCount = (((5120 - 175) - dynamicStatusLen) / (randToLen + 1))
212+ if (if ((0 >= randFrom))
213+ then true
214+ else (0 >= randTo))
215+ then throw("randFrom and randTo must be greater than 0")
216+ else if ((randFrom >= randTo))
217+ then throw("randFrom must be strict less then randTo")
218+ else if ((randsCount > rangeLength))
219+ then throw(((((((("Impossible to generate " + toString(randsCount)) + " unique numbers for provided random range [") + toString(randFrom)) + ", ") + toString(randTo)) + "] with actual size ") + toString(rangeLength)))
220+ else if ((randsCount > maxRangeLength))
221+ then throw(((((((((("randsCount must be less then 50% of passed range length: range=[" + toString(randFrom)) + ", ") + toString(randTo)) + "], rangeLength=") + toString(rangeLength)) + " randsCount=") + toString(randsCount)) + " allowedRandsCount=") + toString(maxRangeLength)))
222+ else if ((randsCount > maxRandsCount))
223+ then throw(((((("randsCount couldn't be kept in 1 data entry: 1_randNumSpace=" + toString((randToLen + 1))) + " maxAllowedRandsCount=") + toString(maxRandsCount)) + " actualRandsCount=") + toString(randsCount)))
224+ else if (!(isDefined(i.payment)))
225+ then throw("Please provide payment to generate unique random numbers")
226+ else {
227+ let pmt = extract(i.payment)
228+ let minDataPmt = ((((WAVELET * 1) / 1000) * 33) + ((WAVELET * 4) / 1000))
229+ let randsPmt = validateAndGetRandsPmt(randsCount, pmt, minDataPmt)
230+ let dataPmt = (pmt.amount - randsPmt)
231+ let dataTxCount = (dataPmt / minDataPmt)
232+ let dataKeysCount = if ((31250 >= (dataTxCount * 5)))
233+ then (dataTxCount * 5)
234+ else 31250
235+ let organizerPubKey58 = toBase58String(i.callerPublicKey)
236+ let randsCountStr = toString(randsCount)
237+ let initState = formatStateDataStr(STATEINIT, organizerPubKey58, toString(randFrom), toString(randTo), randsCountStr, randsCountStr, toString(dataKeysCount), "null", "0", "0", "1", "0", "1", "")
238+ ScriptResult(WriteSet([DataEntry(sessionId, initState)]), TransferSet([ScriptTransfer(SERVER, randsPmt, unit)]))
239+ }
240+ }
241+
242+
243+
244+@Callable(i)
245+func ready (sessionId) = {
246+ let drawParamsList = extractGameDataList(sessionId)
247+ let drawState = drawParamsList[IdxState]
248+ let organizerPubKey58 = drawParamsList[IdxOrganizerPub]
249+ let randsCountStr = drawParamsList[IdxRandsCount]
250+ let remainRandsCountStr = drawParamsList[IdxRemainRandsCount]
251+ let fromStr = drawParamsList[IdxRandFrom]
252+ let toStr = drawParamsList[IdxRandTo]
253+ let dataKeysCount = drawParamsList[IdxDataKeysCount]
254+ let organizerPubKey = fromBase58String(organizerPubKey58)
255+ if ((drawState != STATEINIT))
256+ then throw((sessionId + " draw: moving into READY state is allowed only from INIT state"))
257+ else if ((organizerPubKey != i.callerPublicKey))
258+ then throw((sessionId + "draw: moving into READY state is allowed for organizer only"))
259+ else {
260+ let readyState = formatStateDataStr(DATADONE, organizerPubKey58, fromStr, toStr, randsCountStr, remainRandsCountStr, dataKeysCount, toBase58String(i.transactionId), "0", "0", "1", "0", "1", "")
261+ WriteSet([DataEntry(sessionId, readyState)])
262+ }
263+ }
264+
265+
266+
267+@Callable(i)
268+func random (sessionId,rsaSign) = {
269+ let drawParamsList = extractGameDataList(sessionId)
270+ let drawState = drawParamsList[IdxState]
271+ let organizerPubKey58 = drawParamsList[IdxOrganizerPub]
272+ let randsCountStr = drawParamsList[IdxRandsCount]
273+ let remainRandsCount = parseIntValue(drawParamsList[IdxRemainRandsCount])
274+ let lastOffsetBytes = parseIntValue(drawParamsList[IdxLastOffset])
275+ let currRandsStr = drawParamsList[IdxCurrRands]
276+ let fromStr = drawParamsList[IdxRandFrom]
277+ let toStr = drawParamsList[IdxRandTo]
278+ let dataDoneTxId = drawParamsList[IdxDataDoneTxId]
279+ let slowIdx1 = parseIntValue(drawParamsList[9])
280+ let slowIdx2 = parseIntValue(drawParamsList[10])
281+ let fastIdx1 = parseIntValue(drawParamsList[11])
282+ let fastIdx2 = parseIntValue(drawParamsList[12])
283+ let from = parseIntValue(fromStr)
284+ let to = parseIntValue(toStr)
285+ let organizerPubKey = fromBase58String(organizerPubKey58)
286+ if ((drawState != DATADONE))
287+ then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
288+ else if (!(rsaVerify(SHA256, (toBytes(sessionId) + toBytes(dataDoneTxId)), rsaSign, RSAPUBLIC)))
289+ then throw("Invalid RSA signature")
290+ else {
291+ let randGenInfo = generateRand(sessionId, from, to, rsaSign, currRandsStr, remainRandsCount, lastOffsetBytes, slowIdx1, slowIdx2, fastIdx1, fastIdx2)
292+ let newRemainRandsCountStr = randGenInfo[1]
293+ let newState = if ((newRemainRandsCountStr == "0"))
294+ then STATEFINISHED
295+ else DATADONE
296+ WriteSet([DataEntry(sessionId, formatStateDataStr(newState, organizerPubKey58, fromStr, toStr, randsCountStr, newRemainRandsCountStr, drawParamsList[IdxDataKeysCount], dataDoneTxId, randGenInfo[2], randGenInfo[3], randGenInfo[4], randGenInfo[5], randGenInfo[6], randGenInfo[0]))])
297+ }
298+ }
299+
300+

github/deemru/w8io/873ac7e 
46.27 ms