tx · B9jXc6mAkiQxq6evW38pXkGsaEdqhhaW521gvxVJTbHg

3N4rUUi8J2LHXPaULcXY8khT7JSB6uHTjWq:  -0.01500000 Waves

2019.07.14 02:35 [584643] smart account 3N4rUUi8J2LHXPaULcXY8khT7JSB6uHTjWq > SELF 0.00000000 Waves

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

github/deemru/w8io/c3f4982 
35.58 ms