tx · GYW4ctUkrBUmdcoyoM6uiZaZBx36b6r48sjM95DTuRZF

3Mt6NEJ6ZK6TFZs14tvnR5iAgemnomy2m1V:  -0.02100000 Waves

2022.09.13 12:11 [2227130] smart account 3Mt6NEJ6ZK6TFZs14tvnR5iAgemnomy2m1V > SELF 0.00000000 Waves

{ "type": 13, "id": "GYW4ctUkrBUmdcoyoM6uiZaZBx36b6r48sjM95DTuRZF", "fee": 2100000, "feeAssetId": null, "timestamp": 1663060357784, "version": 2, "chainId": 84, "sender": "3Mt6NEJ6ZK6TFZs14tvnR5iAgemnomy2m1V", "senderPublicKey": "5f9EawB8nxaLg7KKhyqV2RDBMwRBG6o69D8zc9myAzrY", "proofs": [ "3889XnyXSyrP5hTvmR5Kc23FeaqqstLZd4yA3ETML59RXEhGw9yoEvX3TR3xZDkNEgb7qiCawn17s9g8KL7vHuny" ], "script": "base64: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AAAAAAMJAARMAAAAAgAAAAAAAAAABgkABEwAAAACAAAAAAAAAAAJCQAETAAAAAIAAAAAAAAAAAwJAARMAAAAAgAAAAAAAAAADwkABEwAAAACAAAAAAAAAAASCQAETAAAAAIAAAAAAAAAABUJAARMAAAAAgAAAAAAAAAAGAkABEwAAAACAAAAAAAAAAAbCQAETAAAAAIAAAAAAAAAAB4JAARMAAAAAgAAAAAAAAAAIQkABEwAAAACAAAAAAAAAAAkBQAAAANuaWwAAAAAE2dhbWVNYXN0ZXJQdWJsaWNLZXkJAAJZAAAAAQIAAAAsNWY5RWF3QjhueGFMZzdLS2h5cVYyUkRCTXdSQkc2bzY5RDh6YzlteUF6clkAAAAAEGdhbWVDb3VudGVyTGFiZWwCAAAADkdfR0FNRVNDT1VOVEVSAAAAABJnYW1lVG90YWxCZXRzTGFiZWwCAAAAC0dfVE9UQUxCRVRTAAAAABZnYW1lUHJvY2Vzc2VkQmV0c0xhYmVsAgAAAA9HX1BST0NFU1NFREJFVFMAAAAAD2dhbWVNaW5CZXRMYWJlbAIAAAAIR19NSU5CRVQAAAAAD2dhbWVNYXhCZXRMYWJlbAIAAAAIR19NQVhCRVQAAAAAEmdhbWVSU0FQdWJsaWNMYWJlbAIAAAALR19SU0FQVUJMSUMAAAAAGGdhbWVNYXN0ZXJQdWJsaWNLZXlMYWJlbAIAAAAXR19HQU1FTUFTVEVSX1BVQkxJQ19LRVkAAAAADmdhbWVUb2tlbkxhYmVsAgAAAAlHX1RPS0VOSUQBAAAAD2dhbWVzR2V0Q291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAQZ2FtZUNvdW50ZXJMYWJlbAEAAAAOZ2FtZXNUb3RhbEJldHMAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAEmdhbWVUb3RhbEJldHNMYWJlbAEAAAASZ2FtZXNQcm9jZXNzZWRCZXRzAAAAAAkABBoAAAACBQAAAAR0aGlzBQAAABZnYW1lUHJvY2Vzc2VkQmV0c0xhYmVsAQAAAAtnYW1lc01pbkJldAAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAD2dhbWVNaW5CZXRMYWJlbAEAAAALZ2FtZXNNYXhCZXQAAAAACQEAAAAR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aXRHYW1lX0ZPUkJCSURFTgQAAAAHJG1hdGNoMAkBAAAAD2dhbWVzR2V0Q291bnRlcgAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAMR0FNRVNDT1VOVEVSBQAAAAckbWF0Y2gwCQAAAgAAAAECAAAAEUlOSVRfQUxSRUFEWV9ET05FCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBnYW1lQ291bnRlckxhYmVsAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJnYW1lVG90YWxCZXRzTGFiZWwAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFmdhbWVQcm9jZXNzZWRCZXRzTGFiZWwAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2dhbWVNaW5CZXRMYWJlbAAAAAAABfXhAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPZ2FtZU1heEJldExhYmVsAAAAAACVAvkACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEmdhbWVSU0FQdWJsaWNMYWJlbAIAAAAbYmFzZTY0OjxnYW1lUlNBUHVibGljTGFiZWw+CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmdhbWVUb2tlbkxhYmVsAgAAAAAFAAAAA25pbAAAAAFpAQAAAAlzdGFydEdhbWUAAAACAAAACnJhbmRvbUhhc2gAAAAMYmxvY2tJblJvdW5kAwkBAAAAD2NoZWNrUGVybWlzc2lvbgAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABNzdGFydEdhbWVfRk9SQkJJREVOBAAAAAckbWF0Y2gwCQEAAAAPZ2FtZXNHZXRDb3VudGVyAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAxHQU1FU0NPVU5URVIFAAAAByRtYXRjaDAEAAAADm5ld0dhbWVDb3VudGVyCQAAZAAAAAIFAAAADEdBTUVTQ09VTlRFUgAAAAAAAAAAAQMJAABmAAAAAgUAAAAMR0FNRVNDT1VOVEVSAAAAAAAAAAAABAAAAAckbWF0Y2gxCQEAAAAMZ2FtZUdldFN0YXRlAAAAAQUAAAAMR0FNRVNDT1VOVEVSAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAAANJbnQEAAAACWdhbWVTdGF0ZQUAAAAHJG1hdGNoMQMJAAAAAAAAAgUAAAAJZ2FtZVN0YXRlAAAAAAAAAAAACQAAAgAAAAECAAAAH0xhc3QgZ2FtZSBoYXMgbm90IGZpbmlzaGVkIHlldC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGdhbWVDb3VudGVyTGFiZWwFAAAADm5ld0dhbWVDb3VudGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAUZ2FtZVN0YXJ0SGVpZ2h0TGFiZWwAAAABBQAAAA5uZXdHYW1lQ291bnRlcggFAAAACWxhc3RCbG9jawAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJnYW1lRW5kSGVpZ2h0TGFiZWwAAAABBQAAAA5uZXdHYW1lQ291bnRlcgkAAGQAAAACBQAAAAZoZWlnaHQFAAAADGJsb2NrSW5Sb3VuZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmdhbWVTdGF0ZUxhYmVsAAAAAQUAAAAObmV3R2FtZUNvdW50ZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dhbWVTdW1TaGFMYWJlbAAAAAEFAAAADm5ld0dhbWVDb3VudGVyCQACWAAAAAEJAAH3AAAAAQkAAlsAAAABBQAAAApyYW5kb21IYXNoBQAAAANuaWwJAAACAAAAAQIAAAAVR2FtZSBzdGF0ZSBub3QgZm91bmQuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBnYW1lQ291bnRlckxhYmVsBQAAAA5uZXdHYW1lQ291bnRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFGdhbWVTdGFydEhlaWdodExhYmVsAAAAAQUAAAAObmV3R2FtZUNvdW50ZXIIBQAAAAlsYXN0QmxvY2sAAAAGaGVpZ2h0CQAETAAAAAIJ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AAIAAAABAgAAAChHYW1lIGRvZXMgbm90IGV4aXN0IG9yIGhhcyBhbHJlYWR5IGVuZGVkAAAAAWkBAAAADHNldFBhcmFtZXRlcgAAAAIAAAANcGFyYW1ldGVyTmFtZQAAAA5wYXJhbWV0ZXJWYWx1ZQMJAQAAAA9jaGVja1Blcm1pc3Npb24AAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAWc2V0UGFyYW1ldGVyX0ZPUkJCSURFTgMJAAAAAAAAAgUAAAANcGFyYW1ldGVyTmFtZQIAAAAJY2hhbmdlTWF4BAAAAAxtYXhpbXVtVmFsdWUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAOcGFyYW1ldGVyVmFsdWUEAAAADG1pbmltdW1WYWx1ZQkBAAAAC2dhbWVzTWluQmV0AAAAAAMJAABmAAAAAgAAAAAAAAAAAAUAAAAMbWF4aW11bVZhbHVlCQAAAgAAAAECAAAAHHZhbHVlIGNhbm5vdCBiZSBsb3dlciB0aGFuIDADCQAAZwAAAAIFAAAADG1pbmltdW1WYWx1ZQUAAAAMbWF4aW11bVZhbHVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAC12YWx1ZSBjYW5ub3QgYmUgbG93ZXIgb3IgZXF1YWwgdGhhbiBtaW4gYmV0ICgJAAGkAAAAAQUAAAAMbWluaW11bVZhbHVlAgAAAAEpCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9nYW1lTWF4QmV0TGFiZWwFAAAADG1heGltdW1WYWx1ZQUAAAADbmlsAwkAAAAAAAACBQAAAA1wYXJhbWV0ZXJOYW1lAgAAAAljaGFuZ2VNaW4EAAAADG1heGltdW1WYWx1ZQkBAAAAC2dhbWVzTWF4QmV0AAAAAAQAAAAMbWluaW11bVZhbHVlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADnBhcmFtZXRlclZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAxtaW5pbXVtVmFsdWUJAAACAAAAAQIAAAAcdmFsdWUgY2Fubm90IGJlIGxvd2VyIHRoYW4gMAMJAABnAAAAAgUAAAAMbWluaW11bVZhbHVlBQAAAAxtYXhpbXVtVmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAL3ZhbHVlIGNhbm5vdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gbWluIGJldCAoCQABpAAAAAEFAAAADG1heGltdW1WYWx1ZQIAAAABKQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPZ2FtZU1pbkJldExhYmVsBQAAAAxtaW5pbXVtVmFsdWUFAAAAA25pbAMJAAAAAAAAAgUAAAANcGFyYW1ldGVyTmFtZQIAAAAJY2hhbmdlUlNBBAAAAAckbWF0Y2gwCQEAAAAPZ2FtZXNHZXRDb3VudGVyAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAxHQU1FU0NPVU5URVIFAAAAByRtYXRjaDAEAAAAByRtYXRjaDEJAQAAAAxnYW1lR2V0U3RhdGUAAAABBQAAAAxHQU1FU0NPVU5URVIDCQAAAQAAAAIFAAAAByRtYXRjaDECAAAAA0ludAQAAAAFc3RhdGUFAAAAByRtYXRjaDEDCQEAAAACIT0AAAACBQAAAAVzdGF0ZQAAAAAAAAAAAQkAAAIAAAABAgAAABhHYW1lIGhhcyB0byBiZSBmaW5pc2hlZC4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAASZ2FtZVJTQVB1YmxpY0xhYmVsBQAAAA5wYXJhbWV0ZXJWYWx1ZQUAAAADbmlsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEmdhbWVSU0FQdWJsaWNMYWJlbAUAAAAOcGFyYW1ldGVyVmFsdWUFAAAAA25pbAkAAAIAAAABAgAAAB1HYW1lIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLgkAAAIAAAABAgAAAElTZXR0aW5nIG5vdCBmb3VuZC4gQWxsb3dlZDogY2hhbmdlTWF4LCBjaGFuZ2VNaW4sIGNoYW5nZVJTQSwgY2hhbmdlUHViS2V5AAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXn2B5LJ", "height": 2227130, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FCk9jqnhrbfpy4RAE5C7kahBzZGftQw7rKWw6f78ZH27 Next: none Diff:
OldNewDifferences
1313
1414 let col3 = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36]
1515
16-let gameMasterPublicKey = fromBase58String("<game-master-public-key>")
16+let gameMasterPublicKey = fromBase58String("5f9EawB8nxaLg7KKhyqV2RDBMwRBG6o69D8zc9myAzrY")
1717
1818 let gameCounterLabel = "G_GAMESCOUNTER"
1919
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wheel = [5, 24, 16, 33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28, 12, 35, 3, 26, 0, 32, 15, 19, 4, 21, 2, 25, 17, 34, 6, 27, 13, 36, 11, 30, 8, 23, 10]
55
66 let black = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35]
77
88 let red = [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36]
99
1010 let col1 = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34]
1111
1212 let col2 = [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35]
1313
1414 let col3 = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36]
1515
16-let gameMasterPublicKey = fromBase58String("<game-master-public-key>")
16+let gameMasterPublicKey = fromBase58String("5f9EawB8nxaLg7KKhyqV2RDBMwRBG6o69D8zc9myAzrY")
1717
1818 let gameCounterLabel = "G_GAMESCOUNTER"
1919
2020 let gameTotalBetsLabel = "G_TOTALBETS"
2121
2222 let gameProcessedBetsLabel = "G_PROCESSEDBETS"
2323
2424 let gameMinBetLabel = "G_MINBET"
2525
2626 let gameMaxBetLabel = "G_MAXBET"
2727
2828 let gameRSAPublicLabel = "G_RSAPUBLIC"
2929
3030 let gameMasterPublicKeyLabel = "G_GAMEMASTER_PUBLIC_KEY"
3131
3232 let gameTokenLabel = "G_TOKENID"
3333
3434 func gamesGetCounter () = getInteger(this, gameCounterLabel)
3535
3636
3737 func gamesTotalBets () = getInteger(this, gameTotalBetsLabel)
3838
3939
4040 func gamesProcessedBets () = getInteger(this, gameProcessedBetsLabel)
4141
4242
4343 func gamesMinBet () = getIntegerValue(this, gameMinBetLabel)
4444
4545
4646 func gamesMaxBet () = getIntegerValue(this, gameMaxBetLabel)
4747
4848
4949 func gameRSAPublicString () = getStringValue(this, gameRSAPublicLabel)
5050
5151
5252 func gameRSAPublic () = fromBase64String(gameRSAPublicString())
5353
5454
5555 func gameToken () = match getString(this, gameTokenLabel) {
5656 case tokenId: String =>
5757 if ((tokenId == ""))
5858 then unit
5959 else fromBase58String(tokenId)
6060 case _ =>
6161 unit
6262 }
6363
6464
6565 func betDetailsLabel (betNumber) = (("B_" + toString(betNumber)) + "_BETDETAILS")
6666
6767
6868 func betWinStateLabel (betNumber) = (("B_" + toString(betNumber)) + "_WINSTATE")
6969
7070
7171 func betWinAmountLabel (betNumber) = (("B_" + toString(betNumber)) + "_WINAMOUNT")
7272
7373
7474 func betGameLabel (betNumber) = (("B_" + toString(betNumber)) + "_GAME")
7575
7676
7777 func betPayoutLabel (betNumber) = (("B_" + toString(betNumber)) + "_PAYOUT")
7878
7979
8080 func betDetailsResult (betNumber) = getStringValue(this, betDetailsLabel(betNumber))
8181
8282
8383 func betGameResult (betNumber) = getIntegerValue(this, betGameLabel(betNumber))
8484
8585
8686 func gameStateLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_STATE")
8787
8888
8989 func gameStartHeightLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_STARTHEIGHT")
9090
9191
9292 func gameEndHeightLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_ENDHEIGHT")
9393
9494
9595 func gameSumShaLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_SUMSHA")
9696
9797
9898 func gameResultLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_RESULT")
9999
100100
101101 func gameRandomHashLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_RANDOMHASH")
102102
103103
104104 func gameGetState (gameNumber) = getInteger(this, gameStateLabel(gameNumber))
105105
106106
107107 func gameGetEndHeight (gameNumber) = getInteger(this, gameEndHeightLabel(gameNumber))
108108
109109
110110 func gameGetSumSha (gameNumber) = getString(this, gameSumShaLabel(gameNumber))
111111
112112
113113 func gameGetResult (gameNumber) = getIntegerValue(this, gameResultLabel(gameNumber))
114114
115115
116116 func checkPermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
117117
118118
119119 func gameInBaseToken (token) = (token == unit)
120120
121121
122122 func getMultiple (numberPlaced) = if ((numberPlaced == 1))
123123 then 36
124124 else if ((numberPlaced == 2))
125125 then 18
126126 else if ((numberPlaced == 3))
127127 then 12
128128 else if ((numberPlaced == 4))
129129 then 9
130130 else if ((numberPlaced == 5))
131131 then 7
132132 else if ((numberPlaced == 6))
133133 then 6
134134 else 0
135135
136136
137137 func getWinnings (bet,result) = {
138138 let betStringList = split(bet, "-")
139139 let amountBet = value(parseInt(betStringList[1]))
140140 let betType = betStringList[2]
141141 if ((betType == "numbers"))
142142 then {
143143 let allNumberBets = removeByIndex(removeByIndex(removeByIndex(betStringList, 0), 0), 0)
144144 if (containsElement(allNumberBets, toString(result)))
145145 then (amountBet * getMultiple(size(allNumberBets)))
146146 else 0
147147 }
148148 else if ((betType == "color"))
149149 then if ((betStringList[3] == "red"))
150150 then if (containsElement(red, result))
151151 then (amountBet * 2)
152152 else 0
153153 else if (containsElement(black, result))
154154 then (amountBet * 2)
155155 else 0
156156 else if ((betType == "column"))
157157 then if ((betStringList[3] == "1"))
158158 then if (containsElement(col1, result))
159159 then (amountBet * 3)
160160 else 0
161161 else if ((betStringList[3] == "2"))
162162 then if (containsElement(col2, result))
163163 then (amountBet * 3)
164164 else 0
165165 else if ((betStringList[3] == "3"))
166166 then if (containsElement(col3, result))
167167 then (amountBet * 3)
168168 else 0
169169 else 0
170170 else if ((betType == "dozen"))
171171 then if ((betStringList[3] == "1"))
172172 then if (if ((result >= 1))
173173 then (12 >= result)
174174 else false)
175175 then (amountBet * 3)
176176 else 0
177177 else if ((betStringList[3] == "2"))
178178 then if (if ((result >= 13))
179179 then (24 >= result)
180180 else false)
181181 then (amountBet * 3)
182182 else 0
183183 else if ((betStringList[3] == "3"))
184184 then if (if ((result >= 25))
185185 then (36 >= result)
186186 else false)
187187 then (amountBet * 3)
188188 else 0
189189 else 0
190190 else if ((betType == "oddeven"))
191191 then if ((result == 0))
192192 then 0
193193 else if ((betStringList[3] == "even"))
194194 then if (if (((result % 2) == 0))
195195 then (result != 0)
196196 else false)
197197 then (amountBet * 2)
198198 else 0
199199 else if (((result % 2) == 1))
200200 then (amountBet * 2)
201201 else 0
202202 else if ((betType == "lowhigh"))
203203 then if ((result == 0))
204204 then 0
205205 else if ((betStringList[3] == "low"))
206206 then if (if ((result >= 1))
207207 then (18 >= result)
208208 else false)
209209 then (amountBet * 2)
210210 else 0
211211 else if (if ((result >= 19))
212212 then (36 >= result)
213213 else false)
214214 then (amountBet * 2)
215215 else 0
216216 else 0
217217 }
218218
219219
220220 @Callable(i)
221221 func processNextBet () = if (checkPermission(i.callerPublicKey))
222222 then throw("processNextBet_FORBBIDEN")
223223 else match gamesTotalBets() {
224224 case totalBets: Int =>
225225 match gamesProcessedBets() {
226226 case lastProcessedBet: Int =>
227227 let nextBet = (lastProcessedBet + 1)
228228 if ((nextBet > totalBets))
229229 then throw("Next bet has not been placed.")
230230 else {
231231 let gameNumber = betGameResult(nextBet)
232232 match gameGetState(gameNumber) {
233233 case state: Int =>
234234 if ((state == 1))
235235 then {
236236 let result = gameGetResult(gameNumber)
237237 let betDetails = betDetailsResult(nextBet)
238238 let betPlacer = split(betDetails, "-")[0]
239239 let address = value(addressFromString(betPlacer))
240240 let winnings = getWinnings(betDetails, result)
241241 [ScriptTransfer(address, winnings, gameToken()), IntegerEntry(gameProcessedBetsLabel, (lastProcessedBet + 1)), IntegerEntry(betPayoutLabel(nextBet), winnings)]
242242 }
243243 else throw("Game has not finished.")
244244 case _ =>
245245 throw("Game does not exist or has already ended.")
246246 }
247247 }
248248 case _ =>
249249 throw("Game has not been initialized, next bets not found")
250250 }
251251 case _ =>
252252 throw("Game has not been initialized, total bets not found")
253253 }
254254
255255
256256
257257 @Callable(i)
258258 func initGame () = if (checkPermission(i.callerPublicKey))
259259 then throw("initGame_FORBBIDEN")
260260 else match gamesGetCounter() {
261261 case GAMESCOUNTER: Int =>
262262 throw("INIT_ALREADY_DONE")
263263 case _ =>
264264 [IntegerEntry(gameCounterLabel, 0), IntegerEntry(gameTotalBetsLabel, 0), IntegerEntry(gameProcessedBetsLabel, 0), IntegerEntry(gameMinBetLabel, 100000000), IntegerEntry(gameMaxBetLabel, 2500000000), StringEntry(gameRSAPublicLabel, "base64:<gameRSAPublicLabel>"), StringEntry(gameTokenLabel, "")]
265265 }
266266
267267
268268
269269 @Callable(i)
270270 func startGame (randomHash,blockInRound) = if (checkPermission(i.callerPublicKey))
271271 then throw("startGame_FORBBIDEN")
272272 else match gamesGetCounter() {
273273 case GAMESCOUNTER: Int =>
274274 let newGameCounter = (GAMESCOUNTER + 1)
275275 if ((GAMESCOUNTER > 0))
276276 then match gameGetState(GAMESCOUNTER) {
277277 case gameState: Int =>
278278 if ((gameState == 0))
279279 then throw("Last game has not finished yet.")
280280 else [IntegerEntry(gameCounterLabel, newGameCounter), IntegerEntry(gameStartHeightLabel(newGameCounter), lastBlock.height), IntegerEntry(gameEndHeightLabel(newGameCounter), (height + blockInRound)), IntegerEntry(gameStateLabel(newGameCounter), 0), StringEntry(gameSumShaLabel(newGameCounter), toBase58String(sha256(fromBase64String(randomHash))))]
281281 case _ =>
282282 throw("Game state not found.")
283283 }
284284 else [IntegerEntry(gameCounterLabel, newGameCounter), IntegerEntry(gameStartHeightLabel(newGameCounter), lastBlock.height), IntegerEntry(gameEndHeightLabel(newGameCounter), (height + blockInRound)), IntegerEntry(gameStateLabel(newGameCounter), 0), StringEntry(gameSumShaLabel(newGameCounter), toBase58String(sha256(fromBase64String(randomHash))))]
285285 case _ =>
286286 throw("INIT_NEEDED")
287287 }
288288
289289
290290
291291 @Callable(i)
292292 func placeBet (bet) = {
293293 let assetId = gameToken()
294294 if ((i.feeAssetId != assetId))
295295 then throw("Fee is not in correct assetId")
296296 else {
297297 let betStringList = split(bet, "-")
298298 let betType = betStringList[0]
299299 if (if (if (if (if (if ((betType != "numbers"))
300300 then (betType != "column")
301301 else false)
302302 then (betType != "color")
303303 else false)
304304 then (betType != "dozen")
305305 else false)
306306 then (betType != "oddeven")
307307 else false)
308308 then (betType != "lowhigh")
309309 else false)
310310 then throw("Bet type is not valid.")
311311 else match gamesGetCounter() {
312312 case GAMESCOUNTER: Int =>
313313 match gameGetState(GAMESCOUNTER) {
314314 case state: Int =>
315315 if ((state == 1))
316316 then throw("Game is finished and next game has not started.")
317317 else if ((size(i.payments) != 1))
318318 then throw("Payment not attached or there is more then one payment")
319319 else {
320320 let p = i.payments[0]
321321 let amount = p.amount
322322 if (if (if ((value(gamesMaxBet()) >= amount))
323323 then (amount >= value(gamesMinBet()))
324324 else false)
325325 then (i.payments[0].assetId == assetId)
326326 else false)
327327 then match gameGetEndHeight(GAMESCOUNTER) {
328328 case endHeight: Int =>
329329 if ((endHeight > height))
330330 then match gamesTotalBets() {
331331 case totalBets: Int =>
332332 let thisBetNumber = (totalBets + 1)
333333 if ((assetId == unit))
334334 then [IntegerEntry(gameTotalBetsLabel, (totalBets + 1)), StringEntry(betDetailsLabel(thisBetNumber), ((((toBase58String(i.caller.bytes) + "-") + toString(amount)) + "-") + bet)), IntegerEntry(betGameLabel(thisBetNumber), GAMESCOUNTER)]
335335 else [IntegerEntry(gameTotalBetsLabel, (totalBets + 1)), StringEntry(betDetailsLabel(thisBetNumber), ((((toBase58String(i.caller.bytes) + "-") + toString(amount)) + "-") + bet)), IntegerEntry(betGameLabel(thisBetNumber), GAMESCOUNTER)]
336336 case _ =>
337337 throw("Game has not been initalized.")
338338 }
339339 else throw("Game has already exceeded betting round")
340340 case _ =>
341341 throw("End height has not been defined.")
342342 }
343343 else throw((((((("Bet (" + toString(amount)) + ") is greater than maximum bet (") + toString(gamesMaxBet())) + "), lower than minimum (") + toString(gamesMinBet())) + ") or payment is not in correct assetId."))
344344 }
345345 case _ =>
346346 throw("Game does not exist or has already ended.")
347347 }
348348 case _ =>
349349 throw("Game needs to be initialized.")
350350 }
351351 }
352352 }
353353
354354
355355
356356 @Callable(i)
357357 func endGame (rsaSign,gameNumber) = if (checkPermission(i.callerPublicKey))
358358 then throw("endGame_FORBBIDEN")
359359 else match gameGetState(gameNumber) {
360360 case state: Int =>
361361 if ((state == 1))
362362 then throw("Game is finished")
363363 else match gameGetEndHeight(gameNumber) {
364364 case gameHeight: Int =>
365365 if ((gameHeight > height))
366366 then throw(("Not enough blocks have past since game has started, game ends at block " + toString(gameHeight)))
367367 else match gameGetSumSha(gameNumber) {
368368 case SUMSHA: String =>
369369 let sig = fromBase64String(rsaSign)
370370 let rsaSigValid = rsaVerify(SHA256, fromBase58String(SUMSHA), sig, gameRSAPublic())
371371 match blockInfoByHeight(gameHeight) {
372372 case previousBlock: BlockInfo =>
373373 let randomHash = sha256((take(sig, 32) + take(previousBlock.generationSignature, 32)))
374374 if (!(rsaSigValid))
375375 then throw("INVALID_RSA_SIGN")
376376 else {
377377 let index = wheel[((toInt(randomHash) + value(gameNumber)) % 37)]
378378 [IntegerEntry(gameStateLabel(gameNumber), 1), IntegerEntry(gameResultLabel(gameNumber), index), StringEntry(gameRandomHashLabel(gameNumber), toBase64String(randomHash))]
379379 }
380380 case _ =>
381381 throw("Last block does not exist.")
382382 }
383383 case _ =>
384384 throw("SHA does not exist")
385385 }
386386 case _ =>
387387 throw("Cannot get game height.")
388388 }
389389 case _ =>
390390 throw("Game does not exist or has already ended")
391391 }
392392
393393
394394
395395 @Callable(i)
396396 func setParameter (parameterName,parameterValue) = if (checkPermission(i.callerPublicKey))
397397 then throw("setParameter_FORBBIDEN")
398398 else if ((parameterName == "changeMax"))
399399 then {
400400 let maximumValue = parseIntValue(parameterValue)
401401 let minimumValue = gamesMinBet()
402402 if ((0 > maximumValue))
403403 then throw("value cannot be lower than 0")
404404 else if ((minimumValue >= maximumValue))
405405 then throw((("value cannot be lower or equal than min bet (" + toString(minimumValue)) + ")"))
406406 else [IntegerEntry(gameMaxBetLabel, maximumValue)]
407407 }
408408 else if ((parameterName == "changeMin"))
409409 then {
410410 let maximumValue = gamesMaxBet()
411411 let minimumValue = parseIntValue(parameterValue)
412412 if ((0 > minimumValue))
413413 then throw("value cannot be lower than 0")
414414 else if ((minimumValue >= maximumValue))
415415 then throw((("value cannot be greater or equal than min bet (" + toString(maximumValue)) + ")"))
416416 else [IntegerEntry(gameMinBetLabel, minimumValue)]
417417 }
418418 else if ((parameterName == "changeRSA"))
419419 then match gamesGetCounter() {
420420 case GAMESCOUNTER: Int =>
421421 match gameGetState(GAMESCOUNTER) {
422422 case state: Int =>
423423 if ((state != 1))
424424 then throw("Game has to be finished.")
425425 else [StringEntry(gameRSAPublicLabel, parameterValue)]
426426 case _ =>
427427 [StringEntry(gameRSAPublicLabel, parameterValue)]
428428 }
429429 case _ =>
430430 throw("Game needs to be initialized.")
431431 }
432432 else throw("Setting not found. Allowed: changeMax, changeMin, changeRSA, changePubKey")
433433
434434
435435 @Verifier(tx)
436436 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
437437

github/deemru/w8io/169f3d6 
53.12 ms