tx · 9VTWZm6ZTJTpj1nD9SVBtTnrteEpSdzijQR4nSukEzAR

3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89:  -0.01400000 Waves

2019.08.21 13:08 [640746] smart account 3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89 > SELF 0.00000000 Waves

{ "type": 13, "id": "9VTWZm6ZTJTpj1nD9SVBtTnrteEpSdzijQR4nSukEzAR", "fee": 1400000, "feeAssetId": null, "timestamp": 1566382287115, "version": 1, "sender": "3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89", "senderPublicKey": "FgbqvGasMMrXxbhwrsgEiCgJLjXPjgn8kHxsZiVmLrkb", "proofs": [ "53oisvDdE5i2wRnK4ruRdCRy9t3ZLCVkBqBuxWkLExY9rN8xgmvRDhWyV9xMicD7TThqMykEN3XyeusPF1rz5PtR" ], "script": "base64:AAIDAAAAAAAAAAAAAAArAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAGPYmFzZTY0Ok1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbGVtcjk1SjFqWlVzN2NKbXJtbWxONHpvN1lWc0JKekllSmRrOExERkdoVUtTSTZ5ZnMyMFp5SmUyMSs2R0p3Tm5LVVUxVXlvYzE3d1NXTUtrclowTU12WUUrWjVBaWlqdkJLNHNTSjNJZ0dqZFU4L05oSThDQkR1MEYreFJNOXEzVEIzTExiRHk1c0JkdWRZZkhmc1VPYytNVHZBRDY5bjI3ZGIyUmg4K3laUU10dWJrdVRRTnA4OXNwaEhRYUxHeVFGYU5sSy9OYTNsRng2b21xemFhMWdqb3BsVXI2cnZZS2dmQUlDVUIzelZtSlNoaUVpN3c3UjBoV2xOUkQzcWNaakNVT05TcEZvNFdiemtuR09henc4NEIrSU1JRm5JcFhXelFMOFJYMHZOY2ZzQnZMRGZNNmsyWmFjcXd5TUthTExxaWdkQmlHZEo3VyswbE9TdE9RSURBUUFCAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABDgAAAAAAdXQVZFTEVUCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAAKQ09NTUlTU0lPTgkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAkFAAAAB1dBVkVMRVQAAAAAAAAAA+gAAAAABEJFVDEJAABoAAAAAgAAAAAAAAAAAQUAAAAHV0FWRUxFVAAAAAAEQkVUMgkAAGgAAAACAAAAAAAAAAACBQAAAAdXQVZFTEVUAAAAAARCRVQ0CQAAaAAAAAIAAAAAAAAAAAQFAAAAB1dBVkVMRVQAAAAABEJFVDgJAABoAAAAAgAAAAAAAAAACAUAAAAHV0FWRUxFVAAAAAAFQkVUMTQJAABoAAAAAgAAAAAAAAAADgUAAAAHV0FWRUxFVAAAAAAIUkFURU1VTFQAAAAAAAAAJxAAAAAABVJBVEUxAAAAAAAAAJrnAAAAAAVSQVRFMgAAAAAAAABgGAAAAAAFUkFURTMAAAAAAAAASjgAAAAABVJBVEU0AAAAAAAAADd4AAAAAAVSQVRFNQAAAAAAAAAsiAAA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OAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAADXN0YXJ0ZWRIZWlnaHQAAAAAAAAAAAAJAARMAAAAAgkAAZEAAAACBQAAAAZ3aW5BbXQAAAAAAAAAAAAFAAAAA25pbAEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEAAAAGZ2FtZUlkBAAAAApyYXdEYXRhU3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAANzdHIFAAAAByRtYXRjaDAFAAAAA3N0cgkAAAIAAAABCQABLAAAAAICAAAAFkNvdWxkbid0IGZpbmQgZ2FtZSBieSAFAAAABmdhbWVJZAkBAAAAE1BhcnNlR2FtZVJhd0RhdGFTdHIAAAABBQAAAApyYXdEYXRhU3RyAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAADlJFU0VSVkFUSU9OS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAHlZhbGlkYXRlQW5kSW5jcmVhc2VSZXNlcnZlZEFtdAAAAAEAAAAGd2luQW10BAAAABFuZXdSZXNlcnZlZEFtb3VudAkAAGQAAAACCQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAUAAAAGd2luQW10BAAAAAdiYWxhbmNlCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwMJAABmAAAAAgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQFAAAAB2JhbGFuY2UJAAACAAAAAQIAAABZSW5zdWZmaWNpZW50IGZ1bmRzIG9uIFJ1c3NpYW4gUm91bGV0dGUgYWNjb3VudC4gVHJhbnNhY3Rpb24gd2FzIHJlamVjdGVkIGZvciB5b3VyIHNhZmV0eS4FAAAAEW5ld1Jlc2VydmVkQW1vdW50AQAAABBJbmNyZW1lbnRHYW1lTnVtAAAAAAQAAAAHZ2FtZU51bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA9HQU1FU0NPVU5URVJLRVkD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aXQFAAAAA25pbAMFAAAADHdpbkJ5VGltZW91dAQAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkAASwAAAACCQABLAAAAAIFAAAADm5ld0dhbWVEYXRhU3RyAgAAAAFfCQEAAAATRm9ybWF0R2FtZURhdGFQYXJhbQAAAAECAAAAB1RJTUVPVVQEAAAACGdhbWVEYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAABZuZXdHYW1lRGF0YVN0ckFkanVzdGVkCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACGdhbWVEYXRhBQAAAA53U2V0Q29tbW9uRGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOdFNldENvbW1vbkRhdGEAAAACAAAAAWkBAAAAA2JldAAAAAEAAAAMcGxheWVyQ2hvaWNlBAAAAApuZXdHYW1lTnVtCQEAAAAQSW5jcmVtZW50R2FtZU51bQAAAAAEAAAABmdhbWVJZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAANYmV0Tm90SW5XYXZlcwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAANZmVlTm90SW5XYXZlcwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAGd2luQW10CQEAAAAaVmFsaWRhdGVCZXRBbmREZWZpbmVXaW5BbXQAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAMcGxheWVyQ2hvaWNlBAAAAAh0eElkVXNlZAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwUAAAANYmV0Tm90SW5XYXZlcwkAAAIAAAABAgAAABtCZXQgYW1vdW50IG11c3QgYmUgaW4gV2F2ZXMDBQAAAA1mZWVOb3RJbldhdmVzCQAAAgAAAAECAAAAIlRyYW5zYWN0aW9uJ3MgZmVlIG11c3QgYmUgaW4gV2F2ZXMDBQAAAAh0eElkVXNlZAkAAAIAAAABAgAAAC9QYXNzZWQgdHhJZCBoYWQgYmVlbiB1c2VkIGJlZm9yZS4gR2FtZSBhYm9ydGVkLgQAAAAOcGxheWVyUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAtnYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAOU1RBVEVTVUJNSVRURUQFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAABmhlaWdodAUAAAAGd2luQW10AgAAAAAEAAAAEHJlYWRhYmxlR2FtZURhdGEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA5TVEFURVNVQk1JVFRFRAIAAAABXwUAAAAMcGxheWVyQ2hvaWNlAgAAAAFfBQAAAA5wbGF5ZXJQdWJLZXk1OAIAAAABXwkAAaQAAAABBQAAAAZoZWlnaHQCAAAAAV8JAAGkAAAAAQUAAAAGd2luQW10BAAAAAZTRVJWRVIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAOc2VydmVyVHJhbnNmZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGU0VSVkVSBQAAAApDT01NSVNTSU9OBQAAAAR1bml0BQAAAANuaWwEAAAAB2JldERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZCQEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQUAAAAGd2luQW10CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9HQU1FU0NPVU5URVJLRVkFAAAACm5ld0dhbWVOdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAACUdhbWUgRGF0YQUAAAAQcmVhZGFibGVHYW1lRGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAAtnYW1lRGF0YVN0cgUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQUAAAAHYmV0RGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOc2VydmVyVHJhbnNmZXIAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAxnYW1lRGF0YUxpc3QJAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQUAAAAGZ2FtZUlkBAAAAAlnYW1lU3RhdGUJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAD0lkeFBsYXllckNob2ljZQQAAAANc3RhcnRlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAQSWR4U3RhcnRlZEhlaWdodAQAAAAGd2luQW10CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAlJZHhXaW5BbXQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAARSWR4UGxheWVyUHViS2V5NTgEAAAADXBsYXllckFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAOcGxheWVyUHViS2V5NTgEAAAADHdpbkJ5VGltZW91dAkAAGYAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAANc3RhcnRlZEhlaWdodAUAAAATUkFORE9SQUNMRVRJTUVGUkFNRQQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMJAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgUAAAAGZ2FtZUlkBQAAAAZ3aW5BbXQDCQEAAAACIT0AAAACBQAAAAlnYW1lU3RhdGUFAAAADlNUQVRFU1VCTUlUVEVECQAAAgAAAAECAAAAJEludmFsaWQgZ2FtZSBzdGF0ZSBmb3IgcGFzc2VkIGdhbWVJZAMFAAAADHdpbkJ5VGltZW91dAQAAAAHcmFuZFN0cgkBAAAACWdldFdpblN0cgAAAAEFAAAADHBsYXllckNob2ljZQQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAGBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAAB3JhbmRJbnQJAQAAAA9HZW5lcmF0ZVJhbmRJbnQAAAACBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24EAAAAB3JhbmRTdHIJAQAAAAlSYW5kVG9TdHIAAAABBQAAAAdyYW5kSW50AwkBAAAAC0lzUGxheWVyV2luAAAAAgUAAAAMcGxheWVyQ2hvaWNlBQAAAAdyYW5kU3RyBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAADFdpblNjcmlwdFNldAAAAAYFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACVNUQVRFTE9TVAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAJAABnAAAAAgkAAGUAAAACCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwgFAAAAA3R0eAAAAAZhbW91bnQJAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwBgcHOOknTA==", "chainId": 84, "height": 640746, "spentComplexity": 0 } View: original | compacted Prev: CRdoQEkbM84J9ppPCpRrj3q2B2Wv9nxhNrx2aapU8FKc Next: 9zWFdcVRiNFNjtxd2VtoHrbHnhBssAUn4bdKvqf9LDU7 Diff:
OldNewDifferences
208208 let forB6 = drop(forB5, 1)
209209 let b6 = parseIntValue(take(forB6, 1))
210210 let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
211- if ((1 == 1))
212- then throw(((((((((((((((("Bet: " + toString(bet)) + " b1=") + toString(b1)) + " b2=") + toString(b2)) + " b3=") + toString(b3)) + " b4=") + toString(b4)) + " b5=") + toString(b5)) + " b6=") + toString(b6)) + ". Active bullets = ") + toString(activeBullets)))
213- else activeBullets
211+ if ((activeBullets == 5))
212+ then ((bet * RATE1) / RATEMULT)
213+ else if ((activeBullets == 4))
214+ then ((bet * RATE2) / RATEMULT)
215+ else if ((activeBullets == 3))
216+ then ((bet * RATE3) / RATEMULT)
217+ else if ((activeBullets == 2))
218+ then ((bet * RATE4) / RATEMULT)
219+ else if ((activeBullets == 1))
220+ then ((bet * RATE5) / RATEMULT)
221+ else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
214222 }
215223 else throw("Bet amount is not in range")
216224 }
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)
211- if ((1 == 1))
212- then throw(((((((((((((((("Bet: " + toString(bet)) + " b1=") + toString(b1)) + " b2=") + toString(b2)) + " b3=") + toString(b3)) + " b4=") + toString(b4)) + " b5=") + toString(b5)) + " b6=") + toString(b6)) + ". Active bullets = ") + toString(activeBullets)))
213- else activeBullets
211+ if ((activeBullets == 5))
212+ then ((bet * RATE1) / RATEMULT)
213+ else if ((activeBullets == 4))
214+ then ((bet * RATE2) / RATEMULT)
215+ else if ((activeBullets == 3))
216+ then ((bet * RATE3) / RATEMULT)
217+ else if ((activeBullets == 2))
218+ then ((bet * RATE4) / RATEMULT)
219+ else if ((activeBullets == 1))
220+ then ((bet * RATE5) / RATEMULT)
221+ else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
214222 }
215223 else throw("Bet amount is not in range")
216224 }
217225
218226
219227 func getWinStr (playerChoice) = {
220228 let b1 = parseIntValue(take(playerChoice, 1))
221229 let forB2 = drop(playerChoice, 1)
222230 let b2 = parseIntValue(take(forB2, 1))
223231 let forB3 = drop(playerChoice, 1)
224232 let b3 = parseIntValue(take(forB3, 1))
225233 let forB4 = drop(playerChoice, 1)
226234 let b4 = parseIntValue(take(forB4, 1))
227235 let forB5 = drop(playerChoice, 1)
228236 let b5 = parseIntValue(take(forB5, 1))
229237 let forB6 = drop(playerChoice, 1)
230238 let b6 = parseIntValue(take(forB6, 1))
231239 if ((b1 == 0))
232240 then "1"
233241 else if ((b2 == 0))
234242 then "2"
235243 else if ((b3 == 0))
236244 then "3"
237245 else if ((b4 == 0))
238246 then "4"
239247 else if ((b5 == 0))
240248 then "5"
241249 else if ((b6 == 0))
242250 then "6"
243251 else throw("Bet amount is not in range")
244252 }
245253
246254
247255 func IsPlayerWin (playerChoice,randStr) = {
248256 let randInt = parseIntValue(randStr)
249257 let choiceArray = split(playerChoice, "")
250258 if ((choiceArray[(randInt - 1)] == "0"))
251259 then true
252260 else false
253261 }
254262
255263
256264 func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,winByTimeout,decreasedReserves) = {
257265 let wSetCommonData = [decreasedReserves]
258266 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, unit)]
259267 if (winByTimeout)
260268 then {
261269 let newGameDataStrAdjusted = ((newGameDataStr + "_") + FormatGameDataParam("TIMEOUT"))
262270 let gameData = DataEntry(gameId, newGameDataStrAdjusted)
263271 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
264272 }
265273 else {
266274 let gameData = DataEntry(gameId, newGameDataStr)
267275 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
268276 }
269277 }
270278
271279
272280 @Callable(i)
273281 func bet (playerChoice) = {
274282 let newGameNum = IncrementGameNum()
275283 let gameId = toBase58String(i.transactionId)
276284 let pmt = extract(i.payment)
277285 let betNotInWaves = isDefined(pmt.assetId)
278286 let feeNotInWaves = isDefined(pmt.assetId)
279287 let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
280288 let txIdUsed = isDefined(getString(this, gameId))
281289 if (betNotInWaves)
282290 then throw("Bet amount must be in Waves")
283291 else if (feeNotInWaves)
284292 then throw("Transaction's fee must be in Waves")
285293 else if (txIdUsed)
286294 then throw("Passed txId had been used before. Game aborted.")
287295 else {
288296 let playerPubKey58 = toBase58String(i.callerPublicKey)
289297 let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
290298 let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
291299 let SERVER = addressFromPublicKey(i.callerPublicKey)
292300 let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
293301 let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry("Game Data", readableGameData), DataEntry(gameId, gameDataStr)]
294302 ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
295303 }
296304 }
297305
298306
299307
300308 @Callable(i)
301309 func withdraw (gameId,rsaSign) = {
302310 let gameDataList = ExtractGameDataList(gameId)
303311 let gameState = gameDataList[IdxGameState]
304312 let playerChoice = gameDataList[IdxPlayerChoice]
305313 let startedHeight = parseIntValue(gameDataList[IdxStartedHeight])
306314 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
307315 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
308316 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
309317 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
310318 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
311319 if ((gameState != STATESUBMITTED))
312320 then throw("Invalid game state for passed gameId")
313321 else if (winByTimeout)
314322 then {
315323 let randStr = getWinStr(playerChoice)
316324 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
317325 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
318326 }
319327 else {
320328 let randInt = GenerateRandInt(gameId, rsaSign)
321329 let randStr = RandToStr(randInt)
322330 if (IsPlayerWin(playerChoice, randStr))
323331 then {
324332 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
325333 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
326334 }
327335 else {
328336 let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
329337 WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
330338 }
331339 }
332340 }
333341
334342
335343 @Verifier(tx)
336344 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
337345 then match tx {
338346 case ttx: TransferTransaction =>
339347 ((wavesBalance(this) - ttx.amount) >= ExtractReservedAmt())
340348 case stx: SetScriptTransaction =>
341349 true
342350 case _ =>
343351 false
344352 }
345353 else false
346354

github/deemru/w8io/873ac7e 
36.62 ms