tx · 9zWFdcVRiNFNjtxd2VtoHrbHnhBssAUn4bdKvqf9LDU7

3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89:  -0.01400000 Waves

2019.08.21 15:05 [640860] smart account 3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89 > SELF 0.00000000 Waves

{ "type": 13, "id": "9zWFdcVRiNFNjtxd2VtoHrbHnhBssAUn4bdKvqf9LDU7", "fee": 1400000, "feeAssetId": null, "timestamp": 1566389147756, "version": 1, "sender": "3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89", "senderPublicKey": "FgbqvGasMMrXxbhwrsgEiCgJLjXPjgn8kHxsZiVmLrkb", "proofs": [ "4ensgF7ZJuVrH4gVyW5QQxkYTzBhqGTMFCoLoAwT9oiv2yw1gw8sQSRQnndvBBu4Aj2Av8eU7g1P7DpmZS43eJ5t" ], "script": "base64:AAIDAAAAAAAAAAAAAAArAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAGPYmFzZTY0Ok1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbGVtcjk1SjFqWlVzN2NKbXJtbWxONHpvN1lWc0JKekllSmRrOExERkdoVUtTSTZ5ZnMyMFp5SmUyMSs2R0p3Tm5LVVUxVXlvYzE3d1NXTUtrclowTU12WUUrWjVBaWlqdkJLNHNTSjNJZ0dqZFU4L05oSThDQkR1MEYreFJNOXEzVEIzTExiRHk1c0JkdWRZZkhmc1VPYytNVHZBRDY5bjI3ZGIyUmg4K3laUU10dWJrdVRRTnA4OXNwaEhRYUxHeVFGYU5sSy9OYTNsRng2b21xemFhMWdqb3BsVXI2cnZZS2dmQUlDVUIzelZtSlNoaUVpN3c3UjBoV2xOUkQzcWNaakNVT05TcEZvNFdiemtuR09henc4NEIrSU1JRm5JcFhXelFMOFJYMHZOY2ZzQnZMRGZNNmsyWmFjcXd5TUthTExxaWdkQmlHZEo3VyswbE9TdE9RSURBUUFCAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABDgAAAAAAdXQVZFTEVUCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAAKQ09NTUlTU0lPTgkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAkFAAAAB1dBVkVMRVQAAAAAAAAAA+gAAAAABEJFVDEJAABoAAAAAgAAAAAAAAAAAQUAAAAHV0FWRUxFVAAAAAAEQkVUMgkAAGgAAAACAAAAAAAAAAACBQAAAAdXQVZFTEVUAAAAAARCRVQ0CQAAaAAAAAIAAAAAAAAAAAQFAAAAB1dBVkVMRVQAAAAABEJFVDgJAABoAAAAAgAAAAAAAAAACAUAAAAHV0FWRUxFVAAAAAAFQkVUMTQJAABoAAAAAgAAAAAAAAAADgUAAAAHV0FWRUxFVAAAAAAIUkFURU1VTFQAAAAAAAAAJxAAAAAABVJBVEUxAAAAAAAAAJrnAAAAAAVSQVRFMgAAAAAAAABgGAAAAAAFUkFURTMAAAAAAAAASjgAAAAABVJBVEU0AAAAAAAAADd4AAAAAAVSQVRFNQAAAAAAAAAsiAAA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OAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAADXN0YXJ0ZWRIZWlnaHQAAAAAAAAAAAAJAARMAAAAAgkAAZEAAAACBQAAAAZ3aW5BbXQAAAAAAAAAAAAFAAAAA25pbAEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEAAAAGZ2FtZUlkBAAAAApyYXdEYXRhU3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAANzdHIFAAAAByRtYXRjaDAFAAAAA3N0cgkAAAIAAAABCQABLAAAAAICAAAAFkNvdWxkbid0IGZpbmQgZ2FtZSBieSAFAAAABmdhbWVJZAkBAAAAE1BhcnNlR2FtZVJhd0RhdGFTdHIAAAABBQAAAApyYXdEYXRhU3RyAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAADlJFU0VSVkFUSU9OS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAHlZhbGlkYXRlQW5kSW5jcmVhc2VSZXNlcnZlZEFtdAAAAAEAAAAGd2luQW10BAAAABFuZXdSZXNlcnZlZEFtb3VudAkAAGQAAAACCQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAUAAAAGd2luQW10BAAAAAdiYWxhbmNlCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwMJAABmAAAAAgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQFAAAAB2JhbGFuY2UJAAACAAAAAQIAAABZSW5zdWZmaWNpZW50IGZ1bmRzIG9uIFJ1c3NpYW4gUm91bGV0dGUgYWNjb3VudC4gVHJhbnNhY3Rpb24gd2FzIHJlamVjdGVkIGZvciB5b3VyIHNhZmV0eS4FAAAAEW5ld1Jlc2VydmVkQW1vdW50AQAAABBJbmNyZW1lbnRHYW1lTnVtAAAAAAQAAAAHZ2FtZU51bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA9HQU1FU0NPVU5URVJLRVkD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aXQFAAAAA25pbAMFAAAADHdpbkJ5VGltZW91dAQAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkAASwAAAACCQABLAAAAAIFAAAADm5ld0dhbWVEYXRhU3RyAgAAAAFfCQEAAAATRm9ybWF0R2FtZURhdGFQYXJhbQAAAAECAAAAB1RJTUVPVVQEAAAACGdhbWVEYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAABZuZXdHYW1lRGF0YVN0ckFkanVzdGVkCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACGdhbWVEYXRhBQAAAA53U2V0Q29tbW9uRGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOdFNldENvbW1vbkRhdGEAAAACAAAAAWkBAAAAA2JldAAAAAEAAAAMcGxheWVyQ2hvaWNlBAAAAApuZXdHYW1lTnVtCQEAAAAQSW5jcmVtZW50R2FtZU51bQAAAAAEAAAABmdhbWVJZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAANYmV0Tm90SW5XYXZlcwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAANZmVlTm90SW5XYXZlcwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAGd2luQW10CQEAAAAaVmFsaWRhdGVCZXRBbmREZWZpbmVXaW5BbXQAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAMcGxheWVyQ2hvaWNlBAAAAAh0eElkVXNlZAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwUAAAANYmV0Tm90SW5XYXZlcwkAAAIAAAABAgAAABtCZXQgYW1vdW50IG11c3QgYmUgaW4gV2F2ZXMDBQAAAA1mZWVOb3RJbldhdmVzCQAAAgAAAAECAAAAIlRyYW5zYWN0aW9uJ3MgZmVlIG11c3QgYmUgaW4gV2F2ZXMDBQAAAAh0eElkVXNlZAkAAAIAAAABAgAAAC9QYXNzZWQgdHhJZCBoYWQgYmVlbiB1c2VkIGJlZm9yZS4gR2FtZSBhYm9ydGVkLgQAAAAOcGxheWVyUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAtnYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAOU1RBVEVTVUJNSVRURUQFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAABmhlaWdodAUAAAAGd2luQW10AgAAAAAEAAAAEHJlYWRhYmxlR2FtZURhdGEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA5TVEFURVNVQk1JVFRFRAIAAAABXwUAAAAMcGxheWVyQ2hvaWNlAgAAAAFfBQAAAA5wbGF5ZXJQdWJLZXk1OAIAAAABXwkAAaQAAAABBQAAAAZoZWlnaHQCAAAAAV8JAAGkAAAAAQUAAAAGd2luQW10BAAAAAZTRVJWRVIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAOc2VydmVyVHJhbnNmZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGU0VSVkVSBQAAAApDT01NSVNTSU9OBQAAAAR1bml0BQAAAANuaWwEAAAAB2JldERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZCQEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQUAAAAGd2luQW10CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9HQU1FU0NPVU5URVJLRVkFAAAACm5ld0dhbWVOdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAACUdhbWUgRGF0YQUAAAAQcmVhZGFibGVHYW1lRGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAAtnYW1lRGF0YVN0cgUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQUAAAAHYmV0RGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOc2VydmVyVHJhbnNmZXIAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAxnYW1lRGF0YUxpc3QJAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQUAAAAGZ2FtZUlkBAAAAAlnYW1lU3RhdGUJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAD0lkeFBsYXllckNob2ljZQQAAAANc3RhcnRlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAQSWR4U3RhcnRlZEhlaWdodAQAAAAGd2luQW10CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAlJZHhXaW5BbXQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAARSWR4UGxheWVyUHViS2V5NTgEAAAADXBsYXllckFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAOcGxheWVyUHViS2V5NTgEAAAADHdpbkJ5VGltZW91dAkAAGYAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAANc3RhcnRlZEhlaWdodAUAAAATUkFORE9SQUNMRVRJTUVGUkFNRQQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMJAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgUAAAAGZ2FtZUlkBQAAAAZ3aW5BbXQDCQEAAAACIT0AAAACBQAAAAlnYW1lU3RhdGUFAAAADlNUQVRFU1VCTUlUVEVECQAAAgAAAAECAAAAJEludmFsaWQgZ2FtZSBzdGF0ZSBmb3IgcGFzc2VkIGdhbWVJZAMFAAAADHdpbkJ5VGltZW91dAQAAAAHcmFuZFN0cgkBAAAACWdldFdpblN0cgAAAAEFAAAADHBsYXllckNob2ljZQQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAGBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAAB3JhbmRJbnQJAQAAAA9HZW5lcmF0ZVJhbmRJbnQAAAACBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24EAAAAB3JhbmRTdHIJAQAAAAlSYW5kVG9TdHIAAAABBQAAAAdyYW5kSW50AwkBAAAAC0lzUGxheWVyV2luAAAAAgUAAAAMcGxheWVyQ2hvaWNlBQAAAAdyYW5kU3RyBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAADFdpblNjcmlwdFNldAAAAAYFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACVNUQVRFTE9TVAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAAAzZoXDg==", "chainId": 84, "height": 640860, "spentComplexity": 0 } View: original | compacted Prev: 9VTWZm6ZTJTpj1nD9SVBtTnrteEpSdzijQR4nSukEzAR Next: 7wWfLFQVgkcCUtNYnRRNeZhZym2S8PShAzLHUNgrf9X2 Diff:
OldNewDifferences
340340 }
341341
342342
343-@Verifier(tx)
344-func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
345- then match tx {
346- case ttx: TransferTransaction =>
347- ((wavesBalance(this) - ttx.amount) >= ExtractReservedAmt())
348- case stx: SetScriptTransaction =>
349- true
350- case _ =>
351- false
352- }
353- else false
354-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlemr95J1jZUs7cJmrmmlN4zo7YVsBJzIeJdk8LDFGhUKSI6yfs20ZyJe21+6GJwNnKUU1Uyoc17wSWMKkrZ0MMvYE+Z5AiijvBK4sSJ3IgGjdU8/NhI8CBDu0F+xRM9q3TB3LLbDy5sBdudYfHfsUOc+MTvAD69n27db2Rh8+yZQMtubkuTQNp89sphHQaLGyQFaNlK/Na3lFx6omqzaa1gjoplUr6rvYKgfAICUB3zVmJShiEi7w7R0hWlNRD3qcZjCUONSpFo4WbzknGOazw84B+IMIFnIpXWzQL8RX0vNcfsBvLDfM6k2ZacqwyMKaLLqigdBiGdJ7W+0lOStOQIDAQAB")
55
66 let RANDORACLETIMEFRAME = 4320
77
88 let WAVELET = ((100 * 1000) * 1000)
99
1010 let COMMISSION = ((9 * WAVELET) / 1000)
1111
1212 let BET1 = (1 * WAVELET)
1313
1414 let BET2 = (2 * WAVELET)
1515
1616 let BET4 = (4 * WAVELET)
1717
1818 let BET8 = (8 * WAVELET)
1919
2020 let BET14 = (14 * WAVELET)
2121
2222 let RATEMULT = 10000
2323
2424 let RATE1 = 39655
2525
2626 let RATE2 = 24600
2727
2828 let RATE3 = 19000
2929
3030 let RATE4 = 14200
3131
3232 let RATE5 = 11400
3333
3434 let IdxGameState = 0
3535
3636 let IdxPlayerChoice = 1
3737
3838 let IdxPlayerPubKey58 = 2
3939
4040 let IdxStartedHeight = 3
4141
4242 let IdxWinAmt = 4
4343
4444 let IdxRandOrEmpty = 5
4545
4646 let GAMESCOUNTERKEY = "$GAME_NUM"
4747
4848 let RESERVATIONKEY = "$RESERVED_AMOUNT"
4949
5050 let STATESUBMITTED = "SUBMITTED"
5151
5252 let STATEWON = "WON"
5353
5454 let STATELOST = "LOST"
5555
5656 func getAnswer (playerChoice) = BET14
5757
5858
5959 func GenerateRandInt (gameId,rsaSign) = {
6060 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
6161 if (rsaSigValid)
6262 then {
6363 let rand = (toInt(sha256(rsaSign)) % 6)
6464 if ((0 > rand))
6565 then ((-1 * rand) + 1)
6666 else (rand + 1)
6767 }
6868 else throw("Invalid RSA signature")
6969 }
7070
7171
7272 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
7373 then drop(remaining, 1)
7474 else remaining
7575
7676
7777 func ParseNextAttribute (remaining) = {
7878 let s = size(remaining)
7979 if ((s > 0))
8080 then {
8181 let nn = parseIntValue(take(remaining, 2))
8282 let v = take(drop(remaining, 2), nn)
8383 let tmpRemaining = drop(remaining, (nn + 2))
8484 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
8585 [v, remainingState]
8686 }
8787 else throw("Empty string was passed into parseNextAttribute func")
8888 }
8989
9090
9191 func ParseGameRawDataStr (rawStateStr) = {
9292 let gameState = ParseNextAttribute(rawStateStr)
9393 let playerChoice = ParseNextAttribute(gameState[1])
9494 let playerPubKey58 = ParseNextAttribute(playerChoice[1])
9595 let startedHeight = ParseNextAttribute(playerPubKey58[1])
9696 let winAmt = ParseNextAttribute(startedHeight[1])
9797 [gameState[0], playerChoice[0], playerPubKey58[0], startedHeight[0], winAmt[0]]
9898 }
9999
100100
101101 func ExtractGameDataList (gameId) = {
102102 let rawDataStr = match getString(this, gameId) {
103103 case str: String =>
104104 str
105105 case _ =>
106106 throw(("Couldn't find game by " + gameId))
107107 }
108108 ParseGameRawDataStr(rawDataStr)
109109 }
110110
111111
112112 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
113113 case a: Int =>
114114 a
115115 case _ =>
116116 0
117117 }
118118
119119
120120 func ValidateAndIncreaseReservedAmt (winAmt) = {
121121 let newReservedAmount = (ExtractReservedAmt() + winAmt)
122122 let balance = wavesBalance(this)
123123 if ((newReservedAmount > balance))
124124 then throw("Insufficient funds on Russian Roulette account. Transaction was rejected for your safety.")
125125 else newReservedAmount
126126 }
127127
128128
129129 func IncrementGameNum () = {
130130 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
131131 case num: Int =>
132132 num
133133 case _ =>
134134 0
135135 }
136136 (gameNum + 1)
137137 }
138138
139139
140140 func DecreaseReservedAmt (gameId,winAmt) = {
141141 let newReservedAmount = (ExtractReservedAmt() - winAmt)
142142 if ((0 > newReservedAmount))
143143 then throw("Invalid Russian Roulette account state - reserved amount is less than 0")
144144 else DataEntry(RESERVATIONKEY, newReservedAmount)
145145 }
146146
147147
148148 func FormatGameDataParam (p) = {
149149 let s = size(p)
150150 if ((s == 0))
151151 then throw("Parameter size must be greater then 0")
152152 else if ((s > 99))
153153 then throw("Parameter size must be less then 100")
154154 else if ((10 > s))
155155 then (("0" + toString(s)) + p)
156156 else (toString(s) + p)
157157 }
158158
159159
160160 func FormatGameDataStr (gameState,playerChoice,playerPubKey58,startedHeight,winAmt,randOrEmpty) = {
161161 let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(startedHeight))) + "_") + FormatGameDataParam(toString(winAmt)))
162162 if ((randOrEmpty == ""))
163163 then fullStateStr
164164 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
165165 }
166166
167167
168168 func RandToStr (r) = if ((r == 1))
169169 then "1"
170170 else if ((r == 2))
171171 then "2"
172172 else if ((r == 3))
173173 then "3"
174174 else if ((r == 4))
175175 then "4"
176176 else if ((r == 5))
177177 then "5"
178178 else if ((r == 6))
179179 then "6"
180180 else throw(("Unsupported r parameter passed: expected=[1,...,6] actual=" + toString(r)))
181181
182182
183183 func ValidateBetAndDefineWinAmt (betAmt,playerChoice) = {
184184 let betAmtValid = if (if (if (if (if ((betAmt == (BET1 + COMMISSION)))
185185 then true
186186 else (betAmt == (BET2 + COMMISSION)))
187187 then true
188188 else (betAmt == (BET4 + COMMISSION)))
189189 then true
190190 else (betAmt == (BET8 + COMMISSION)))
191191 then true
192192 else (betAmt == (BET14 + COMMISSION)))
193193 then true
194194 else false
195195 if (betAmtValid)
196196 then {
197197 let bulletsCount = size(playerChoice)
198198 let bet = (betAmt - COMMISSION)
199199 let b1 = parseIntValue(take(playerChoice, 1))
200200 let forB2 = drop(playerChoice, 1)
201201 let b2 = parseIntValue(take(forB2, 1))
202202 let forB3 = drop(forB2, 1)
203203 let b3 = parseIntValue(take(forB3, 1))
204204 let forB4 = drop(forB3, 1)
205205 let b4 = parseIntValue(take(forB4, 1))
206206 let forB5 = drop(forB4, 1)
207207 let b5 = parseIntValue(take(forB5, 1))
208208 let forB6 = drop(forB5, 1)
209209 let b6 = parseIntValue(take(forB6, 1))
210210 let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
211211 if ((activeBullets == 5))
212212 then ((bet * RATE1) / RATEMULT)
213213 else if ((activeBullets == 4))
214214 then ((bet * RATE2) / RATEMULT)
215215 else if ((activeBullets == 3))
216216 then ((bet * RATE3) / RATEMULT)
217217 else if ((activeBullets == 2))
218218 then ((bet * RATE4) / RATEMULT)
219219 else if ((activeBullets == 1))
220220 then ((bet * RATE5) / RATEMULT)
221221 else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
222222 }
223223 else throw("Bet amount is not in range")
224224 }
225225
226226
227227 func getWinStr (playerChoice) = {
228228 let b1 = parseIntValue(take(playerChoice, 1))
229229 let forB2 = drop(playerChoice, 1)
230230 let b2 = parseIntValue(take(forB2, 1))
231231 let forB3 = drop(playerChoice, 1)
232232 let b3 = parseIntValue(take(forB3, 1))
233233 let forB4 = drop(playerChoice, 1)
234234 let b4 = parseIntValue(take(forB4, 1))
235235 let forB5 = drop(playerChoice, 1)
236236 let b5 = parseIntValue(take(forB5, 1))
237237 let forB6 = drop(playerChoice, 1)
238238 let b6 = parseIntValue(take(forB6, 1))
239239 if ((b1 == 0))
240240 then "1"
241241 else if ((b2 == 0))
242242 then "2"
243243 else if ((b3 == 0))
244244 then "3"
245245 else if ((b4 == 0))
246246 then "4"
247247 else if ((b5 == 0))
248248 then "5"
249249 else if ((b6 == 0))
250250 then "6"
251251 else throw("Bet amount is not in range")
252252 }
253253
254254
255255 func IsPlayerWin (playerChoice,randStr) = {
256256 let randInt = parseIntValue(randStr)
257257 let choiceArray = split(playerChoice, "")
258258 if ((choiceArray[(randInt - 1)] == "0"))
259259 then true
260260 else false
261261 }
262262
263263
264264 func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,winByTimeout,decreasedReserves) = {
265265 let wSetCommonData = [decreasedReserves]
266266 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, unit)]
267267 if (winByTimeout)
268268 then {
269269 let newGameDataStrAdjusted = ((newGameDataStr + "_") + FormatGameDataParam("TIMEOUT"))
270270 let gameData = DataEntry(gameId, newGameDataStrAdjusted)
271271 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
272272 }
273273 else {
274274 let gameData = DataEntry(gameId, newGameDataStr)
275275 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
276276 }
277277 }
278278
279279
280280 @Callable(i)
281281 func bet (playerChoice) = {
282282 let newGameNum = IncrementGameNum()
283283 let gameId = toBase58String(i.transactionId)
284284 let pmt = extract(i.payment)
285285 let betNotInWaves = isDefined(pmt.assetId)
286286 let feeNotInWaves = isDefined(pmt.assetId)
287287 let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
288288 let txIdUsed = isDefined(getString(this, gameId))
289289 if (betNotInWaves)
290290 then throw("Bet amount must be in Waves")
291291 else if (feeNotInWaves)
292292 then throw("Transaction's fee must be in Waves")
293293 else if (txIdUsed)
294294 then throw("Passed txId had been used before. Game aborted.")
295295 else {
296296 let playerPubKey58 = toBase58String(i.callerPublicKey)
297297 let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
298298 let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
299299 let SERVER = addressFromPublicKey(i.callerPublicKey)
300300 let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
301301 let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry("Game Data", readableGameData), DataEntry(gameId, gameDataStr)]
302302 ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
303303 }
304304 }
305305
306306
307307
308308 @Callable(i)
309309 func withdraw (gameId,rsaSign) = {
310310 let gameDataList = ExtractGameDataList(gameId)
311311 let gameState = gameDataList[IdxGameState]
312312 let playerChoice = gameDataList[IdxPlayerChoice]
313313 let startedHeight = parseIntValue(gameDataList[IdxStartedHeight])
314314 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
315315 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
316316 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
317317 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
318318 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
319319 if ((gameState != STATESUBMITTED))
320320 then throw("Invalid game state for passed gameId")
321321 else if (winByTimeout)
322322 then {
323323 let randStr = getWinStr(playerChoice)
324324 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
325325 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
326326 }
327327 else {
328328 let randInt = GenerateRandInt(gameId, rsaSign)
329329 let randStr = RandToStr(randInt)
330330 if (IsPlayerWin(playerChoice, randStr))
331331 then {
332332 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
333333 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
334334 }
335335 else {
336336 let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
337337 WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
338338 }
339339 }
340340 }
341341
342342
343-@Verifier(tx)
344-func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
345- then match tx {
346- case ttx: TransferTransaction =>
347- ((wavesBalance(this) - ttx.amount) >= ExtractReservedAmt())
348- case stx: SetScriptTransaction =>
349- true
350- case _ =>
351- false
352- }
353- else false
354-

github/deemru/w8io/c3f4982 
38.85 ms