tx · 35LKkfj8uUhaSVte8oyUjMoZwtUrxg9onSDv8mAQPzkX

3NCs4motPXw3h6vyT7o6PAKmbo3e2jk8kHa:  -0.05000000 Waves

2019.10.27 22:32 [738955] smart account 3NCs4motPXw3h6vyT7o6PAKmbo3e2jk8kHa > SELF 0.00000000 Waves

{ "type": 13, "id": "35LKkfj8uUhaSVte8oyUjMoZwtUrxg9onSDv8mAQPzkX", "fee": 5000000, "feeAssetId": null, "timestamp": 1572204714128, "version": 1, "sender": "3NCs4motPXw3h6vyT7o6PAKmbo3e2jk8kHa", "senderPublicKey": "DdkgRd7YzZtSU3hXJc7sHsU7sM8nUSEwkzqZCaCTXKRe", "proofs": [ "5obxgtqbiB6ihLAo4iQbsUj2azQcZ28Kk5eavpuhLNQ9k7u1tqSUdLGrVZhzFYxDneqsxijyNhQmocXYhwgTghQS" ], "script": "base64:AAIDAAAAAAAAAA4IARIECgIIARIECgIIAgAAACYAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFtT2xSQlRZRU8zSDdZOXJCbW9GUUZuNDM5MlB4MFF3MTNEc2RFaG56TUgyY2o2WTV5bVB1Q09MTU5lNXFyVXpRbDhvUkx6SUJ6RlZNWmx3VVlsMmJvc3JPSXhRYllGN1dWUVd2b1Z4RVQxWUlnRG0zTnp6T0xBNXVIN0NLTzBzbnNobU1GQ0RPWkVldzQxR2pLaDNQZ3grbmJBZ3VQOVpRUGZxU2FmRW1DM0NOLzR5RHNKcktyaVJuaVpKbzlqUy80TExzUkt3QjdIQVpIem9GOUxMN3RTWkgzaHRhTkd0YmRUa3haMVR6U1QzTWIyVlBTenNadlFEb2NYVVZPbUpPdTBvMjlhT1krR2tHL0c0UkNLMEZCV1FIRVV2QzUxVFJEUzVrOGphZDBPMU1vYmpRYzZiMThkK2Z1b1ZGZE5mWndHSCt1RnVkdFBHM1VKVGYybWt6WlFJREFRQUIAAAAAD0dBTUVTQ09VTlRFUktFWQIAAAAJJEdBTUVfTlVNAAAAAA5SRVNFUlZBVElPTktFWQIAAAAQJFJFU0VSVkVEX0FNT1VOVAAAAAAEV0JFVAEAAAAgD5uLrFpvaCc5H1Jt+IyA7GJAqs11k4f4jn5gjTii4MkAAAAAB1dBVkVMRVQJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAtGRUVXQVZFU0JFVAAAAAAAAAAABAAAAAAJRkVFTUNBRkVFAAAAAAAAAAACAAAAAA5TVEFURVNVQk1JVFRFRAIAAAAJU1VCTUlUVEVEAAAAAAhTVEFURVdPTgIAAAADV09OAAAAAAlTVEFURUxPU1QCAAAABExPU1QAAAAACVJPTExVTkRFUgIAAAAFVU5ERVIAAAAACFJPTExPVkVSAgAAAARPVkVSAAAAAAZCRVRNSU4JAABoAAAAAgAAAAAAAAAAZAUAAAAHV0FWRUxFVAAAAAAGQkVUTUFYCQAAaAAAAAIAAAAAAAExLQAFAAAAB1dBVkVMRVQAAAAADVBSRURJQ1RJT05NSU4A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YXNzZWQgZ2FtZUlkIGhhZCBiZWVuIHVzZWQgYmVmb3JlLiBHYW1lIGFib3J0ZWQuBAAAAApuZXdHYW1lTnVtCQEAAAAQSW5jcmVtZW50R2FtZU51bQAAAAAEAAAADnBsYXllclB1YktleTU4CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAALZ2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAADlNUQVRFU1VCTUlUVEVEBQAAAApwcmVkaWN0aW9uBQAAAAhyb2xsVHlwZQUAAAAOcGxheWVyUHViS2V5NTgFAAAABndpbkFtdAIAAAAACQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPR0FNRVNDT1VOVEVSS0VZBQAAAApuZXdHYW1lTnVtCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAAC2dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAIAAAAGZ2FtZUlkAAAABnJzYVNpZwQAAAAMZ2FtZURhdGFMaXN0CQEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAMSWR4R2FtZVN0YXRlBAAAAApwcmVkaWN0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAA1JZHhQcmVkaWN0aW9uBAAAAAhyb2xsVHlwZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAB0lkeFR5cGUEAAAABndpbkFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAJSWR4V2luQW10BAAAAA5wbGF5ZXJQdWJLZXk1OAkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAABFkZWNyZWFzZWRSZXNlcnZlcwkBAAAAE0RlY3JlYXNlUmVzZXJ2ZWRBbXQAAAACBQAAAAZnYW1lSWQFAAAABndpbkFtdAMJAQAAAAIhPQAAAAIFAAAACWdhbWVTdGF0ZQUAAAAOU1RBVEVTVUJNSVRURUQJAAACAAAAAQIAAAAzSW52YWxpZCBnYW1lIHN0YXRlIGZvciBwYXNzZWQgZ2FtZUlkLiBHYW1lIGFib3J0ZWQuBAAAAARyYW5kCQEAAAAPR2VuZXJhdGVSYW5kSW50AAAAAgUAAAAGZ2FtZUlkBQAAAAZyc2FTaWcEAAAAB3JhbmRTdHIJAQAAAAlSYW5kVG9TdHIAAAABBQAAAARyYW5kAwkBAAAAB2RpY2VXaW4AAAADBQAAAAhyb2xsVHlwZQUAAAAKcHJlZGljdGlvbgUAAAAEcmFuZAQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAApwcmVkaWN0aW9uBQAAAAhyb2xsVHlwZQUAAAAOcGxheWVyUHViS2V5NTgFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAADFdpblNjcmlwdFNldAAAAAUFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAA5uZXdHYW1lRGF0YVN0cgUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAlTVEFURUxPU1QFAAAACnByZWRpY3Rpb24FAAAACHJvbGxUeXBlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAJAABnAAAAAgkAAGUAAAACCQAD6wAAAAIFAAAABHRoaXMFAAAABFdCRVQIBQAAAAN0dHgAAAAGYW1vdW50CQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAA3N0eAUAAAAHJG1hdGNoMAYHBxtSD+k=", "chainId": 84, "height": 738955, "spentComplexity": 0 } View: original | compacted Prev: A8XAodu18dsXK2KtKevoyd28m9ipix69ywjsQPeKWwYg Next: 9EynpHvW1iYqjFRxDSoBc3ckmGxW21zscmRPL94wHV3H Diff:
OldNewDifferences
161161 else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
162162
163163
164-func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr) = {
164+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,decreasedReserves) = {
165+ let wSetCommonData = [decreasedReserves]
165166 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, WBET)]
166- let writeDicePlay = WriteSet([DataEntry("Game Id", gameId), DataEntry("Player Address", toString(playerAddress))])
167- ScriptResult(writeDicePlay, TransferSet(tSetCommonData))
167+ let gameData = DataEntry(gameId, newGameDataStr)
168+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
168169 }
169170
170171
609610 let newGameNum = IncrementGameNum()
610611 let playerPubKey58 = toBase58String(i.callerPublicKey)
611612 let gameDataStr = FormatGameDataStr(STATESUBMITTED, prediction, rollType, playerPubKey58, winAmt, "")
612- ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet(nil))
613+ ScriptResult(WriteSet([DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet(nil))
613614 }
614615 }
615616
626627 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
627628 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
628629 if ((gameState != STATESUBMITTED))
629- then throw("Invalid game state for passed gameId")
630+ then throw("Invalid game state for passed gameId. Game aborted.")
630631 else {
631632 let rand = GenerateRandInt(gameId, rsaSig)
632633 let randStr = RandToStr(rand)
633634 if (diceWin(rollType, prediction, rand))
634635 then {
635636 let newGameDataStr = FormatGameDataStr(STATEWON, prediction, rollType, playerPubKey58, winAmt, randStr)
636- WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr)
637+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, decreasedReserves)
637638 }
638639 else {
639640 let newGameDataStr = FormatGameDataStr(STATELOST, prediction, rollType, playerPubKey58, winAmt, randStr)
640- WriteSet([DataEntry(gameId, newGameDataStr)])
641+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
641642 }
642643 }
643644 }
644645
645646
647+@Verifier(tx)
648+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
649+ then match tx {
650+ case ttx: TransferTransaction =>
651+ ((assetBalance(this, WBET) - ttx.amount) >= ExtractReservedAmt())
652+ case stx: SetScriptTransaction =>
653+ true
654+ case _ =>
655+ false
656+ }
657+ else false
658+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmOlRBTYEO3H7Y9rBmoFQFn4392Px0Qw13DsdEhnzMH2cj6Y5ymPuCOLMNe5qrUzQl8oRLzIBzFVMZlwUYl2bosrOIxQbYF7WVQWvoVxET1YIgDm3NzzOLA5uH7CKO0snshmMFCDOZEew41GjKh3Pgx+nbAguP9ZQPfqSafEmC3CN/4yDsJrKriRniZJo9jS/4LLsRKwB7HAZHzoF9LL7tSZH3htaNGtbdTkxZ1TzST3Mb2VPSzsZvQDocXUVOmJOu0o29aOY+GkG/G4RCK0FBWQHEUvC51TRDS5k8jad0O1MobjQc6b18d+fuoVFdNfZwGH+uFudtPG3UJTf2mkzZQIDAQAB")
55
66 let GAMESCOUNTERKEY = "$GAME_NUM"
77
88 let RESERVATIONKEY = "$RESERVED_AMOUNT"
99
1010 let WBET = base58'23vgV9p9pD83A7CFbsDEc4zjanep7UeFo4ZRS6oGorhv'
1111
1212 let WAVELET = ((100 * 1000) * 1000)
1313
1414 let FEEWAVESBET = 4
1515
1616 let FEEMCAFEE = 2
1717
1818 let STATESUBMITTED = "SUBMITTED"
1919
2020 let STATEWON = "WON"
2121
2222 let STATELOST = "LOST"
2323
2424 let ROLLUNDER = "UNDER"
2525
2626 let ROLLOVER = "OVER"
2727
2828 let BETMIN = (100 * WAVELET)
2929
3030 let BETMAX = (20000000 * WAVELET)
3131
3232 let PREDICTIONMIN = 1
3333
3434 let PREDICTIONMAX = 99
3535
3636 let IdxGameState = 0
3737
3838 let IdxPrediction = 1
3939
4040 let IdxType = 2
4141
4242 let IdxPlayerPubKey58 = 3
4343
4444 let IdxWinAmt = 4
4545
4646 let IdxRandOrEmpty = 5
4747
4848 func IncrementGameNum () = {
4949 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
5050 case num: Int =>
5151 num
5252 case _ =>
5353 0
5454 }
5555 (gameNum + 1)
5656 }
5757
5858
5959 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
6060 case a: Int =>
6161 a
6262 case _ =>
6363 0
6464 }
6565
6666
6767 func ValidateAndIncreaseReservedAmt (winAmt) = {
6868 let newReservedAmount = (ExtractReservedAmt() + winAmt)
6969 let balance = assetBalance(this, WBET)
7070 if ((newReservedAmount > balance))
7171 then throw("Insufficient funds on Wavesbet Dice account. Transaction was rejected for your safety.")
7272 else newReservedAmount
7373 }
7474
7575
7676 func FormatGameDataParam (p) = {
7777 let s = size(p)
7878 if ((s == 0))
7979 then throw("Parameter size must be greater then 0")
8080 else if ((s > 99))
8181 then throw("Parameter size must be less then 100")
8282 else if ((10 > s))
8383 then (("0" + toString(s)) + p)
8484 else (toString(s) + p)
8585 }
8686
8787
8888 func FormatGameDataStr (gameState,prediction,typeRoll,playerPubKey58,winAmt,randOrEmpty) = {
8989 let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(toString(prediction))) + "_") + FormatGameDataParam(typeRoll)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
9090 if ((randOrEmpty == ""))
9191 then fullStateStr
9292 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
9393 }
9494
9595
9696 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
9797 then drop(remaining, 1)
9898 else remaining
9999
100100
101101 func ParseNextAttribute (remaining) = {
102102 let s = size(remaining)
103103 if ((s > 0))
104104 then {
105105 let nn = parseIntValue(take(remaining, 2))
106106 let v = take(drop(remaining, 2), nn)
107107 let tmpRemaining = drop(remaining, (nn + 2))
108108 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
109109 [v, remainingState]
110110 }
111111 else throw("Empty string was passed into parseNextAttribute func")
112112 }
113113
114114
115115 func ParseGameRawDataStr (rawStateStr) = {
116116 let gameState = ParseNextAttribute(rawStateStr)
117117 let prediction = ParseNextAttribute(gameState[1])
118118 let rollType = ParseNextAttribute(prediction[1])
119119 let playerPubKey58 = ParseNextAttribute(rollType[1])
120120 let winAmt = ParseNextAttribute(playerPubKey58[1])
121121 [gameState[0], prediction[0], rollType[0], playerPubKey58[0], winAmt[0]]
122122 }
123123
124124
125125 func ExtractGameDataList (gameId) = {
126126 let rawDataStr = match getString(this, gameId) {
127127 case str: String =>
128128 str
129129 case _ =>
130130 throw(("Couldn't find game by " + gameId))
131131 }
132132 ParseGameRawDataStr(rawDataStr)
133133 }
134134
135135
136136 func DecreaseReservedAmt (gameId,winAmt) = {
137137 let newReservedAmount = (ExtractReservedAmt() - winAmt)
138138 if ((0 > newReservedAmount))
139139 then throw("Invalid Dice Roller account state - reserved amount is less than 0")
140140 else DataEntry(RESERVATIONKEY, newReservedAmount)
141141 }
142142
143143
144144 func GenerateRandInt (gameId,rsaSign) = {
145145 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
146146 if (rsaSigValid)
147147 then {
148148 let rand = (toInt(sha256(rsaSign)) % 100)
149149 if ((0 > rand))
150150 then ((-1 * rand) + 1)
151151 else (rand + 1)
152152 }
153153 else throw("Invalid RSA signature")
154154 }
155155
156156
157157 func RandToStr (r) = if (if ((r >= 1))
158158 then (100 >= r)
159159 else false)
160160 then toString(r)
161161 else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
162162
163163
164-func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr) = {
164+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,decreasedReserves) = {
165+ let wSetCommonData = [decreasedReserves]
165166 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, WBET)]
166- let writeDicePlay = WriteSet([DataEntry("Game Id", gameId), DataEntry("Player Address", toString(playerAddress))])
167- ScriptResult(writeDicePlay, TransferSet(tSetCommonData))
167+ let gameData = DataEntry(gameId, newGameDataStr)
168+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
168169 }
169170
170171
171172 func Multiplier (prediction,rollType) = if ((rollType == ROLLUNDER))
172173 then if ((prediction == 1))
173174 then 9850000
174175 else if ((prediction == 2))
175176 then 4925000
176177 else if ((prediction == 3))
177178 then 3283330
178179 else if ((prediction == 4))
179180 then 2462500
180181 else if ((prediction == 5))
181182 then 1970000
182183 else if ((prediction == 6))
183184 then 1641660
184185 else if ((prediction == 7))
185186 then 1407140
186187 else if ((prediction == 8))
187188 then 1231250
188189 else if ((prediction == 9))
189190 then 1094440
190191 else if ((prediction == 10))
191192 then 985000
192193 else if ((prediction == 11))
193194 then 895450
194195 else if ((prediction == 12))
195196 then 820830
196197 else if ((prediction == 13))
197198 then 757690
198199 else if ((prediction == 14))
199200 then 703570
200201 else if ((prediction == 15))
201202 then 656660
202203 else if ((prediction == 16))
203204 then 615620
204205 else if ((prediction == 17))
205206 then 579410
206207 else if ((prediction == 18))
207208 then 547220
208209 else if ((prediction == 19))
209210 then 518420
210211 else if ((prediction == 20))
211212 then 492500
212213 else if ((prediction == 21))
213214 then 469040
214215 else if ((prediction == 22))
215216 then 447720
216217 else if ((prediction == 23))
217218 then 428260
218219 else if ((prediction == 24))
219220 then 410410
220221 else if ((prediction == 25))
221222 then 394000
222223 else if ((prediction == 26))
223224 then 378840
224225 else if ((prediction == 27))
225226 then 364810
226227 else if ((prediction == 28))
227228 then 351780
228229 else if ((prediction == 29))
229230 then 339650
230231 else if ((prediction == 30))
231232 then 328330
232233 else if ((prediction == 31))
233234 then 317740
234235 else if ((prediction == 32))
235236 then 307810
236237 else if ((prediction == 33))
237238 then 298480
238239 else if ((prediction == 34))
239240 then 289700
240241 else if ((prediction == 35))
241242 then 281420
242243 else if ((prediction == 36))
243244 then 273610
244245 else if ((prediction == 37))
245246 then 259210
246247 else if ((prediction == 38))
247248 then 259210
248249 else if ((prediction == 39))
249250 then 252560
250251 else if ((prediction == 40))
251252 then 246250
252253 else if ((prediction == 41))
253254 then 240240
254255 else if ((prediction == 42))
255256 then 234520
256257 else if ((prediction == 43))
257258 then 229060
258259 else if ((prediction == 44))
259260 then 223860
260261 else if ((prediction == 45))
261262 then 218880
262263 else if ((prediction == 46))
263264 then 214130
264265 else if ((prediction == 47))
265266 then 209570
266267 else if ((prediction == 48))
267268 then 205200
268269 else if ((prediction == 49))
269270 then 201020
270271 else if ((prediction == 50))
271272 then 197000
272273 else if ((prediction == 51))
273274 then 193130
274275 else if ((prediction == 52))
275276 then 189420
276277 else if ((prediction == 53))
277278 then 185840
278279 else if ((prediction == 54))
279280 then 182400
280281 else if ((prediction == 55))
281282 then 179090
282283 else if ((prediction == 56))
283284 then 175890
284285 else if ((prediction == 57))
285286 then 172800
286287 else if ((prediction == 58))
287288 then 169820
288289 else if ((prediction == 59))
289290 then 166940
290291 else if ((prediction == 60))
291292 then 164160
292293 else if ((prediction == 61))
293294 then 161470
294295 else if ((prediction == 62))
295296 then 158870
296297 else if ((prediction == 63))
297298 then 156340
298299 else if ((prediction == 64))
299300 then 153900
300301 else if ((prediction == 65))
301302 then 151530
302303 else if ((prediction == 66))
303304 then 149240
304305 else if ((prediction == 67))
305306 then 147010
306307 else if ((prediction == 68))
307308 then 144850
308309 else if ((prediction == 69))
309310 then 142750
310311 else if ((prediction == 70))
311312 then 140710
312313 else if ((prediction == 71))
313314 then 138730
314315 else if ((prediction == 72))
315316 then 136800
316317 else if ((prediction == 73))
317318 then 134930
318319 else if ((prediction == 74))
319320 then 133100
320321 else if ((prediction == 75))
321322 then 131330
322323 else if ((prediction == 76))
323324 then 129600
324325 else if ((prediction == 77))
325326 then 127920
326327 else if ((prediction == 78))
327328 then 126280
328329 else if ((prediction == 79))
329330 then 124680
330331 else if ((prediction == 80))
331332 then 123120
332333 else if ((prediction == 81))
333334 then 121600
334335 else if ((prediction == 82))
335336 then 120120
336337 else if ((prediction == 83))
337338 then 118670
338339 else if ((prediction == 84))
339340 then 117260
340341 else if ((prediction == 85))
341342 then 115880
342343 else if ((prediction == 86))
343344 then 114530
344345 else if ((prediction == 87))
345346 then 113210
346347 else if ((prediction == 88))
347348 then 111930
348349 else if ((prediction == 89))
349350 then 110670
350351 else if ((prediction == 90))
351352 then 109440
352353 else if ((prediction == 91))
353354 then 108240
354355 else if ((prediction == 92))
355356 then 107060
356357 else if ((prediction == 93))
357358 then 105910
358359 else if ((prediction == 94))
359360 then 104780
360361 else if ((prediction == 95))
361362 then 103680
362363 else if ((prediction == 96))
363364 then 103680
364365 else 100000
365366 else if ((rollType == ROLLOVER))
366367 then if ((prediction == 4))
367368 then 103680
368369 else if ((prediction == 5))
369370 then 103680
370371 else if ((prediction == 6))
371372 then 104780
372373 else if ((prediction == 7))
373374 then 105910
374375 else if ((prediction == 8))
375376 then 107060
376377 else if ((prediction == 9))
377378 then 108240
378379 else if ((prediction == 10))
379380 then 109440
380381 else if ((prediction == 11))
381382 then 110670
382383 else if ((prediction == 12))
383384 then 111930
384385 else if ((prediction == 13))
385386 then 113210
386387 else if ((prediction == 14))
387388 then 114530
388389 else if ((prediction == 15))
389390 then 115880
390391 else if ((prediction == 16))
391392 then 117260
392393 else if ((prediction == 17))
393394 then 118670
394395 else if ((prediction == 18))
395396 then 120120
396397 else if ((prediction == 19))
397398 then 121600
398399 else if ((prediction == 20))
399400 then 123120
400401 else if ((prediction == 21))
401402 then 124680
402403 else if ((prediction == 22))
403404 then 126280
404405 else if ((prediction == 23))
405406 then 127920
406407 else if ((prediction == 24))
407408 then 129600
408409 else if ((prediction == 25))
409410 then 131330
410411 else if ((prediction == 26))
411412 then 133100
412413 else if ((prediction == 27))
413414 then 134930
414415 else if ((prediction == 28))
415416 then 136800
416417 else if ((prediction == 29))
417418 then 138730
418419 else if ((prediction == 30))
419420 then 140710
420421 else if ((prediction == 31))
421422 then 142750
422423 else if ((prediction == 32))
423424 then 144850
424425 else if ((prediction == 33))
425426 then 147010
426427 else if ((prediction == 34))
427428 then 149240
428429 else if ((prediction == 35))
429430 then 151530
430431 else if ((prediction == 36))
431432 then 153900
432433 else if ((prediction == 37))
433434 then 156340
434435 else if ((prediction == 38))
435436 then 158870
436437 else if ((prediction == 39))
437438 then 161470
438439 else if ((prediction == 40))
439440 then 164160
440441 else if ((prediction == 41))
441442 then 166940
442443 else if ((prediction == 42))
443444 then 169820
444445 else if ((prediction == 43))
445446 then 172800
446447 else if ((prediction == 44))
447448 then 175890
448449 else if ((prediction == 45))
449450 then 179090
450451 else if ((prediction == 46))
451452 then 185840
452453 else if ((prediction == 47))
453454 then 185840
454455 else if ((prediction == 48))
455456 then 189420
456457 else if ((prediction == 49))
457458 then 193130
458459 else if ((prediction == 50))
459460 then 197000
460461 else if ((prediction == 51))
461462 then 201020
462463 else if ((prediction == 52))
463464 then 205200
464465 else if ((prediction == 53))
465466 then 209570
466467 else if ((prediction == 54))
467468 then 214130
468469 else if ((prediction == 55))
469470 then 218880
470471 else if ((prediction == 56))
471472 then 223860
472473 else if ((prediction == 57))
473474 then 229060
474475 else if ((prediction == 58))
475476 then 234520
476477 else if ((prediction == 59))
477478 then 240240
478479 else if ((prediction == 60))
479480 then 246250
480481 else if ((prediction == 61))
481482 then 252560
482483 else if ((prediction == 62))
483484 then 259210
484485 else if ((prediction == 63))
485486 then 259210
486487 else if ((prediction == 64))
487488 then 273610
488489 else if ((prediction == 65))
489490 then 281420
490491 else if ((prediction == 66))
491492 then 289700
492493 else if ((prediction == 67))
493494 then 298480
494495 else if ((prediction == 68))
495496 then 307810
496497 else if ((prediction == 69))
497498 then 317740
498499 else if ((prediction == 70))
499500 then 328330
500501 else if ((prediction == 71))
501502 then 339650
502503 else if ((prediction == 72))
503504 then 351780
504505 else if ((prediction == 73))
505506 then 364810
506507 else if ((prediction == 74))
507508 then 378840
508509 else if ((prediction == 75))
509510 then 394000
510511 else if ((prediction == 76))
511512 then 410410
512513 else if ((prediction == 77))
513514 then 428260
514515 else if ((prediction == 78))
515516 then 447720
516517 else if ((prediction == 79))
517518 then 469040
518519 else if ((prediction == 80))
519520 then 492500
520521 else if ((prediction == 81))
521522 then 518420
522523 else if ((prediction == 82))
523524 then 547220
524525 else if ((prediction == 83))
525526 then 579410
526527 else if ((prediction == 84))
527528 then 615620
528529 else if ((prediction == 85))
529530 then 656660
530531 else if ((prediction == 86))
531532 then 703570
532533 else if ((prediction == 87))
533534 then 757690
534535 else if ((prediction == 88))
535536 then 820830
536537 else if ((prediction == 89))
537538 then 895450
538539 else if ((prediction == 90))
539540 then 985000
540541 else if ((prediction == 91))
541542 then 1094440
542543 else if ((prediction == 92))
543544 then 1231250
544545 else if ((prediction == 93))
545546 then 1407140
546547 else if ((prediction == 94))
547548 then 1641660
548549 else if ((prediction == 95))
549550 then 1970000
550551 else if ((prediction == 96))
551552 then 2462500
552553 else if ((prediction == 97))
553554 then 3283330
554555 else if ((prediction == 98))
555556 then 4925000
556557 else if ((prediction == 99))
557558 then 9850000
558559 else 100000
559560 else 100000
560561
561562
562563 func diceWin (type,prediction,number) = if ((type == ROLLUNDER))
563564 then if ((prediction >= number))
564565 then true
565566 else false
566567 else if ((type == ROLLOVER))
567568 then if ((number >= prediction))
568569 then true
569570 else false
570571 else false
571572
572573
573574 func ValidateBetAndDefineWinAmt (amount,prediction,rollType) = if (if ((BETMIN > amount))
574575 then true
575576 else (amount > BETMAX))
576577 then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / WAVELET))) + " maxBet=") + toString((BETMAX / WAVELET))))
577578 else if (if ((rollType != ROLLUNDER))
578579 then (rollType != ROLLOVER)
579580 else false)
580581 then throw("Invalid Roll type, try with OVER or UNDER")
581582 else if (if ((PREDICTIONMIN > prediction))
582583 then true
583584 else (prediction > PREDICTIONMAX))
584585 then throw(((("Prediction is out of the range: " + toString(PREDICTIONMIN)) + " <= prediction <= ") + toString(PREDICTIONMAX)))
585586 else {
586587 let multi = Multiplier(prediction, rollType)
587588 ((((amount * multi) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
588589 }
589590
590591
591592 @Callable(i)
592593 func playDice (rollType,prediction) = {
593594 let gameId = toBase58String(i.transactionId)
594595 let payment = extract(i.payment)
595596 let feeAssetId = isDefined(i.feeAssetId)
596597 let multi = Multiplier(prediction, rollType)
597598 let winAmt = ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
598599 let playerBalance = wavesBalance(i.caller)
599600 let gameIdUsed = isDefined(getString(this, gameId))
600601 if ((payment.assetId != WBET))
601602 then throw("Payment should be in Wavesbet")
602603 else if ((100000 > playerBalance))
603604 then throw("There are not enough waves, it takes 0.01 Waves to bet. Game aborted.")
604605 else if (feeAssetId)
605606 then throw("Transaction's fee must be in Waves. Game aborted.")
606607 else if (gameIdUsed)
607608 then throw("Passed gameId had been used before. Game aborted.")
608609 else {
609610 let newGameNum = IncrementGameNum()
610611 let playerPubKey58 = toBase58String(i.callerPublicKey)
611612 let gameDataStr = FormatGameDataStr(STATESUBMITTED, prediction, rollType, playerPubKey58, winAmt, "")
612- ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet(nil))
613+ ScriptResult(WriteSet([DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet(nil))
613614 }
614615 }
615616
616617
617618
618619 @Callable(i)
619620 func withdraw (gameId,rsaSig) = {
620621 let gameDataList = ExtractGameDataList(gameId)
621622 let gameState = gameDataList[IdxGameState]
622623 let prediction = parseIntValue(gameDataList[IdxPrediction])
623624 let rollType = gameDataList[IdxType]
624625 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
625626 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
626627 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
627628 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
628629 if ((gameState != STATESUBMITTED))
629- then throw("Invalid game state for passed gameId")
630+ then throw("Invalid game state for passed gameId. Game aborted.")
630631 else {
631632 let rand = GenerateRandInt(gameId, rsaSig)
632633 let randStr = RandToStr(rand)
633634 if (diceWin(rollType, prediction, rand))
634635 then {
635636 let newGameDataStr = FormatGameDataStr(STATEWON, prediction, rollType, playerPubKey58, winAmt, randStr)
636- WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr)
637+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, decreasedReserves)
637638 }
638639 else {
639640 let newGameDataStr = FormatGameDataStr(STATELOST, prediction, rollType, playerPubKey58, winAmt, randStr)
640- WriteSet([DataEntry(gameId, newGameDataStr)])
641+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
641642 }
642643 }
643644 }
644645
645646
647+@Verifier(tx)
648+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
649+ then match tx {
650+ case ttx: TransferTransaction =>
651+ ((assetBalance(this, WBET) - ttx.amount) >= ExtractReservedAmt())
652+ case stx: SetScriptTransaction =>
653+ true
654+ case _ =>
655+ false
656+ }
657+ else false
658+

github/deemru/w8io/873ac7e 
187.80 ms