tx · A7hqptXR326QEmn1GSESPwkjLiu1tHmef3PXWoDtmfb4

3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z:  -0.02000000 Waves

2021.12.15 16:01 [1835407] smart account 3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z > SELF 0.00000000 Waves

{ "type": 13, "id": "A7hqptXR326QEmn1GSESPwkjLiu1tHmef3PXWoDtmfb4", "fee": 2000000, "feeAssetId": null, "timestamp": 1639573303200, "version": 2, "chainId": 84, "sender": "3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z", "senderPublicKey": "FsjTCE3KV2vD2r7Du9D3J6Ea2T643E6zxzn6y24outXr", "proofs": [ "5KZs7HZ4fSczMYM6ARqQ4DP6enBUMnmJnagzSQUb3RJPYbijn9wB5Xaw1f6Uo49t74VcjJbBXmPTuwrkY8PNaCef" ], "script": "base64:AAIDAAAAAAAAB2wIARIFCgMBAQESBAoCCAIaDwoBQRIKcmFuZHNDb3VudBoTCgFCEg5yZW1haW5pbmdSYW5kcxoSCgFDEg1kYXRhS2V5c0NvdW50GhEKAUQSDGRhdGFEb25lVHhJZBoPCgFFEgpsYXN0T2Zmc2V0Gg0KAUYSCHNsb3dJZHgxGg0KAUcSCHNsb3dJZHgyGg0KAUgSCGZhc3RJZHgxGg0KAUkSCGZhc3RJZHgyGhAKAUoSC3JhbmRPckVtcHR5GhEKAUsSDGZ1bGxTdGF0ZVN0choYCgFMEhNleHRyYWN0R2FtZURhdGFMaXN0Gg4KAU0SCXNlc3Npb25JZBoPCgFOEgpyYXdEYXRhU3RyGg0KAU8SCG5leHRSYW5kGggKAVASA2RpdhoICgFREgNtaW4aEQoBUhIMY3VyclJhbmRzU3RyGhIKAVMSDXJlbWFpbmluZ0hhc2gaEAoBVBILbmV4dFJhbmRJbnQaEAoBVRILbmV4dFJhbmRTdHIaDgoBVhIJZHVwbGljYXRlGhEKAVcSDGdlbmVyYXRlUmFuZBoJCgFYEgRmcm9tGgcKAVkSAnRvGgwKAVoSB3JzYVNpZ24aDgoBYRIJUlNBUFVCTElDGgsKAmFBEgVkaWZmMRoMCgJhQhIGYm91bmQyGhAKAmFDEgpiYXNlUHJpY2UyGgoKAmFEEgRkaXYyGgsKAmFFEgVkaWZmMhoMCgJhRhIGYm91bmQzGhAKAmFHEgpiYXNlUHJpY2UzGgoKAmFIEgRkaXYzGgsKAmFJEgVkaWZmMxoRCgJhShILbWluUmFuZHNQbXQaDAoCYUsSBm1pblBtdBoHCgJhTBIBaRoRCgJhTRILcmFuZ2VMZW5ndGgaFAoCYU4SDm1heFJhbmdlTGVuZ3RoGg8KAmFPEglyYW5kVG9MZW4aEwoCYVASDXJhbmRzQ291bnRMZW4aFgoCYVESEGR5bmFtaWNTdGF0dXNMZW4aEwoCYVISDW1heFJhbmRzQ291bnQaDgoCYVMSCHJhbmRzUG10Gg0KAmFUEgdkYXRhUG10GhEKAmFVEgtkYXRhVHhDb3VudBoTCgJhVhINcmFuZHNDb3VudFN0choPCgJhVxIJaW5pdFN0YXRlGhQKAmFYEg5kcmF3UGFyYW1zTGlzdBoWCgJhWRIQcmVtYWluUmFuZHNDb3VudBoNCgJhWhIHZnJvbVN0choVCgJhYRIPbGFzdE9mZnNldEJ5dGVzGhIKAmFiEgxjdXJyU2xvd0lkeDEaEgoCYWMSDGN1cnJTbG93SWR4MhoSCgJhZBIMY3VyckZhc3RJZHgxGhIKAmFlEgxjdXJyRmFzdElkeDIaEAoCYWYSCm5ld0luY0xpc3QaFAoCYWcSDm5ld09mZnNldEJ5dGVzGhEKAmFoEgtuZXdTbG93SWR4MRoRCgJhaRILbmV3U2xvd0lkeDIaEQoCYWoSC25ld0Zhc3RJZHgxGhEKAmFrEgtuZXdGYXN0SWR4MhoUCgJhbBIOdmFsaWRhdGVEdHhLZXkaCgoCYW0SBGRhdGEaEQoCYW4SC2RhdGFLZXlJbmZvGhIKAmFvEgxrZXlTZXNzaW9uSWQaEAoCYXASCmtleVBvc3RmaXgaFgoCYXESEGtleVBvc3RmaXhJbnRPcHQaEwoCYXISDWtleVBvc3RmaXhJbnQaDQoCYXMSByRtYXRjaDAaCQoCYXQSA3N0chocCgJhdRIWdmFsaWRhdGVBbmRHZXRSYW5kc1BtdBoJCgJhdhIDcG10GhAKAmF3EgptaW5EYXRhUG10GgwKAmF4EgZib3VuZDEaEAoCYXkSCmJhc2VQcmljZTEaCgoCYXoSBGRpdjEaCwoBYhIGU0VSVkVSGgsKAmJhEgV0b1N0choVCgJiYhIPb3JnYW5pemVyUHViS2V5GhEKAmJjEgtyYW5kR2VuSW5mbxoMCgFjEgdXQVZFTEVUGhUKAWQSEFNFU1NJT05JREZJWFNJWkUaEwoBZRIOUkFORENZQ0xFUFJJQ0UaFQoBZhIQTUFYUkFORFNQRVJDWUNMRRoOCgFnEglTVEFURUlOSVQaDQoBaBIIREFUQURPTkUaEgoBaRINU1RBVEVGSU5JU0hFRBoNCgFqEghJZHhTdGF0ZRoUCgFrEg9JZHhPcmdhbml6ZXJQdWIaEAoBbBILSWR4UmFuZEZyb20aDgoBbRIJSWR4UmFuZFRvGhIKAW4SDUlkeFJhbmRzQ291bnQaGAoBbxITSWR4UmVtYWluUmFuZHNDb3VudBoVCgFwEhBJZHhEYXRhS2V5c0NvdW50GhQKAXESD0lkeERhdGFEb25lVHhJZBoSCgFyEg1JZHhMYXN0T2Zmc2V0GhEKAXMSDElkeEN1cnJSYW5kcxoICgF0EgNhYnMaCAoBdRIDdmFsGhcKAXYSEmZvcm1hdFN0YXRlRGF0YVN0choOCgF3EglkcmF3U3RhdGUaFgoBeBIRb3JnYW5pemVyUHViS2V5NTgaDQoBeRIIcmFuZEZyb20aCwoBehIGcmFuZFRvAAAAGgAAAAABYQkAAlsAAAABAgAAAXNiYXNlNjQ6TFMwdExTMUNSVWRKVGlCUVZVSk1TVU1nUzBWWkxTMHRMUzBLVFVsSFprMUJNRWREVTNGSFUwbGlNMFJSUlVKQlVWVkJRVFJIVGtGRVEwSnBVVXRDWjFGRFIyNUhkM1pWYkcxbVRHNVpUa2R5UlNzemN6UjJRVFpSWkFvd2EyOVBOemRaVWpKRGRUWnBPV1F2YWxFMk9WSmtVMGhIUkZsd2IzaEtNMWd2U1M4NE1tdHBTMUpSY0hsd2NXSmpVUzlVWTNJeFYxVlJNMVJEUW1rMUNuRm1ZeXQ0WldWeU9TOW5jbmhVT0V4SmF6RXZWRmhYVkVaQlF6QTJNM1IzVjFkUGJWcFhjR05QTjNreVpsUnVVa2xrU0ZSbGFVczBUMXB6U3l0MVoyVUtPVGRHUzNCVGJXb3hjbXBGVkRGbU0wRjNTVVJCVVVGQ0NpMHRMUzB0UlU1RUlGQlZRa3hKUXlCTFJWa3RMUzB0TFE9PQAAAAABYgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABAgAAACMzTjR2ZHFNc0VzQVpTSldmd1lKY2FDZ1V6QVNKVEMyQldzUAAAAAABYwkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAAAWQAAAAAAAAAACwAAAAAAWUJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAAFjAAAAAAAAAAPoAAAAAAFmAAAAAAAAAAAOAAAAAAFnAgAAAARJTklUAAAAAAFoAgAAAAVSRUFEWQAAAAABaQIAAAAIRklOSVNIRUQAAAAAAWoAAAAAAAAAAAAAAAAAAWsAAAAAAAAAAAEAAAAAAWwAAAAAAAAAAAIAAAAAAW0AAAAAAAAAAAMAAAAAAW4AAAAAAAAAAAQAAAAAAW8AAAAAAAAAAAUAAAAAAXAAAAAAAAAAAAYAAAAAAXEAAAAAAAAAAAcAAAAAAXIAAAAAAAAAAAgA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", "height": 1835407, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: wwHH9oWy8GFRKRFuyS1BnqRCLD2DpYqqnS7sZCUTu7M Next: DWnRzJsXj91ipszVRrzxA13Z1dwPWBLUGCfoNjDP4Jd3 Diff:
OldNewDifferences
8181 let newSlowIdx2 = newIncList[2]
8282 let newFastIdx1 = newIncList[3]
8383 let newFastIdx2 = newIncList[4]
84- take(drop(rsaSign, newSlowIdx1), 1)
84+ drop(rsaSign, 0)
8585 }
8686
8787
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDR25Hd3ZVbG1mTG5ZTkdyRSszczR2QTZRZAowa29PNzdZUjJDdTZpOWQvalE2OVJkU0hHRFlwb3hKM1gvSS84MmtpS1JRcHlwcWJjUS9UY3IxV1VRM1RDQmk1CnFmYyt4ZWVyOS9ncnhUOExJazEvVFhXVEZBQzA2M3R3V1dPbVpXcGNPN3kyZlRuUklkSFRlaUs0T1pzSyt1Z2UKOTdGS3BTbWoxcmpFVDFmM0F3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ==")
55
66 let SERVER = addressFromStringValue("3N4vdqMsEsAZSJWfwYJcaCgUzASJTC2BWsP")
77
88 let WAVELET = ((100 * 1000) * 1000)
99
1010 let SESSIONIDFIXSIZE = 44
1111
1212 let RANDCYCLEPRICE = ((5 * WAVELET) / 1000)
1313
1414 let MAXRANDSPERCYCLE = 14
1515
1616 let STATEINIT = "INIT"
1717
1818 let DATADONE = "READY"
1919
2020 let STATEFINISHED = "FINISHED"
2121
2222 let IdxState = 0
2323
2424 let IdxOrganizerPub = 1
2525
2626 let IdxRandFrom = 2
2727
2828 let IdxRandTo = 3
2929
3030 let IdxRandsCount = 4
3131
3232 let IdxRemainRandsCount = 5
3333
3434 let IdxDataKeysCount = 6
3535
3636 let IdxDataDoneTxId = 7
3737
3838 let IdxLastOffset = 8
3939
4040 let IdxCurrRands = 13
4141
4242 func abs (val) = if ((0 > val))
4343 then -(val)
4444 else val
4545
4646
4747 func formatStateDataStr (drawState,organizerPubKey58,randFrom,randTo,randsCount,remainingRands,dataKeysCount,dataDoneTxId,lastOffset,slowIdx1,slowIdx2,fastIdx1,fastIdx2,randOrEmpty) = {
4848 let fullStateStr = ((((((((((((((((((((((((drawState + "_") + organizerPubKey58) + "_") + randFrom) + "_") + randTo) + "_") + randsCount) + "_") + remainingRands) + "_") + dataKeysCount) + "_") + dataDoneTxId) + "_") + lastOffset) + "_") + slowIdx1) + "_") + slowIdx2) + "_") + fastIdx1) + "_") + fastIdx2)
4949 if ((randOrEmpty == ""))
5050 then ((fullStateStr + "_") + "-")
5151 else ((fullStateStr + "_") + randOrEmpty)
5252 }
5353
5454
5555 func extractGameDataList (sessionId) = {
5656 let rawDataStr = getStringValue(this, sessionId)
5757 split(rawDataStr, "_")
5858 }
5959
6060
6161 func nextRand (div,min,currRandsStr,remainingRands,remainingHash) = {
6262 let nextRandInt = ((abs(toInt(remainingHash)) % div) + min)
6363 let nextRandStr = toString(nextRandInt)
6464 let duplicate = isDefined(indexOf(currRandsStr, nextRandStr))
6565 if (if (!(duplicate))
6666 then (remainingRands > 0)
6767 else false)
6868 then [((currRandsStr + "-") + nextRandStr), "yes"]
6969 else [currRandsStr, ""]
7070 }
7171
7272
7373 func generateRand (sessionId,from,to,rsaSign,currRandsStr,remainingRands,lastOffsetBytes,currSlowIdx1,currSlowIdx2,currFastIdx1,currFastIdx2) = {
7474 let newIncList = if (((lastOffsetBytes + 1) > 87))
7575 then if ((currFastIdx2 > 241))
7676 then [0, (currSlowIdx1 + 1), (currSlowIdx2 + 1), 0, 1]
7777 else [0, currSlowIdx1, currSlowIdx2, (currFastIdx1 + 1), (currFastIdx2 + 1)]
7878 else [(lastOffsetBytes + 1), currSlowIdx1, currSlowIdx2, currFastIdx1, currFastIdx2]
7979 let newOffsetBytes = newIncList[0]
8080 let newSlowIdx1 = newIncList[1]
8181 let newSlowIdx2 = newIncList[2]
8282 let newFastIdx1 = newIncList[3]
8383 let newFastIdx2 = newIncList[4]
84- take(drop(rsaSign, newSlowIdx1), 1)
84+ drop(rsaSign, 0)
8585 }
8686
8787
8888 func validateDtxKey (sessionId,dataKeysCount,data) = {
8989 let dataKeyInfo = split(data.key, "_")
9090 if ((size(dataKeyInfo) != 2))
9191 then throw("Invalid data key format. It must follow to ${sessionId}_${num}")
9292 else {
9393 let keySessionId = dataKeyInfo[0]
9494 let keyPostfix = dataKeyInfo[1]
9595 if ((sessionId != keySessionId))
9696 then throw(((("Several data keys have different sessionId: " + sessionId) + " and ") + keySessionId))
9797 else if (isDefined(getString(this, data.key)))
9898 then throw(("One of the data keys has already presented in account state: key=" + data.key))
9999 else if ((size(keyPostfix) > 4))
100100 then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} length couldn't be greater than 4")
101101 else if ((take(keyPostfix, 1) == "0"))
102102 then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} couldn't start from 0")
103103 else {
104104 let keyPostfixIntOpt = parseInt(keyPostfix)
105105 if (isDefined(keyPostfixIntOpt))
106106 then {
107107 let keyPostfixInt = extract(keyPostfixIntOpt)
108108 if (if ((1 > keyPostfixInt))
109109 then true
110110 else (keyPostfixInt > dataKeysCount))
111111 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)))
112112 else match data.value {
113113 case str: String =>
114114 true
115115 case _ =>
116116 throw((sessionId + " draw: only String type is accepted for data transactions"))
117117 }
118118 }
119119 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))
120120 }
121121 }
122122 }
123123
124124
125125 func validateAndGetRandsPmt (randsCount,pmt,minDataPmt) = {
126126 let bound1 = 1000
127127 let basePrice1 = ((13 * WAVELET) / 100)
128128 let div1 = 50
129129 let diff1 = ((8 * WAVELET) / 100)
130130 let bound2 = 5000
131131 let basePrice2 = ((297 * WAVELET) / 100)
132132 let div2 = 1000
133133 let diff2 = ((143 * WAVELET) / 100)
134134 let bound3 = 50000
135135 let basePrice3 = ((1427 * WAVELET) / 100)
136136 let div3 = 5000
137137 let diff3 = ((705 * WAVELET) / 100)
138138 let minRandsPmt = if ((bound1 > randsCount))
139139 then (basePrice1 + ((randsCount / div1) * diff1))
140140 else if ((bound2 > randsCount))
141141 then (basePrice2 + (((randsCount / div2) - 1) * diff2))
142142 else if ((bound3 > randsCount))
143143 then (basePrice3 + (((randsCount / div3) - 1) * diff3))
144144 else throw("Please contact our sales team to generate more than 50k rands")
145145 let minPmt = (minRandsPmt + minDataPmt)
146146 if (isDefined(pmt.assetId))
147147 then throw("Only WAVES can be used as a payment for rands generation")
148148 else if ((minPmt > pmt.amount))
149149 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)))
150150 else minRandsPmt
151151 }
152152
153153
154154 @Callable(i)
155155 func initDraw (randFrom,randTo,randsCount) = {
156156 let sessionId = toBase58String(i.transactionId)
157157 let rangeLength = ((randTo - randFrom) + 1)
158158 let maxRangeLength = (rangeLength / 2)
159159 let randToLen = size(toString((randTo - 1)))
160160 let randsCountLen = size(toString(randsCount))
161161 let dynamicStatusLen = (((2 * randToLen) + (2 * randsCountLen)) + 4)
162162 let maxRandsCount = (((5120 - 175) - dynamicStatusLen) / (randToLen + 1))
163163 if (if ((0 >= randFrom))
164164 then true
165165 else (0 >= randTo))
166166 then throw("randFrom and randTo must be greater than 0")
167167 else if ((randFrom >= randTo))
168168 then throw("randFrom must be strict less then randTo")
169169 else if ((randsCount > rangeLength))
170170 then throw(((((((("Impossible to generate " + toString(randsCount)) + " unique numbers for provided random range [") + toString(randFrom)) + ", ") + toString(randTo)) + "] with actual size ") + toString(rangeLength)))
171171 else if ((randsCount > maxRangeLength))
172172 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)))
173173 else if ((randsCount > maxRandsCount))
174174 then throw(((((("randsCount couldn't be kept in 1 data entry: 1_randNumSpace=" + toString((randToLen + 1))) + " maxAllowedRandsCount=") + toString(maxRandsCount)) + " actualRandsCount=") + toString(randsCount)))
175175 else if (!(isDefined(i.payment)))
176176 then throw("Please provide payment to generate unique random numbers")
177177 else {
178178 let pmt = extract(i.payment)
179179 let minDataPmt = ((((WAVELET * 1) / 1000) * 33) + ((WAVELET * 4) / 1000))
180180 let randsPmt = validateAndGetRandsPmt(randsCount, pmt, minDataPmt)
181181 let dataPmt = (pmt.amount - randsPmt)
182182 let dataTxCount = (dataPmt / minDataPmt)
183183 let dataKeysCount = if ((31250 >= (dataTxCount * 5)))
184184 then (dataTxCount * 5)
185185 else 31250
186186 let organizerPubKey58 = toBase58String(i.callerPublicKey)
187187 let randsCountStr = toString(randsCount)
188188 let initState = formatStateDataStr(DATADONE, organizerPubKey58, toString(randFrom), toString(randTo), randsCountStr, randsCountStr, toString(dataKeysCount), toBase58String(i.transactionId), "0", "0", "1", "0", "1", "")
189189 ScriptResult(WriteSet([DataEntry(sessionId, initState)]), TransferSet([ScriptTransfer(SERVER, randsPmt, unit)]))
190190 }
191191 }
192192
193193
194194
195195 @Callable(i)
196196 func random (sessionId,rsaSign) = {
197197 let drawParamsList = extractGameDataList(sessionId)
198198 let drawState = drawParamsList[IdxState]
199199 let organizerPubKey58 = drawParamsList[IdxOrganizerPub]
200200 let randsCountStr = drawParamsList[IdxRandsCount]
201201 let remainRandsCount = parseIntValue(drawParamsList[IdxRemainRandsCount])
202202 let lastOffsetBytes = parseIntValue(drawParamsList[IdxLastOffset])
203203 let currRandsStr = drawParamsList[IdxCurrRands]
204204 let fromStr = drawParamsList[IdxRandFrom]
205205 let toStr = drawParamsList[IdxRandTo]
206206 let dataDoneTxId = drawParamsList[IdxDataDoneTxId]
207207 let slowIdx1 = parseIntValue(drawParamsList[9])
208208 let slowIdx2 = parseIntValue(drawParamsList[10])
209209 let fastIdx1 = parseIntValue(drawParamsList[11])
210210 let fastIdx2 = parseIntValue(drawParamsList[12])
211211 let from = parseIntValue(fromStr)
212212 let to = parseIntValue(toStr)
213213 let organizerPubKey = fromBase58String(organizerPubKey58)
214214 if ((drawState != DATADONE))
215215 then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
216216 else if (false)
217217 then throw("Invalid RSA signature")
218218 else {
219219 let randGenInfo = generateRand(sessionId, from, to, rsaSign, currRandsStr, remainRandsCount, lastOffsetBytes, slowIdx1, slowIdx2, fastIdx1, fastIdx2)
220220 WriteSet([DataEntry("byteVect", randGenInfo), DataEntry((sessionId + "test"), (toBytes(sessionId) + toBytes(dataDoneTxId))), DataEntry((sessionId + "test-2"), "ds")])
221221 }
222222 }
223223
224224

github/deemru/w8io/873ac7e 
35.14 ms