tx · F5HSkroxPxiUtqweVoRBYQN3Qj4r4wkwPT5VCQAcvt8V

3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX:  -0.01400000 Waves

2019.10.28 04:23 [739302] smart account 3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX > SELF 0.00000000 Waves

{ "type": 13, "id": "F5HSkroxPxiUtqweVoRBYQN3Qj4r4wkwPT5VCQAcvt8V", "fee": 1400000, "feeAssetId": null, "timestamp": 1572225638560, "version": 1, "sender": "3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX", "senderPublicKey": "ACfUG5PwG2GssMuyEwVEhkYAbbbP1geSHR8XoNxLyu6V", "proofs": [ "3W68Jq8jLpFNQRJS4e47z3vYWgwoNs3acdj6wqhF6z5bU7iyQoUFi3iT9YL1xTp1KbJXox1ixyCQ9pBbgGNNVZJS" ], "script": "base64:AAIDAAAAAAAAAA4IARIECgIICBIECgIIAgAAACgAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFtT2xSQlRZRU8zSDdZOXJCbW9GUUZuNDM5MlB4MFF3MTNEc2RFaG56TUgyY2o2WTV5bVB1Q09MTU5lNXFyVXpRbDhvUkx6SUJ6RlZNWmx3VVlsMmJvc3JPSXhRYllGN1dWUVd2b1Z4RVQxWUlnRG0zTnp6T0xBNXVIN0NLTzBzbnNobU1GQ0RPWkVldzQxR2pLaDNQZ3grbmJBZ3VQOVpRUGZxU2FmRW1DM0NOLzR5RHNKcktyaVJuaVpKbzlqUy80TExzUkt3QjdIQVpIem9GOUxMN3RTWkgzaHRhTkd0YmRUa3haMVR6U1QzTWIyVlBTenNadlFEb2NYVVZPbUpPdTBvMjlhT1krR2tHL0c0UkNLMEZCV1FIRVV2QzUxVFJEUzVrOGphZDBPMU1vYmpRYzZiMThkK2Z1b1ZGZE5mWndHSCt1RnVkdFBHM1VKVGYybWt6WlFJREFRQUIAAAAAD0dBTUVTQ09VTlRFUktFWQIAAAAJJEdBTUVfTlVNAAAAAA5SRVNFUlZBVElPTktFWQIAAAAQJFJFU0VSVkVEX0FNT1VOVAAAAAAEV0JFVAEAAAAgD5uLrFpvaCc5H1Jt+IyA7GJAqs11k4f4jn5gjTii4MkAAAAADldBTExFVFdBVkVTQkVUCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUjmD063sxkBCLSiisiwOufXcqpucc4Di4AAAAAAxXQUxMRVRNQ0FGRkUJAQAAAAdBZGRyZXNzAAAAAQEAAAAAAAAAAAdXQVZFTEVUCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAALRkVFV0FWRVNCRVQAAAAAAAAAAAQAAAAACUZFRU1DQUZFRQAAAAAAAAAAAgAAAAAOU1RBVEVTVUJNSVRURUQCAAAACVNVQk1JVFRFRAAAAAAIU1RBVEVXT04CAAAAA1dPTgAAAAAJU1RBVEVMT1NUAgAAAARMT1NUAAAAAAlST0xMVU5ERVICAAAABVVOREVSAAAAAAhST0xMT1ZFUgIA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AAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIQAAAAAAAAI+QgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIgAAAAAAAAJG+AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAIwAAAAAAAAJP6gMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJAAAAAAAAAJZLAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJQAAAAAAAAJitAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJgAAAAAAAAJslgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAJwAAAAAAAAJ2vgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKAAAAAAAAAKBQAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKQAAAAAAAAKMHAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKgAAAAAAAAKXXAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAKwAAAAAAAAKjAAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALAAAAAAAAAKvEgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALQAAAAAAAAK7kgMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALgAAAAAAAALV8AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAALwAAAAAAAALV8AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMAAAAAAAAALj7AMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMQAAAAAAAALyagMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMgAAAAAAAAMBiAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAAMwAAAAAAAAMRPAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAANAAAAAAAAAMhkAMJAAAAAAAAAgUAAAAKcHJlZGljdGlvbgAAAAAAAAAANQAAAAAAAAMyogMJAAAAAAAAAgUAAAAKcHJlZGljdGlv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AAECAAAARVRoZXJlIGFyZSBub3QgZW5vdWdoIHdhdmVzLCBpdCB0YWtlcyAwLjAxIFdhdmVzIHRvIGJldC4gR2FtZSBhYm9ydGVkLgMFAAAACmZlZUFzc2V0SWQJAAACAAAAAQIAAAAxVHJhbnNhY3Rpb24ncyBmZWUgbXVzdCBiZSBpbiBXYXZlcy4gR2FtZSBhYm9ydGVkLgMFAAAACmdhbWVJZFVzZWQJAAACAAAAAQIAAAAxUGFzc2VkIGdhbWVJZCBoYWQgYmVlbiB1c2VkIGJlZm9yZS4gR2FtZSBhYm9ydGVkLgQAAAAKbmV3R2FtZU51bQkBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAA5wbGF5ZXJQdWJLZXk1OAkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAC2dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAA5TVEFURVNVQk1JVFRFRAUAAAAKcHJlZGljdGlvbgUAAAAIcm9sbFR5cGUFAAAADnBsYXllclB1YktleTU4BQAAAAZ3aW5BbXQCAAAAAAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZCQEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQUAAAAGd2luQW10CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9HQU1FU0NPVU5URVJLRVkFAAAACm5ld0dhbWVOdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAALZ2FtZURhdGFTdHIFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA5XQUxMRVRXQVZFU0JFVAkAAGkAAAACCQAAaAAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAALRkVFV0FWRVNCRVQAAAAAAAAAAGQFAAAABFdCRVQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAEdGhpcwAAAAAAAAehIAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAAZnYW1lSWQAAAAGcnNhU2lnBAAAAAxnYW1lRGF0YUxpc3QJAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQUAAAAGZ2FtZUlkBAAAAAlnYW1lU3RhdGUJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAD0lkeFBsYXllckNob2ljZQQAAAAIcm9sbFR5cGUJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAdJZHhUeXBlBAAAAAZ3aW5BbXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACUlkeFdpbkFtdAQAAAAOcGxheWVyUHViS2V5NTgJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAABFJZHhQbGF5ZXJQdWJLZXk1OAQAAAANcGxheWVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABBQAAAA5wbGF5ZXJQdWJLZXk1OAQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMJAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgUAAAAGZ2FtZUlkBQAAAAZ3aW5BbXQDCQEAAAACIT0AAAACBQAAAAlnYW1lU3RhdGUFAAAADlNUQVRFU1VCTUlUVEVECQAAAgAAAAECAAAAJEludmFsaWQgZ2FtZSBzdGF0ZSBmb3IgcGFzc2VkIGdhbWVJZAQAAAAEcmFuZAkBAAAAD0dlbmVyYXRlUmFuZEludAAAAAIFAAAABmdhbWVJZAUAAAAGcnNhU2lnBAAAAAdyYW5kU3RyCQEAAAAJUmFuZFRvU3RyAAAAAQUAAAAEcmFuZAMJAQAAAAdkaWNlV2luAAAAAwUAAAAIcm9sbFR5cGUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAMcGxheWVyQ2hvaWNlBQAAAARyYW5kBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAIcm9sbFR5cGUFAAAADnBsYXllclB1YktleTU4BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAEBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAlTVEFURUxPU1QFAAAADHBsYXllckNob2ljZQUAAAAIcm9sbFR5cGUFAAAADnBsYXllclB1YktleTU4BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIFAAAAA25pbAAAAAC+7+aq", "chainId": 84, "height": 739302, "spentComplexity": 0 } View: original | compacted Prev: 7somFLZfiLDwcCVtXxnwwtaqn3nxuWcZva1Y8wtiYqDk Next: cMaULSV56FZE8qkZt5n5f6sF3hnKaXj2gD6UZCWzwwJ Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg4dAR6XbBDAS9hr/Ej3dJv6Ffc466x/mOGMWU3lrABs3qa8BHmuJGnkfbpEf2vAwYTOWPvvzfM10OBbfloSyq3c9MKvyTe1luBLGqW4vZUXIyvSgz1liyUVefIQy3dyF9jbeTZbC0bbcT/7O3DEL+01z6A+rDCacSZ0lGolSQ6AnhLxzIkVpOQJbrBmC+x+ZuZPCMWzJynd5aeOn7jaj/mkRVyxe6g/0OhWz4NiiZXeuMRB+8mKy0fWD/UlIlZWHsAS2ZmrkXKqjLq0/0wr8ILJkznjSqdnI5Ibjg3uQrj/4AN+i9r28aQ73/ZkPtY5Sbw0AOiABBu7gHmq9ayVxZQIDAQAB")
4+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'
11+
12+let WALLETWAVESBET = Address(base58'3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX')
13+
14+let WALLETMCAFFE = Address(base58'')
1115
1216 let WAVELET = ((100 * 1000) * 1000)
1317
2731
2832 let BETMIN = (100 * WAVELET)
2933
30-let BETMAX = (20000000 * WAVELET)
34+let BETMAX = ((1000 * 100) * WAVELET)
3135
32-let PREDICTIONMIN = 1
36+let PREDICTIONMIN = 4
3337
34-let PREDICTIONMAX = 99
38+let PREDICTIONMAX = 100
3539
3640 let IdxGameState = 0
3741
38-let IdxPrediction = 1
42+let IdxPlayerChoice = 1
3943
4044 let IdxType = 2
4145
6872 let newReservedAmount = (ExtractReservedAmt() + winAmt)
6973 let balance = assetBalance(this, WBET)
7074 if ((newReservedAmount > balance))
71- then throw("Insufficient funds on Wavesbet Dice account. Transaction was rejected for your safety.")
75+ then throw("Insufficient funds on Waves Rider account. Transaction was rejected for your safety.")
7276 else newReservedAmount
7377 }
7478
8589 }
8690
8791
88-func FormatGameDataStr (gameState,prediction,typeRoll,playerPubKey58,winAmt,randOrEmpty) = {
89- let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(toString(prediction))) + "_") + FormatGameDataParam(typeRoll)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
92+func FormatGameDataStr (gameState,playerChoice,playerType,playerPubKey58,winAmt,randOrEmpty) = {
93+ let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerType)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
9094 if ((randOrEmpty == ""))
9195 then fullStateStr
9296 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
114118
115119 func ParseGameRawDataStr (rawStateStr) = {
116120 let gameState = ParseNextAttribute(rawStateStr)
117- let prediction = ParseNextAttribute(gameState[1])
118- let rollType = ParseNextAttribute(prediction[1])
121+ let playerChoice = ParseNextAttribute(gameState[1])
122+ let rollType = ParseNextAttribute(playerChoice[1])
119123 let playerPubKey58 = ParseNextAttribute(rollType[1])
120124 let winAmt = ParseNextAttribute(playerPubKey58[1])
121-[gameState[0], prediction[0], rollType[0], playerPubKey58[0], winAmt[0]]
125+[gameState[0], playerChoice[0], rollType[0], playerPubKey58[0], winAmt[0]]
122126 }
123127
124128
161165 else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
162166
163167
164-func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,decreasedReserves) = {
165- let wSetCommonData = [decreasedReserves]
166- let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, WBET)]
167- let gameData = DataEntry(gameId, newGameDataStr)
168- ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
168+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr) = {
169+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, base58'4vPcbA5yiwpWBVPALPGXus6fNdGEuYTpe4hAeSxM9Kj4')]
170+ let writeDicePlay = WriteSet([DataEntry("Game Id", gameId), DataEntry("Player Address", toString(playerAddress))])
171+ ScriptResult(writeDicePlay, TransferSet(tSetCommonData))
169172 }
170173
171174
574577 func ValidateBetAndDefineWinAmt (amount,prediction,rollType) = if (if ((BETMIN > amount))
575578 then true
576579 else (amount > BETMAX))
577- then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / WAVELET))) + " maxBet=") + toString((BETMAX / WAVELET))))
580+ then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / 100000000))) + " maxBet=") + toString((BETMAX / 100000000))))
578581 else if (if ((rollType != ROLLUNDER))
579582 then (rollType != ROLLOVER)
580583 else false)
582585 else if (if ((PREDICTIONMIN > prediction))
583586 then true
584587 else (prediction > PREDICTIONMAX))
585- then throw(((("Prediction is out of the range: " + toString(PREDICTIONMIN)) + " <= prediction <= ") + toString(PREDICTIONMAX)))
588+ then throw(((("Prediction is out of the condition: " + toString(PREDICTIONMIN)) + " <= predction <= ") + toString(PREDICTIONMAX)))
586589 else {
587590 let multi = Multiplier(prediction, rollType)
588591 ((((amount * multi) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
591594
592595 @Callable(i)
593596 func playDice (rollType,prediction) = {
597+ let predInt = parseIntValue(prediction)
594598 let gameId = toBase58String(i.transactionId)
595599 let payment = extract(i.payment)
596600 let feeAssetId = isDefined(i.feeAssetId)
597- let multi = Multiplier(prediction, rollType)
598- let winAmt = ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
601+ let multi = Multiplier(predInt, rollType)
602+ let winAmt = ValidateBetAndDefineWinAmt(payment.amount, predInt, rollType)
599603 let playerBalance = wavesBalance(i.caller)
600604 let gameIdUsed = isDefined(getString(this, gameId))
601605 if ((payment.assetId != WBET))
602606 then throw("Payment should be in Wavesbet")
603- else if ((1400000 > playerBalance))
604- then throw("There are not enough waves, it takes 0.014 Waves to bet. Game aborted.")
607+ else if ((100000 > playerBalance))
608+ then throw("There are not enough waves, it takes 0.01 Waves to bet. Game aborted.")
605609 else if (feeAssetId)
606610 then throw("Transaction's fee must be in Waves. Game aborted.")
607611 else if (gameIdUsed)
610614 let newGameNum = IncrementGameNum()
611615 let playerPubKey58 = toBase58String(i.callerPublicKey)
612616 let gameDataStr = FormatGameDataStr(STATESUBMITTED, prediction, rollType, playerPubKey58, winAmt, "")
613- ScriptResult(WriteSet([DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(this, 900000, unit)]))
617+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
614618 }
615619 }
616620
620624 func withdraw (gameId,rsaSig) = {
621625 let gameDataList = ExtractGameDataList(gameId)
622626 let gameState = gameDataList[IdxGameState]
623- let prediction = parseIntValue(gameDataList[IdxPrediction])
627+ let playerChoice = gameDataList[IdxPlayerChoice]
624628 let rollType = gameDataList[IdxType]
625629 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
626630 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
627631 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
628632 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
629633 if ((gameState != STATESUBMITTED))
630- then throw("Invalid game state for passed gameId. Game aborted.")
634+ then throw("Invalid game state for passed gameId")
631635 else {
632636 let rand = GenerateRandInt(gameId, rsaSig)
633637 let randStr = RandToStr(rand)
634- if (diceWin(rollType, prediction, rand))
638+ if (diceWin(rollType, parseIntValue(playerChoice), rand))
635639 then {
636- let newGameDataStr = FormatGameDataStr(STATEWON, prediction, rollType, playerPubKey58, winAmt, randStr)
637- WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, decreasedReserves)
640+ let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, rollType, playerPubKey58, winAmt, randStr)
641+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr)
638642 }
639643 else {
640- let newGameDataStr = FormatGameDataStr(STATELOST, prediction, rollType, playerPubKey58, winAmt, randStr)
641- WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
644+ let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, rollType, playerPubKey58, winAmt, randStr)
645+ WriteSet([DataEntry(gameId, newGameDataStr)])
642646 }
643647 }
644648 }
645649
646650
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 itx: InvokeScriptTransaction =>
655- if ((itx.function == "withdraw"))
656- then true
657- else false
658- case _ =>
659- false
660- }
661- else false
662-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg4dAR6XbBDAS9hr/Ej3dJv6Ffc466x/mOGMWU3lrABs3qa8BHmuJGnkfbpEf2vAwYTOWPvvzfM10OBbfloSyq3c9MKvyTe1luBLGqW4vZUXIyvSgz1liyUVefIQy3dyF9jbeTZbC0bbcT/7O3DEL+01z6A+rDCacSZ0lGolSQ6AnhLxzIkVpOQJbrBmC+x+ZuZPCMWzJynd5aeOn7jaj/mkRVyxe6g/0OhWz4NiiZXeuMRB+8mKy0fWD/UlIlZWHsAS2ZmrkXKqjLq0/0wr8ILJkznjSqdnI5Ibjg3uQrj/4AN+i9r28aQ73/ZkPtY5Sbw0AOiABBu7gHmq9ayVxZQIDAQAB")
4+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'
11+
12+let WALLETWAVESBET = Address(base58'3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX')
13+
14+let WALLETMCAFFE = Address(base58'')
1115
1216 let WAVELET = ((100 * 1000) * 1000)
1317
1418 let FEEWAVESBET = 4
1519
1620 let FEEMCAFEE = 2
1721
1822 let STATESUBMITTED = "SUBMITTED"
1923
2024 let STATEWON = "WON"
2125
2226 let STATELOST = "LOST"
2327
2428 let ROLLUNDER = "UNDER"
2529
2630 let ROLLOVER = "OVER"
2731
2832 let BETMIN = (100 * WAVELET)
2933
30-let BETMAX = (20000000 * WAVELET)
34+let BETMAX = ((1000 * 100) * WAVELET)
3135
32-let PREDICTIONMIN = 1
36+let PREDICTIONMIN = 4
3337
34-let PREDICTIONMAX = 99
38+let PREDICTIONMAX = 100
3539
3640 let IdxGameState = 0
3741
38-let IdxPrediction = 1
42+let IdxPlayerChoice = 1
3943
4044 let IdxType = 2
4145
4246 let IdxPlayerPubKey58 = 3
4347
4448 let IdxWinAmt = 4
4549
4650 let IdxRandOrEmpty = 5
4751
4852 func IncrementGameNum () = {
4953 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
5054 case num: Int =>
5155 num
5256 case _ =>
5357 0
5458 }
5559 (gameNum + 1)
5660 }
5761
5862
5963 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
6064 case a: Int =>
6165 a
6266 case _ =>
6367 0
6468 }
6569
6670
6771 func ValidateAndIncreaseReservedAmt (winAmt) = {
6872 let newReservedAmount = (ExtractReservedAmt() + winAmt)
6973 let balance = assetBalance(this, WBET)
7074 if ((newReservedAmount > balance))
71- then throw("Insufficient funds on Wavesbet Dice account. Transaction was rejected for your safety.")
75+ then throw("Insufficient funds on Waves Rider account. Transaction was rejected for your safety.")
7276 else newReservedAmount
7377 }
7478
7579
7680 func FormatGameDataParam (p) = {
7781 let s = size(p)
7882 if ((s == 0))
7983 then throw("Parameter size must be greater then 0")
8084 else if ((s > 99))
8185 then throw("Parameter size must be less then 100")
8286 else if ((10 > s))
8387 then (("0" + toString(s)) + p)
8488 else (toString(s) + p)
8589 }
8690
8791
88-func FormatGameDataStr (gameState,prediction,typeRoll,playerPubKey58,winAmt,randOrEmpty) = {
89- let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(toString(prediction))) + "_") + FormatGameDataParam(typeRoll)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
92+func FormatGameDataStr (gameState,playerChoice,playerType,playerPubKey58,winAmt,randOrEmpty) = {
93+ let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerType)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(winAmt)))
9094 if ((randOrEmpty == ""))
9195 then fullStateStr
9296 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
9397 }
9498
9599
96100 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
97101 then drop(remaining, 1)
98102 else remaining
99103
100104
101105 func ParseNextAttribute (remaining) = {
102106 let s = size(remaining)
103107 if ((s > 0))
104108 then {
105109 let nn = parseIntValue(take(remaining, 2))
106110 let v = take(drop(remaining, 2), nn)
107111 let tmpRemaining = drop(remaining, (nn + 2))
108112 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
109113 [v, remainingState]
110114 }
111115 else throw("Empty string was passed into parseNextAttribute func")
112116 }
113117
114118
115119 func ParseGameRawDataStr (rawStateStr) = {
116120 let gameState = ParseNextAttribute(rawStateStr)
117- let prediction = ParseNextAttribute(gameState[1])
118- let rollType = ParseNextAttribute(prediction[1])
121+ let playerChoice = ParseNextAttribute(gameState[1])
122+ let rollType = ParseNextAttribute(playerChoice[1])
119123 let playerPubKey58 = ParseNextAttribute(rollType[1])
120124 let winAmt = ParseNextAttribute(playerPubKey58[1])
121-[gameState[0], prediction[0], rollType[0], playerPubKey58[0], winAmt[0]]
125+[gameState[0], playerChoice[0], rollType[0], playerPubKey58[0], winAmt[0]]
122126 }
123127
124128
125129 func ExtractGameDataList (gameId) = {
126130 let rawDataStr = match getString(this, gameId) {
127131 case str: String =>
128132 str
129133 case _ =>
130134 throw(("Couldn't find game by " + gameId))
131135 }
132136 ParseGameRawDataStr(rawDataStr)
133137 }
134138
135139
136140 func DecreaseReservedAmt (gameId,winAmt) = {
137141 let newReservedAmount = (ExtractReservedAmt() - winAmt)
138142 if ((0 > newReservedAmount))
139143 then throw("Invalid Dice Roller account state - reserved amount is less than 0")
140144 else DataEntry(RESERVATIONKEY, newReservedAmount)
141145 }
142146
143147
144148 func GenerateRandInt (gameId,rsaSign) = {
145149 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
146150 if (rsaSigValid)
147151 then {
148152 let rand = (toInt(sha256(rsaSign)) % 100)
149153 if ((0 > rand))
150154 then ((-1 * rand) + 1)
151155 else (rand + 1)
152156 }
153157 else throw("Invalid RSA signature")
154158 }
155159
156160
157161 func RandToStr (r) = if (if ((r >= 1))
158162 then (100 >= r)
159163 else false)
160164 then toString(r)
161165 else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
162166
163167
164-func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,decreasedReserves) = {
165- let wSetCommonData = [decreasedReserves]
166- let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, WBET)]
167- let gameData = DataEntry(gameId, newGameDataStr)
168- ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
168+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr) = {
169+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, base58'4vPcbA5yiwpWBVPALPGXus6fNdGEuYTpe4hAeSxM9Kj4')]
170+ let writeDicePlay = WriteSet([DataEntry("Game Id", gameId), DataEntry("Player Address", toString(playerAddress))])
171+ ScriptResult(writeDicePlay, TransferSet(tSetCommonData))
169172 }
170173
171174
172175 func Multiplier (prediction,rollType) = if ((rollType == ROLLUNDER))
173176 then if ((prediction == 1))
174177 then 9850000
175178 else if ((prediction == 2))
176179 then 4925000
177180 else if ((prediction == 3))
178181 then 3283330
179182 else if ((prediction == 4))
180183 then 2462500
181184 else if ((prediction == 5))
182185 then 1970000
183186 else if ((prediction == 6))
184187 then 1641660
185188 else if ((prediction == 7))
186189 then 1407140
187190 else if ((prediction == 8))
188191 then 1231250
189192 else if ((prediction == 9))
190193 then 1094440
191194 else if ((prediction == 10))
192195 then 985000
193196 else if ((prediction == 11))
194197 then 895450
195198 else if ((prediction == 12))
196199 then 820830
197200 else if ((prediction == 13))
198201 then 757690
199202 else if ((prediction == 14))
200203 then 703570
201204 else if ((prediction == 15))
202205 then 656660
203206 else if ((prediction == 16))
204207 then 615620
205208 else if ((prediction == 17))
206209 then 579410
207210 else if ((prediction == 18))
208211 then 547220
209212 else if ((prediction == 19))
210213 then 518420
211214 else if ((prediction == 20))
212215 then 492500
213216 else if ((prediction == 21))
214217 then 469040
215218 else if ((prediction == 22))
216219 then 447720
217220 else if ((prediction == 23))
218221 then 428260
219222 else if ((prediction == 24))
220223 then 410410
221224 else if ((prediction == 25))
222225 then 394000
223226 else if ((prediction == 26))
224227 then 378840
225228 else if ((prediction == 27))
226229 then 364810
227230 else if ((prediction == 28))
228231 then 351780
229232 else if ((prediction == 29))
230233 then 339650
231234 else if ((prediction == 30))
232235 then 328330
233236 else if ((prediction == 31))
234237 then 317740
235238 else if ((prediction == 32))
236239 then 307810
237240 else if ((prediction == 33))
238241 then 298480
239242 else if ((prediction == 34))
240243 then 289700
241244 else if ((prediction == 35))
242245 then 281420
243246 else if ((prediction == 36))
244247 then 273610
245248 else if ((prediction == 37))
246249 then 259210
247250 else if ((prediction == 38))
248251 then 259210
249252 else if ((prediction == 39))
250253 then 252560
251254 else if ((prediction == 40))
252255 then 246250
253256 else if ((prediction == 41))
254257 then 240240
255258 else if ((prediction == 42))
256259 then 234520
257260 else if ((prediction == 43))
258261 then 229060
259262 else if ((prediction == 44))
260263 then 223860
261264 else if ((prediction == 45))
262265 then 218880
263266 else if ((prediction == 46))
264267 then 214130
265268 else if ((prediction == 47))
266269 then 209570
267270 else if ((prediction == 48))
268271 then 205200
269272 else if ((prediction == 49))
270273 then 201020
271274 else if ((prediction == 50))
272275 then 197000
273276 else if ((prediction == 51))
274277 then 193130
275278 else if ((prediction == 52))
276279 then 189420
277280 else if ((prediction == 53))
278281 then 185840
279282 else if ((prediction == 54))
280283 then 182400
281284 else if ((prediction == 55))
282285 then 179090
283286 else if ((prediction == 56))
284287 then 175890
285288 else if ((prediction == 57))
286289 then 172800
287290 else if ((prediction == 58))
288291 then 169820
289292 else if ((prediction == 59))
290293 then 166940
291294 else if ((prediction == 60))
292295 then 164160
293296 else if ((prediction == 61))
294297 then 161470
295298 else if ((prediction == 62))
296299 then 158870
297300 else if ((prediction == 63))
298301 then 156340
299302 else if ((prediction == 64))
300303 then 153900
301304 else if ((prediction == 65))
302305 then 151530
303306 else if ((prediction == 66))
304307 then 149240
305308 else if ((prediction == 67))
306309 then 147010
307310 else if ((prediction == 68))
308311 then 144850
309312 else if ((prediction == 69))
310313 then 142750
311314 else if ((prediction == 70))
312315 then 140710
313316 else if ((prediction == 71))
314317 then 138730
315318 else if ((prediction == 72))
316319 then 136800
317320 else if ((prediction == 73))
318321 then 134930
319322 else if ((prediction == 74))
320323 then 133100
321324 else if ((prediction == 75))
322325 then 131330
323326 else if ((prediction == 76))
324327 then 129600
325328 else if ((prediction == 77))
326329 then 127920
327330 else if ((prediction == 78))
328331 then 126280
329332 else if ((prediction == 79))
330333 then 124680
331334 else if ((prediction == 80))
332335 then 123120
333336 else if ((prediction == 81))
334337 then 121600
335338 else if ((prediction == 82))
336339 then 120120
337340 else if ((prediction == 83))
338341 then 118670
339342 else if ((prediction == 84))
340343 then 117260
341344 else if ((prediction == 85))
342345 then 115880
343346 else if ((prediction == 86))
344347 then 114530
345348 else if ((prediction == 87))
346349 then 113210
347350 else if ((prediction == 88))
348351 then 111930
349352 else if ((prediction == 89))
350353 then 110670
351354 else if ((prediction == 90))
352355 then 109440
353356 else if ((prediction == 91))
354357 then 108240
355358 else if ((prediction == 92))
356359 then 107060
357360 else if ((prediction == 93))
358361 then 105910
359362 else if ((prediction == 94))
360363 then 104780
361364 else if ((prediction == 95))
362365 then 103680
363366 else if ((prediction == 96))
364367 then 103680
365368 else 100000
366369 else if ((rollType == ROLLOVER))
367370 then if ((prediction == 4))
368371 then 103680
369372 else if ((prediction == 5))
370373 then 103680
371374 else if ((prediction == 6))
372375 then 104780
373376 else if ((prediction == 7))
374377 then 105910
375378 else if ((prediction == 8))
376379 then 107060
377380 else if ((prediction == 9))
378381 then 108240
379382 else if ((prediction == 10))
380383 then 109440
381384 else if ((prediction == 11))
382385 then 110670
383386 else if ((prediction == 12))
384387 then 111930
385388 else if ((prediction == 13))
386389 then 113210
387390 else if ((prediction == 14))
388391 then 114530
389392 else if ((prediction == 15))
390393 then 115880
391394 else if ((prediction == 16))
392395 then 117260
393396 else if ((prediction == 17))
394397 then 118670
395398 else if ((prediction == 18))
396399 then 120120
397400 else if ((prediction == 19))
398401 then 121600
399402 else if ((prediction == 20))
400403 then 123120
401404 else if ((prediction == 21))
402405 then 124680
403406 else if ((prediction == 22))
404407 then 126280
405408 else if ((prediction == 23))
406409 then 127920
407410 else if ((prediction == 24))
408411 then 129600
409412 else if ((prediction == 25))
410413 then 131330
411414 else if ((prediction == 26))
412415 then 133100
413416 else if ((prediction == 27))
414417 then 134930
415418 else if ((prediction == 28))
416419 then 136800
417420 else if ((prediction == 29))
418421 then 138730
419422 else if ((prediction == 30))
420423 then 140710
421424 else if ((prediction == 31))
422425 then 142750
423426 else if ((prediction == 32))
424427 then 144850
425428 else if ((prediction == 33))
426429 then 147010
427430 else if ((prediction == 34))
428431 then 149240
429432 else if ((prediction == 35))
430433 then 151530
431434 else if ((prediction == 36))
432435 then 153900
433436 else if ((prediction == 37))
434437 then 156340
435438 else if ((prediction == 38))
436439 then 158870
437440 else if ((prediction == 39))
438441 then 161470
439442 else if ((prediction == 40))
440443 then 164160
441444 else if ((prediction == 41))
442445 then 166940
443446 else if ((prediction == 42))
444447 then 169820
445448 else if ((prediction == 43))
446449 then 172800
447450 else if ((prediction == 44))
448451 then 175890
449452 else if ((prediction == 45))
450453 then 179090
451454 else if ((prediction == 46))
452455 then 185840
453456 else if ((prediction == 47))
454457 then 185840
455458 else if ((prediction == 48))
456459 then 189420
457460 else if ((prediction == 49))
458461 then 193130
459462 else if ((prediction == 50))
460463 then 197000
461464 else if ((prediction == 51))
462465 then 201020
463466 else if ((prediction == 52))
464467 then 205200
465468 else if ((prediction == 53))
466469 then 209570
467470 else if ((prediction == 54))
468471 then 214130
469472 else if ((prediction == 55))
470473 then 218880
471474 else if ((prediction == 56))
472475 then 223860
473476 else if ((prediction == 57))
474477 then 229060
475478 else if ((prediction == 58))
476479 then 234520
477480 else if ((prediction == 59))
478481 then 240240
479482 else if ((prediction == 60))
480483 then 246250
481484 else if ((prediction == 61))
482485 then 252560
483486 else if ((prediction == 62))
484487 then 259210
485488 else if ((prediction == 63))
486489 then 259210
487490 else if ((prediction == 64))
488491 then 273610
489492 else if ((prediction == 65))
490493 then 281420
491494 else if ((prediction == 66))
492495 then 289700
493496 else if ((prediction == 67))
494497 then 298480
495498 else if ((prediction == 68))
496499 then 307810
497500 else if ((prediction == 69))
498501 then 317740
499502 else if ((prediction == 70))
500503 then 328330
501504 else if ((prediction == 71))
502505 then 339650
503506 else if ((prediction == 72))
504507 then 351780
505508 else if ((prediction == 73))
506509 then 364810
507510 else if ((prediction == 74))
508511 then 378840
509512 else if ((prediction == 75))
510513 then 394000
511514 else if ((prediction == 76))
512515 then 410410
513516 else if ((prediction == 77))
514517 then 428260
515518 else if ((prediction == 78))
516519 then 447720
517520 else if ((prediction == 79))
518521 then 469040
519522 else if ((prediction == 80))
520523 then 492500
521524 else if ((prediction == 81))
522525 then 518420
523526 else if ((prediction == 82))
524527 then 547220
525528 else if ((prediction == 83))
526529 then 579410
527530 else if ((prediction == 84))
528531 then 615620
529532 else if ((prediction == 85))
530533 then 656660
531534 else if ((prediction == 86))
532535 then 703570
533536 else if ((prediction == 87))
534537 then 757690
535538 else if ((prediction == 88))
536539 then 820830
537540 else if ((prediction == 89))
538541 then 895450
539542 else if ((prediction == 90))
540543 then 985000
541544 else if ((prediction == 91))
542545 then 1094440
543546 else if ((prediction == 92))
544547 then 1231250
545548 else if ((prediction == 93))
546549 then 1407140
547550 else if ((prediction == 94))
548551 then 1641660
549552 else if ((prediction == 95))
550553 then 1970000
551554 else if ((prediction == 96))
552555 then 2462500
553556 else if ((prediction == 97))
554557 then 3283330
555558 else if ((prediction == 98))
556559 then 4925000
557560 else if ((prediction == 99))
558561 then 9850000
559562 else 100000
560563 else 100000
561564
562565
563566 func diceWin (type,prediction,number) = if ((type == ROLLUNDER))
564567 then if ((prediction >= number))
565568 then true
566569 else false
567570 else if ((type == ROLLOVER))
568571 then if ((number >= prediction))
569572 then true
570573 else false
571574 else false
572575
573576
574577 func ValidateBetAndDefineWinAmt (amount,prediction,rollType) = if (if ((BETMIN > amount))
575578 then true
576579 else (amount > BETMAX))
577- then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / WAVELET))) + " maxBet=") + toString((BETMAX / WAVELET))))
580+ then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / 100000000))) + " maxBet=") + toString((BETMAX / 100000000))))
578581 else if (if ((rollType != ROLLUNDER))
579582 then (rollType != ROLLOVER)
580583 else false)
581584 then throw("Invalid Roll type, try with OVER or UNDER")
582585 else if (if ((PREDICTIONMIN > prediction))
583586 then true
584587 else (prediction > PREDICTIONMAX))
585- then throw(((("Prediction is out of the range: " + toString(PREDICTIONMIN)) + " <= prediction <= ") + toString(PREDICTIONMAX)))
588+ then throw(((("Prediction is out of the condition: " + toString(PREDICTIONMIN)) + " <= predction <= ") + toString(PREDICTIONMAX)))
586589 else {
587590 let multi = Multiplier(prediction, rollType)
588591 ((((amount * multi) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
589592 }
590593
591594
592595 @Callable(i)
593596 func playDice (rollType,prediction) = {
597+ let predInt = parseIntValue(prediction)
594598 let gameId = toBase58String(i.transactionId)
595599 let payment = extract(i.payment)
596600 let feeAssetId = isDefined(i.feeAssetId)
597- let multi = Multiplier(prediction, rollType)
598- let winAmt = ValidateBetAndDefineWinAmt(payment.amount, prediction, rollType)
601+ let multi = Multiplier(predInt, rollType)
602+ let winAmt = ValidateBetAndDefineWinAmt(payment.amount, predInt, rollType)
599603 let playerBalance = wavesBalance(i.caller)
600604 let gameIdUsed = isDefined(getString(this, gameId))
601605 if ((payment.assetId != WBET))
602606 then throw("Payment should be in Wavesbet")
603- else if ((1400000 > playerBalance))
604- then throw("There are not enough waves, it takes 0.014 Waves to bet. Game aborted.")
607+ else if ((100000 > playerBalance))
608+ then throw("There are not enough waves, it takes 0.01 Waves to bet. Game aborted.")
605609 else if (feeAssetId)
606610 then throw("Transaction's fee must be in Waves. Game aborted.")
607611 else if (gameIdUsed)
608612 then throw("Passed gameId had been used before. Game aborted.")
609613 else {
610614 let newGameNum = IncrementGameNum()
611615 let playerPubKey58 = toBase58String(i.callerPublicKey)
612616 let gameDataStr = FormatGameDataStr(STATESUBMITTED, prediction, rollType, playerPubKey58, winAmt, "")
613- ScriptResult(WriteSet([DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(this, 900000, unit)]))
617+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
614618 }
615619 }
616620
617621
618622
619623 @Callable(i)
620624 func withdraw (gameId,rsaSig) = {
621625 let gameDataList = ExtractGameDataList(gameId)
622626 let gameState = gameDataList[IdxGameState]
623- let prediction = parseIntValue(gameDataList[IdxPrediction])
627+ let playerChoice = gameDataList[IdxPlayerChoice]
624628 let rollType = gameDataList[IdxType]
625629 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
626630 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
627631 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
628632 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
629633 if ((gameState != STATESUBMITTED))
630- then throw("Invalid game state for passed gameId. Game aborted.")
634+ then throw("Invalid game state for passed gameId")
631635 else {
632636 let rand = GenerateRandInt(gameId, rsaSig)
633637 let randStr = RandToStr(rand)
634- if (diceWin(rollType, prediction, rand))
638+ if (diceWin(rollType, parseIntValue(playerChoice), rand))
635639 then {
636- let newGameDataStr = FormatGameDataStr(STATEWON, prediction, rollType, playerPubKey58, winAmt, randStr)
637- WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, decreasedReserves)
640+ let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, rollType, playerPubKey58, winAmt, randStr)
641+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr)
638642 }
639643 else {
640- let newGameDataStr = FormatGameDataStr(STATELOST, prediction, rollType, playerPubKey58, winAmt, randStr)
641- WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
644+ let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, rollType, playerPubKey58, winAmt, randStr)
645+ WriteSet([DataEntry(gameId, newGameDataStr)])
642646 }
643647 }
644648 }
645649
646650
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 itx: InvokeScriptTransaction =>
655- if ((itx.function == "withdraw"))
656- then true
657- else false
658- case _ =>
659- false
660- }
661- else false
662-

github/deemru/w8io/873ac7e 
109.26 ms