tx · Bdkc2bQc1yqXVk2fqroaZUTNFnZFHaHjJfdyabVDuWvn

3My4amTg9Vcca9Lahzf9CkoiC8ddRqtUmGx:  -0.01500000 Waves

2020.06.05 11:52 [1029743] smart account 3My4amTg9Vcca9Lahzf9CkoiC8ddRqtUmGx > SELF 0.00000000 Waves

{ "type": 13, "id": "Bdkc2bQc1yqXVk2fqroaZUTNFnZFHaHjJfdyabVDuWvn", "fee": 1500000, "feeAssetId": null, "timestamp": 1591347164383, "version": 1, "sender": "3My4amTg9Vcca9Lahzf9CkoiC8ddRqtUmGx", "senderPublicKey": "2Me4o8yxiUPB7N3yEorDj2DYWAU69GhkYdKU31Rc4ziC", "proofs": [ "4a2HFNyhfQGhc1YJjXyN6PYb979AiHL7UtBfxiQ6mDXMQkH6jP8UmvjTKk6NVTDWX2Qd9VSTFYEUM5PbD5bU6dyE" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEIEgQKAggCAAAALAAAAAAGV0FWRVNEAAAAAAAF9eEAAAAAAAVVU0RORAAAAAAAAA9CQAAAAAAIREVDSU1BTFMJAARMAAAAAgUAAAAGV0FWRVNECQAETAAAAAIFAAAABVVTRE5EBQAAAANuaWwAAAAABkFTU0VUUwkABEwAAAACBQAAAAR1bml0CQAETAAAAAIJAAJZAAAAAQIAAAAsM0tGWEJHR0xDakE1WjJEdVc0RHE5ZkREckhqSkpQMVpFa2FvYWpTenVLc0MFAAAAA25pbAAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABj2Jhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW1wdVhjSS9vNHBJQjV5d3Y5RE9PR2FwVEJVd1JWbE0vNitINmhGZWxPWHRrcndZL1lJdG1QeEVEcHo3ckFlclFQUWU5dERQRWFBdi9HbmxFenR5Yk9GWGd1OUR6RGU4WW9NUkQxdmFrZ29BY29nbWJZNThRRDZLTWo1SGtvVmoveVROSWM5c3pqNXFoSWxyQWRtYjNLTEw2aFFVN3k4K0pqNjlCV1ZQc2FRZ2tzcFNkZVl0YjF0SFFjN3Q5NW43T1o1NnIyQTdHMytiUWY2blNNa1BrQWhJckVwYkNtNThvaUdCY3pkVGQvTHFGU1ZvdFpzYkw3WWg2U0hMZm5IZUQrUWdjZkpybmFtOE9ITUdKRUpUUlhqSUxlSEdqbFJDUDhvVnBpb0hyeTFTMnhQeDVzVnpJbTJNTStDelllbkFHbG8wajI2YXRCaGlVTG9UdWx3RDNwUUlEQVFBQgAAAAAGU0VSVkVSCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNNb3VXM0cyTVAxVkQ0R3ZEd2hlenN3aXdMSjRqa1RnR1RSAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABDgAAAAAARCRVQxAAAAAAAAAAABAAAAAARCRVQyAAAAAAAAAAACAAAAAARCRVQ0AAAAAAAAAAAEAAAAAARCRVQ4AAAAAAAAAAAIAAAAAAVCRVQxNAAAAAAAAAAADgAAAAAIUkFURU1VTFQAAAAAAAAAJxAAAAAABVJBVEUxAAAA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AAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAIZ2FtZURhdGEJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAADlNUQVRFU1VCTUlUVEVEBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAAZoZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAIAAAAACQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAkBAAAAFWluY3JlYXNlUmVzZXJ2ZUFtb3VudAAAAAIFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMaW5jcmVtZW50SW50AAAAAQUAAAAPR0FNRVNDT1VOVEVSS0VZCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAACGdhbWVEYXRhBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGU0VSVkVSBQAAAApjb21taXNzaW9uCAUAAAABcAAAAAdhc3NldElkBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAhnYW1lRGF0YQkBAAAAD2V4dHJhY3RHYW1lRGF0YQAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAPSWR4UGxheWVyQ2hvaWNlBAAAAA1zdGFydGVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEElkeFN0YXJ0ZWRIZWlnaHQEAAAACXdpbkFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhXaW5BbW91bnQEAAAAB2Fzc2V0SWQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAKSWR4QXNzZXRJZAQAAAAOcGxheWVyUHViS2V5NTgJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAAAx3aW5CeVRpbWVvdXQJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADXN0YXJ0ZWRIZWlnaHQFAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUEAAAAEWRlY3JlYXNlZFJlc2VydmVzCQEAAAAWZGVjcmVhc2VSZXNlcnZlZEFtb3VudAAAAAMFAAAABmdhbWVJZAUAAAAHYXNzZXRJZAUAAAAJd2luQW1vdW50AwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDBQAAAAx3aW5CeVRpbWVvdXQEAAAACnJhbmRDaG9pc2UJAAEvAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAAtuZXdnYW1lRGF0YQkBAAAADmZvcm1hdEdhbWVEYXRhAAAABwUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAKcmFuZENob2lzZQkBAAAADHdpblNjcmlwdFNldAAAAAcFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAAtuZXdnYW1lRGF0YQUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAKcmFuZENob2lzZQkBAAAAEmdlbmVyYXRlUmFuZENob2lzZQAAAAIFAAAABmdhbWVJZAUAAAAHcnNhU2lnbgMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAGU0VSVkVSCQAAAgAAAAECAAAAK1JlZ3VsYXIgd2l0aGRyYXcgY2FuIGJlIGRvbmUgYnkgc2VydmVyIG9ubHkDCQEAAAALaXNQbGF5ZXJXaW4AAAACBQAAAAxwbGF5ZXJDaG9pY2UFAAAACnJhbmRDaG9pc2UEAAAAC25ld2dhbWVEYXRhCQEAAAAOZm9ybWF0R2FtZURhdGEAAAAHBQAAAAhTVEFURVdPTgUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAApyYW5kQ2hvaXNlCQEAAAAMd2luU2NyaXB0U2V0AAAABwUAAAAGZ2FtZUlkBQAAAA1wbGF5ZXJBZGRyZXNzBQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAAC25ld2dhbWVEYXRhBQAAAAx3aW5CeVRpbWVvdXQFAAAAEWRlY3JlYXNlZFJlc2VydmVzBAAAAAtuZXdnYW1lRGF0YQkBAAAADmZvcm1hdEdhbWVEYXRhAAAABwUAAAAJU1RBVEVMT1NUBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAACnJhbmRDaG9pc2UJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAALbmV3Z2FtZURhdGEJAARMAAAAAgUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAA3R0eAUAAAAHJG1hdGNoMAQAAAAHYXNzZXRJZAkBAAAAFXZhbGlkYXRlQW5kR2V0QXNzZXRJZAAAAAEIBQAAAAN0dHgAAAAHYXNzZXRJZAkAAGcAAAACCQAAZQAAAAIJAAPrAAAAAgUAAAAEdGhpcwgFAAAAA3R0eAAAAAdhc3NldElkCAUAAAADdHR4AAAABmFtb3VudAkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAAAAAAAAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAA3N0eAUAAAAHJG1hdGNoMAMJAAAAAAAAAgkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAABwcHu9NqDw==", "chainId": 84, "height": 1029743, "spentComplexity": 0 } View: original | compacted Prev: none Next: FXQuBYxTAsTZ5CcKubB8yjE589crQ4JoWhmXBW29ZdNP Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let WAVESD = 100000000
5+
6+let USDND = 1000000
7+
8+let DECIMALS = [WAVESD, USDND]
9+
10+let ASSETS = [unit, fromBase58String("3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC")]
11+
12+let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpuXcI/o4pIB5ywv9DOOGapTBUwRVlM/6+H6hFelOXtkrwY/YItmPxEDpz7rAerQPQe9tDPEaAv/GnlEztybOFXgu9DzDe8YoMRD1vakgoAcogmbY58QD6KMj5HkoVj/yTNIc9szj5qhIlrAdmb3KLL6hQU7y8+Jj69BWVPsaQgkspSdeYtb1tHQc7t95n7OZ56r2A7G3+bQf6nSMkPkAhIrEpbCm58oiGBczdTd/LqFSVotZsbL7Yh6SHLfnHeD+QgcfJrnam8OHMGJEJTRXjILeHGjlRCP8oVpioHry1S2xPx5sVzIm2MM+CzYenAGlo0j26atBhiULoTulwD3pQIDAQAB")
13+
14+let SERVER = addressFromStringValue("3MouW3G2MP1VD4GvDwhezswiwLJ4jkTgGTR")
15+
16+let RANDORACLETIMEFRAME = 4320
17+
18+let BET1 = 1
19+
20+let BET2 = 2
21+
22+let BET4 = 4
23+
24+let BET8 = 8
25+
26+let BET14 = 14
27+
28+let RATEMULT = 10000
29+
30+let RATE1 = 39655
31+
32+let RATE2 = 24600
33+
34+let RATE3 = 19000
35+
36+let RATE4 = 14200
37+
38+let RATE5 = 11400
39+
40+let RATES = [RATE1, RATE2, RATE3, RATE4, RATE5]
41+
42+let BETS = [BET1, BET2, BET4, BET8, BET14]
43+
44+let IdxGameState = 0
45+
46+let IdxPlayerChoice = 1
47+
48+let IdxPlayerPubKey58 = 2
49+
50+let IdxStartedHeight = 3
51+
52+let IdxWinAmount = 4
53+
54+let IdxAssetId = 5
55+
56+let RESERVATIONKEY = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"]
57+
58+let GAMESCOUNTERKEY = "$GAME_NUM"
59+
60+let STATESUBMITTED = "SUBMITTED"
61+
62+let STATEWON = "WON"
63+
64+let STATELOST = "LOST"
65+
66+func getIntOr (key,default) = if (isDefined(getInteger(this, key)))
67+ then getIntegerValue(this, key)
68+ else default
69+
70+
71+func setInt (key,value) = DataEntry(key, value)
72+
73+
74+func incrementInt (key) = setInt(key, (getIntOr(key, -1) + 1))
75+
76+
77+func changeInt (key,by) = setInt(key, (getIntOr(key, 0) + by))
78+
79+
80+func increaseReserveAmount (winAmount,assetId) = {
81+ let newReservedAmount = (getIntOr(RESERVATIONKEY[assetId], 0) + winAmount)
82+ if ((newReservedAmount > assetBalance(this, ASSETS[assetId])))
83+ then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.")
84+ else newReservedAmount
85+ }
86+
87+
88+func decreaseReservedAmount (gameId,assetId,winAmount) = if ((0 > (getIntOr(RESERVATIONKEY[assetId], 0) - winAmount)))
89+ then throw("Invalid Dice Roller account state - reserved amount is less than 0")
90+ else changeInt(RESERVATIONKEY[assetId], -(winAmount))
91+
92+
93+func validateAndGetAssetId (assetId) = if ((assetId == ASSETS[0]))
94+ then 0
95+ else if ((assetId == ASSETS[1]))
96+ then 1
97+ else throw("Invalid payment asset")
98+
99+
100+func validateBetAndGetWinAmount (bet,assetId,playerChoice) = {
101+ let dicesCount = size(playerChoice)
102+ func checkAmount (a,x) = if (a)
103+ then true
104+ else (bet == (x * DECIMALS[assetId]))
105+
106+ if (!({
107+ let $list47494782 = BETS
108+ let $size47494782 = size($list47494782)
109+ let $acc047494782 = false
110+ if (($size47494782 == 0))
111+ then $acc047494782
112+ else {
113+ let $acc147494782 = checkAmount($acc047494782, $list47494782[0])
114+ if (($size47494782 == 1))
115+ then $acc147494782
116+ else {
117+ let $acc247494782 = checkAmount($acc147494782, $list47494782[1])
118+ if (($size47494782 == 2))
119+ then $acc247494782
120+ else {
121+ let $acc347494782 = checkAmount($acc247494782, $list47494782[2])
122+ if (($size47494782 == 3))
123+ then $acc347494782
124+ else {
125+ let $acc447494782 = checkAmount($acc347494782, $list47494782[3])
126+ if (($size47494782 == 4))
127+ then $acc447494782
128+ else {
129+ let $acc547494782 = checkAmount($acc447494782, $list47494782[4])
130+ if (($size47494782 == 5))
131+ then $acc547494782
132+ else {
133+ let $acc647494782 = checkAmount($acc547494782, $list47494782[5])
134+ throw("List size exceed 5")
135+ }
136+ }
137+ }
138+ }
139+ }
140+ }
141+ }))
142+ then throw("Bet amount is not valid")
143+ else if ((parseInt(playerChoice) == unit))
144+ then throw("Invalid player's choice")
145+ else if (if ((1 > dicesCount))
146+ then true
147+ else (dicesCount > 5))
148+ then throw("Invalid dices count in player's choice")
149+ else ((bet * RATES[(dicesCount - 1)]) / RATEMULT)
150+ }
151+
152+
153+func generateRandChoise (gameId,rsaSign) = {
154+ let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
155+ if (!(rsaSigValid))
156+ then throw("Invalid RSA signature")
157+ else {
158+ let rand = (toInt(sha256(rsaSign)) % 6)
159+ let result = if ((0 > rand))
160+ then (-1 * rand)
161+ else rand
162+ toString((result + 1))
163+ }
164+ }
165+
166+
167+func isPlayerWin (playerChoice,randChoise) = {
168+ let s = size(playerChoice)
169+ func check (a,x) = if (a)
170+ then true
171+ else if ((s >= x))
172+ then (take(drop(playerChoice, (x - 1)), 1) == randChoise)
173+ else false
174+
175+ let $list56265660 = [1, 2, 3, 4, 5]
176+ let $size56265660 = size($list56265660)
177+ let $acc056265660 = false
178+ if (($size56265660 == 0))
179+ then $acc056265660
180+ else {
181+ let $acc156265660 = check($acc056265660, $list56265660[0])
182+ if (($size56265660 == 1))
183+ then $acc156265660
184+ else {
185+ let $acc256265660 = check($acc156265660, $list56265660[1])
186+ if (($size56265660 == 2))
187+ then $acc256265660
188+ else {
189+ let $acc356265660 = check($acc256265660, $list56265660[2])
190+ if (($size56265660 == 3))
191+ then $acc356265660
192+ else {
193+ let $acc456265660 = check($acc356265660, $list56265660[3])
194+ if (($size56265660 == 4))
195+ then $acc456265660
196+ else {
197+ let $acc556265660 = check($acc456265660, $list56265660[4])
198+ if (($size56265660 == 5))
199+ then $acc556265660
200+ else {
201+ let $acc656265660 = check($acc556265660, $list56265660[5])
202+ throw("List size exceed 5")
203+ }
204+ }
205+ }
206+ }
207+ }
208+ }
209+ }
210+
211+
212+func formatGameData (gameState,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = (((((((((((gameState + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(startedHeight)) + "_") + toString(winAmount)) + "_") + toString(assetId)) + (if ((randOrEmpty == ""))
213+ then ""
214+ else ("_" + randOrEmpty)))
215+
216+
217+func extractGameData (gameId) = split(match getString(this, gameId) {
218+ case str: String =>
219+ str
220+ case _ =>
221+ throw((("Game: " + gameId) + " not found."))
222+}, "_")
223+
224+
225+func winScriptSet (gameId,playerAddress,winAmount,assetId,newgameData,winByTimeout,decreasedReserves) = {
226+ let wSetCommonData = [decreasedReserves]
227+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmount, ASSETS[assetId])]
228+ if (winByTimeout)
229+ then {
230+ let newgameDataAdjusted = (newgameData + "_TIMEOUT")
231+ let gameData = DataEntry(gameId, newgameDataAdjusted)
232+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
233+ }
234+ else {
235+ let gameData = DataEntry(gameId, newgameData)
236+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
237+ }
238+ }
239+
240+
241+@Callable(i)
242+func bet (playerChoice) = {
243+ let gameId = toBase58String(i.transactionId)
244+ if ((i.payment == unit))
245+ then throw("No payment")
246+ else if (isDefined(getString(this, gameId)))
247+ then throw((("Bet for: " + gameId) + " was already made."))
248+ else if (if ((i.feeAssetId != ASSETS[0]))
249+ then (i.feeAssetId != ASSETS[1])
250+ else false)
251+ then throw("Invalid fee asset")
252+ else {
253+ let p = extract(i.payment)
254+ let assetId = validateAndGetAssetId(p.assetId)
255+ let commission = i.fee
256+ let winAmount = validateBetAndGetWinAmount((p.amount - i.fee), assetId, playerChoice)
257+ let playerPubKey58 = toBase58String(i.callerPublicKey)
258+ let gameData = formatGameData(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmount, assetId, "")
259+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY[assetId], increaseReserveAmount(winAmount, assetId)), incrementInt(GAMESCOUNTERKEY), DataEntry(gameId, gameData)]), TransferSet([ScriptTransfer(SERVER, commission, p.assetId)]))
260+ }
261+ }
262+
263+
264+
265+@Callable(i)
266+func withdraw (gameId,rsaSign) = {
267+ let gameData = extractGameData(gameId)
268+ let gameState = gameData[IdxGameState]
269+ let playerChoice = gameData[IdxPlayerChoice]
270+ let startedHeight = parseIntValue(gameData[IdxStartedHeight])
271+ let winAmount = parseIntValue(gameData[IdxWinAmount])
272+ let assetId = parseIntValue(gameData[IdxAssetId])
273+ let playerPubKey58 = gameData[IdxPlayerPubKey58]
274+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
275+ let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
276+ let decreasedReserves = decreaseReservedAmount(gameId, assetId, winAmount)
277+ if ((gameState != STATESUBMITTED))
278+ then throw("Invalid game state for passed gameId")
279+ else if (winByTimeout)
280+ then {
281+ let randChoise = take(playerChoice, 1)
282+ let newgameData = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randChoise)
283+ winScriptSet(gameId, playerAddress, winAmount, assetId, newgameData, winByTimeout, decreasedReserves)
284+ }
285+ else {
286+ let randChoise = generateRandChoise(gameId, rsaSign)
287+ if ((i.caller != SERVER))
288+ then throw("Regular withdraw can be done by server only")
289+ else if (isPlayerWin(playerChoice, randChoise))
290+ then {
291+ let newgameData = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randChoise)
292+ winScriptSet(gameId, playerAddress, winAmount, assetId, newgameData, winByTimeout, decreasedReserves)
293+ }
294+ else {
295+ let newgameData = formatGameData(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randChoise)
296+ WriteSet([DataEntry(gameId, newgameData), decreasedReserves])
297+ }
298+ }
299+ }
300+
301+
302+@Verifier(tx)
303+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
304+ then match tx {
305+ case ttx: TransferTransaction =>
306+ let assetId = validateAndGetAssetId(ttx.assetId)
307+ ((assetBalance(this, ttx.assetId) - ttx.amount) >= getIntOr(RESERVATIONKEY[assetId], 0))
308+ case stx: SetScriptTransaction =>
309+ if ((getIntOr(RESERVATIONKEY[0], 0) == 0))
310+ then (getIntOr(RESERVATIONKEY[1], 0) == 0)
311+ else false
312+ case _ =>
313+ false
314+ }
315+ else false
316+

github/deemru/w8io/3ef1775 
126.89 ms