tx · 3SLUi2didGt1uC2YUjwCuWpL84PcwkMeVHiDbz5T2oRg

3N4zabLE5JbtJfVdNL7CP1STkCnmU15Uwyz:  -0.01000000 Waves

2019.08.26 02:48 [647365] smart account 3N4zabLE5JbtJfVdNL7CP1STkCnmU15Uwyz > SELF 0.00000000 Waves

{ "type": 13, "id": "3SLUi2didGt1uC2YUjwCuWpL84PcwkMeVHiDbz5T2oRg", "fee": 1000000, "feeAssetId": null, "timestamp": 1566776762872, "version": 1, "sender": "3N4zabLE5JbtJfVdNL7CP1STkCnmU15Uwyz", "senderPublicKey": "H2xJWsT7HURFk1LcASPmFbNrxJ1AoYmbjiYy2qTiUDmg", "proofs": [ "2S4gUKrrzwMQJuit8C8VUHHbsVJ9D6JLT53yGWESkQvHgG8EyBybfhJednUG7zE9CzhnuANRJri9oDGPHcKdMrnF" ], "script": "base64:AAIDAAAAAAAAAAAAAAAsAAAAAA9TZXJ2ZXJQdWJsaWNLZXkJAAJZAAAAAQIAAAAsNFZBQXNWdXVTSkFCNVhhbW1BWGU2Rzk4dFlLSll2R2hleXZwS0c4TkpXbjEAAAAABlNFUlZFUgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABAgAAACMzTkFQb1VCd0w3amFQVzNuZ1ZGM2RUNWI2OHE0ZWFIQWlpQwAAAAATUkFORE9SQUNMRVRJTUVGUkFNRQAAAAAAAAAQ4AAAAAAHV0FWRUxFVAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAACkNPTU1JU1NJT04JAABpAAAAAgkAAGgAAAACAAAAAAAAAAAJBQAAAAdXQVZFTEVUAAAAAAAAAAPoAAAAAARCRVQxCQAAaAAAAAIAAAAAAAAAAAEFAAAAB1dBVkVMRVQAAAAABEJFVDIJAABoAAAAAgAAAAAAAAAAAgUAAAAHV0FWRUxFVAAAAAAEQkVUNAkAAGgAAAACAAAAAAAAAAAEBQAAAAdXQVZFTEVUAAAAAARCRVQ4CQAAaAAAAAIAAAAAAAAAAAgFAAAAB1dBVkVMRVQAAAAABUJFVDE0CQAAaAAAAAIAAAAAAAAAAA4FAAAAB1dBVkVMRVQAAAAACFJBVEVNVUxUAAAAAAAAACcQAAAAAAVSQVRFMQAAAAAAAACa5wAAAAAFUkFURTIAAAAAAAAAYBgAAAAABVJBVEUzAAAAAAAAAEo4AAAAAAVSQVRFNAAAAAAAAAA3eAAAAAAFUkFURTUAAAAAAAAALIgAAAAADElkeEdhbWVTdGF0ZQAAAAAAAAAAAAAAAAAPSWR4UGxheWVyQ2hvaWNlAAAAAAAAAAABAAAAABFJZHhQbGF5ZXJQdWJLZXk1OAAAAAAAAAAAAgAAAAAQSWR4U3RhcnRlZEhlaWdodAAAAAAAAAAAAwAAAAAJSWR4V2luQW10AAAAAAAAAAAEAAAAAA5JZHhSYW5kT3JFbXB0eQAAAAAAAAAABQAAAAAPR0FNRVNDT1VOVEVSS0VZAgAAAAkkR0FNRV9OVU0AAAAADlJFU0VSVkFUSU9OS0VZAgAAABAkUkVTRVJWRURfQU1PVU5UAAAAAA5TVEFURVNVQk1JVFRFRAIAAAAJU1VCTUlUVEVEAAAAAAhTVEFURVdPTgIAAAADV09OAAAAAAlTVEFURUxPU1QCAAAABExPU1QBAAAACWdldEFuc3dlcgAAAAEAAAAMcGxheWVyQ2hvaWNlBQAAAAVCRVQxNAEAAAAPR2VuZXJhdGVSYW5kSW50AAAAAgAAAAZnYW1lSWQAAAAHcnNhU2lnbgQAAAALcnNhU2lnVmFsaWQJAAH0AAAAAwkAAZsAAAABBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24FAAAAD1NlcnZlclB1YmxpY0tleQMFAAAAC3JzYVNpZ1ZhbGlkBAAAAARyYW5kCQAAagAAAAIJAASxAAAAAQkAAfcAAAABBQAAAAdyc2FTaWduAAAAAAAAAAAGAwkAAGYAAAACAAAAAAAAAAAABQAAAARyYW5kCQAAZAAAAAIJAABoAAAAAgD//////////wUAAAAEcmFuZAAAAAAAAAAAAQkAAGQAAAACBQAAAARyYW5kAAAAAAAAAAABCQAAAgAAAAECAAAAFUludmFsaWQgUlNBIHNpZ25hdHVyZQEAAAAZUmVtb3ZlVW5kZXJzY29yZUlmUHJlc2VudAAAAAEAAAAJcmVtYWluaW5nAwkAAGYAAAACCQABMQAAAAEFAAAACXJlbWFpbmluZwAAAAAAAAAAAAkAATAAAAACBQAAAAlyZW1haW5pbmcAAAAAAAAAAAEFAAAACXJlbWFpbmluZwEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQAAAAlyZW1haW5pbmcEAAAAAXMJAAExAAAAAQUAAAAJcmVtYWluaW5nAwkAAGYAAAACBQAAAAFzAAAAAAAAAAAABAAAAAJubgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABLwAAAAIFAAAACXJlbWFpbmluZwAAAAAAAAAAAgQAAAABdgkAAS8AAAACCQABMAAAAAIFAAAACXJlbWFpbmluZwAAAAAAAAAAAgUAAAACbm4EAAAADHRtcFJlbWFpbmluZwkAATAAAAACBQAAAAlyZW1haW5pbmcJAABkAAAAAgUAAAACbm4AAAAAAAAAAAIEAAAADnJlbWFpbmluZ1N0YXRlCQEAAAAZUmVtb3ZlVW5kZXJzY29yZUlmUHJlc2VudAAAAAEFAAAADHRtcFJlbWFpbmluZwkABEwAAAACBQAAAAF2CQAETAAAAAIFAAAADnJlbWFpbmluZ1N0YXRlBQAAAANuaWwJAAACAAAAAQIAAAA0RW1wdHkgc3RyaW5nIHdhcyBwYXNzZWQgaW50byBwYXJzZU5leHRBdHRyaWJ1dGUgZnVuYwEAAAATUGFyc2VHYW1lUmF3RGF0YVN0cgAAAAEAAAALcmF3U3RhdGVTdHIEAAAACWdhbWVTdGF0ZQkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEFAAAAC3Jhd1N0YXRlU3RyBAAAAAxwbGF5ZXJDaG9pY2UJAQAAABJQYXJzZU5leHRBdHRyaWJ1dGUAAAABCQABkQAAAAIFAAAACWdhbWVTdGF0ZQAAAAAAAAAAAQQAAAAOcGxheWVyUHViS2V5NTgJAQAAABJQYXJzZU5leHRBdHRyaWJ1dGUAAAABCQABkQAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQQAAAANc3RhcnRlZEhlaWdodAkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEJAAGRAAAAAgUAAAAOcGxheWVyUHViS2V5NTgAAAAAAAAAAAEEAAAABndpbkFtdAkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEJAAGRAAAAAgUAAAANc3RhcnRlZEhlaWdodAAAAAAAAAAAAQkABEwAAAACCQABkQAAAAIFAAAACWdhbWVTdGF0ZQAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAADnBsYXllclB1YktleTU4AAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAANc3RhcnRlZEhlaWdodAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAABndpbkFtdAAAAAAAAAAAAAUAAAADbmlsAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQAAAAZnYW1lSWQEAAAACnJhd0RhdGFTdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAA3N0cgUAAAAHJG1hdGNoMAUAAAADc3RyCQAAAgAAAAEJAAEsAAAAAgIAAAAWQ291bGRuJ3QgZmluZCBnYW1lIGJ5IAUAAAAGZ2FtZUlkCQEAAAATUGFyc2VHYW1lUmF3RGF0YVN0cgAAAAEFAAAACnJhd0RhdGFTdHIBAAAAEkV4dHJhY3RSZXNlcnZlZEFtdAAAAAAEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAOUkVTRVJWQVRJT05LRVkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQAAAAZ3aW5BbXQEAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAZAAAAAIJAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABQAAAAZ3aW5BbXQEAAAAB2JhbGFuY2UJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzAwkAAGYAAAACBQAAABFuZXdSZXNlcnZlZEFtb3VudAUAAAAHYmFsYW5jZQkAAAIAAAABAgAAAFlJbnN1ZmZpY2llbnQgZnVuZHMgb24gUnVzc2lhbiBSb3VsZXR0ZSBhY2NvdW50LiBUcmFuc2FjdGlvbiB3YXMgcmVqZWN0ZWQgZm9yIHlvdXIgc2FmZXR5LgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAAdnYW1lTnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAD0dBTUVTQ09VTlRFUktFWQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAANudW0FAAAAByRtYXRjaDAFAAAAA251bQAAAAAAAAAAAAkAAGQAAAACBQAAAAdnYW1lTnVtAAAAAAAAAAABAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgAAAAZnYW1lSWQAAAAGd2luQW10BAAAABFuZXdSZXNlcnZlZEFtb3VudAkAAGUAAAACCQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAUAAAAGd2luQW10AwkAAGYAAAACAAAAAAAAAAAABQAAABFuZXdSZXNlcnZlZEFtb3VudAkAAAIAAAABAgAAAEdJ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YXRhBQAAAA53U2V0Q29tbW9uRGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOdFNldENvbW1vbkRhdGEEAAAACGdhbWVEYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAIZ2FtZURhdGEFAAAADndTZXRDb21tb25EYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAA50U2V0Q29tbW9uRGF0YQAAAAIAAAABaQEAAAADYmV0AAAAAQAAAAxwbGF5ZXJDaG9pY2UEAAAACm5ld0dhbWVOdW0JAQAAABBJbmNyZW1lbnRHYW1lTnVtAAAAAAQAAAAGZ2FtZUlkCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAA1iZXROb3RJbldhdmVzCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA1mZWVOb3RJbldhdmVzCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAZ3aW5BbXQJAQAAABpWYWxpZGF0ZUJldEFuZERlZmluZVdpbkFtdAAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAAAxwbGF5ZXJDaG9pY2UEAAAACHR4SWRVc2VkCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAZnYW1lSWQDBQAAAA1iZXROb3RJbldhdmVzCQAAAgAAAAECAAAAG0JldCBhbW91bnQgbXVzdCBiZSBpbiBXYXZlcwMFAAAADWZlZU5vdEluV2F2ZXMJAAACAAAAAQIAAAAiVHJhbnNhY3Rpb24ncyBmZWUgbXVzdCBiZSBpbiBXYXZlcwMFAAAACHR4SWRVc2VkCQAAAgAAAAECAAAAL1Bhc3NlZCB0eElkIGhhZCBiZWVuIHVzZWQgYmVmb3JlLiBHYW1lIGFib3J0ZWQuBAAAAA5wbGF5ZXJQdWJLZXk1OAkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAC2dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAA5TVEFURVNVQk1JVFRFRAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAAGaGVpZ2h0BQAAAAZ3aW5BbXQCAAAAAAQAAAAQcmVhZGFibGVHYW1lRGF0YQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADlNUQVRFU1VCTUlUVEVEAgAAAAFfBQAAAAxwbGF5ZXJDaG9pY2UCAAAAAV8FAAAADnBsYXllclB1YktleTU4AgAAAAFfCQABpAAAAAEFAAAABmhlaWdodAIAAAABXwkAAaQAAAABBQAAAAZ3aW5BbXQEAAAADnNlcnZlclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABlNFUlZFUgUAAAAKQ09NTUlTU0lPTgUAAAAEdW5pdAUAAAADbmlsBAAAAAdiZXREYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5SRVNFUlZBVElPTktFWQkBAAAAHlZhbGlkYXRlQW5kSW5jcmVhc2VSZXNlcnZlZEFtdAAAAAEFAAAABndpbkFtdAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPR0FNRVNDT1VOVEVSS0VZBQAAAApuZXdHYW1lTnVtCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAAC2dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABBQAAAAdiZXREYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAA5zZXJ2ZXJUcmFuc2ZlcgAAAAFpAQAAAAh3aXRoZHJhdwAAAAIAAAAGZ2FtZUlkAAAADnJzYVNpZ25DcnlwdGVkBAAAAAdyc2FTaWduCQACWQAAAAEFAAAADnJzYVNpZ25DcnlwdGVkBAAAAAxnYW1lRGF0YUxpc3QJAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQUAAAAGZ2FtZUlkBAAAAAlnYW1lU3RhdGUJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAD0lkeFBsYXllckNob2ljZQQAAAANc3RhcnRlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAQSWR4U3RhcnRlZEhlaWdodAQAAAAGd2luQW10CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAlJZHhXaW5BbXQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAARSWR4UGxheWVyUHViS2V5NTgEAAAADXBsYXllckFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAOcGxheWVyUHViS2V5NTgEAAAADHdpbkJ5VGltZW91dAkAAGYAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAANc3RhcnRlZEhlaWdodAUAAAATUkFORE9SQUNMRVRJTUVGUkFNRQQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMJAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgUAAAAGZ2FtZUlkBQAAAAZ3aW5BbXQDCQEAAAACIT0AAAACBQAAAAlnYW1lU3RhdGUFAAAADlNUQVRFU1VCTUlUVEVECQAAAgAAAAECAAAAJEludmFsaWQgZ2FtZSBzdGF0ZSBmb3IgcGFzc2VkIGdhbWVJZAMFAAAADHdpbkJ5VGltZW91dAQAAAAHcmFuZFN0cgkBAAAACWdldFdpblN0cgAAAAEFAAAADHBsYXllckNob2ljZQQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAGBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAAB3JhbmRJbnQJAQAAAA9HZW5lcmF0ZVJhbmRJbnQAAAACBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24EAAAAB3JhbmRTdHIJAQAAAAlSYW5kVG9TdHIAAAABBQAAAAdyYW5kSW50AwkBAAAAC0lzUGxheWVyV2luAAAAAgUAAAAMcGxheWVyQ2hvaWNlBQAAAAdyYW5kU3RyBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAADFdpblNjcmlwdFNldAAAAAYFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACVNUQVRFTE9TVAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAAAoH3jWA==", "chainId": 84, "height": 647365, "spentComplexity": 0 } View: original | compacted Prev: none Next: GL17Md5KiH63JyrGK5ypCUP3vnJ8PJr4QRLMP6ArNCGL Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let ServerPublicKey = fromBase58String("4VAAsVuuSJAB5XammAXe6G98tYKJYvGheyvpKG8NJWn1")
5+
6+let SERVER = addressFromStringValue("3NAPoUBwL7jaPW3ngVF3dT5b68q4eaHAiiC")
7+
8+let RANDORACLETIMEFRAME = 4320
9+
10+let WAVELET = ((100 * 1000) * 1000)
11+
12+let COMMISSION = ((9 * WAVELET) / 1000)
13+
14+let BET1 = (1 * WAVELET)
15+
16+let BET2 = (2 * WAVELET)
17+
18+let BET4 = (4 * WAVELET)
19+
20+let BET8 = (8 * WAVELET)
21+
22+let BET14 = (14 * WAVELET)
23+
24+let RATEMULT = 10000
25+
26+let RATE1 = 39655
27+
28+let RATE2 = 24600
29+
30+let RATE3 = 19000
31+
32+let RATE4 = 14200
33+
34+let RATE5 = 11400
35+
36+let IdxGameState = 0
37+
38+let IdxPlayerChoice = 1
39+
40+let IdxPlayerPubKey58 = 2
41+
42+let IdxStartedHeight = 3
43+
44+let IdxWinAmt = 4
45+
46+let IdxRandOrEmpty = 5
47+
48+let GAMESCOUNTERKEY = "$GAME_NUM"
49+
50+let RESERVATIONKEY = "$RESERVED_AMOUNT"
51+
52+let STATESUBMITTED = "SUBMITTED"
53+
54+let STATEWON = "WON"
55+
56+let STATELOST = "LOST"
57+
58+func getAnswer (playerChoice) = BET14
59+
60+
61+func GenerateRandInt (gameId,rsaSign) = {
62+ let rsaSigValid = sigVerify(toBytes(gameId), rsaSign, ServerPublicKey)
63+ if (rsaSigValid)
64+ then {
65+ let rand = (toInt(sha256(rsaSign)) % 6)
66+ if ((0 > rand))
67+ then ((-1 * rand) + 1)
68+ else (rand + 1)
69+ }
70+ else throw("Invalid RSA signature")
71+ }
72+
73+
74+func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
75+ then drop(remaining, 1)
76+ else remaining
77+
78+
79+func ParseNextAttribute (remaining) = {
80+ let s = size(remaining)
81+ if ((s > 0))
82+ then {
83+ let nn = parseIntValue(take(remaining, 2))
84+ let v = take(drop(remaining, 2), nn)
85+ let tmpRemaining = drop(remaining, (nn + 2))
86+ let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
87+[v, remainingState]
88+ }
89+ else throw("Empty string was passed into parseNextAttribute func")
90+ }
91+
92+
93+func ParseGameRawDataStr (rawStateStr) = {
94+ let gameState = ParseNextAttribute(rawStateStr)
95+ let playerChoice = ParseNextAttribute(gameState[1])
96+ let playerPubKey58 = ParseNextAttribute(playerChoice[1])
97+ let startedHeight = ParseNextAttribute(playerPubKey58[1])
98+ let winAmt = ParseNextAttribute(startedHeight[1])
99+[gameState[0], playerChoice[0], playerPubKey58[0], startedHeight[0], winAmt[0]]
100+ }
101+
102+
103+func ExtractGameDataList (gameId) = {
104+ let rawDataStr = match getString(this, gameId) {
105+ case str: String =>
106+ str
107+ case _ =>
108+ throw(("Couldn't find game by " + gameId))
109+ }
110+ ParseGameRawDataStr(rawDataStr)
111+ }
112+
113+
114+func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
115+ case a: Int =>
116+ a
117+ case _ =>
118+ 0
119+}
120+
121+
122+func ValidateAndIncreaseReservedAmt (winAmt) = {
123+ let newReservedAmount = (ExtractReservedAmt() + winAmt)
124+ let balance = wavesBalance(this)
125+ if ((newReservedAmount > balance))
126+ then throw("Insufficient funds on Russian Roulette account. Transaction was rejected for your safety.")
127+ else newReservedAmount
128+ }
129+
130+
131+func IncrementGameNum () = {
132+ let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
133+ case num: Int =>
134+ num
135+ case _ =>
136+ 0
137+ }
138+ (gameNum + 1)
139+ }
140+
141+
142+func DecreaseReservedAmt (gameId,winAmt) = {
143+ let newReservedAmount = (ExtractReservedAmt() - winAmt)
144+ if ((0 > newReservedAmount))
145+ then throw("Invalid Russian Roulette account state - reserved amount is less than 0")
146+ else DataEntry(RESERVATIONKEY, newReservedAmount)
147+ }
148+
149+
150+func FormatGameDataParam (p) = {
151+ let s = size(p)
152+ if ((s == 0))
153+ then throw("Parameter size must be greater then 0")
154+ else if ((s > 99))
155+ then throw("Parameter size must be less then 100")
156+ else if ((10 > s))
157+ then (("0" + toString(s)) + p)
158+ else (toString(s) + p)
159+ }
160+
161+
162+func FormatGameDataStr (gameState,playerChoice,playerPubKey58,startedHeight,winAmt,randOrEmpty) = {
163+ let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(startedHeight))) + "_") + FormatGameDataParam(toString(winAmt)))
164+ if ((randOrEmpty == ""))
165+ then fullStateStr
166+ else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
167+ }
168+
169+
170+func RandToStr (r) = if ((r == 1))
171+ then "1"
172+ else if ((r == 2))
173+ then "2"
174+ else if ((r == 3))
175+ then "3"
176+ else if ((r == 4))
177+ then "4"
178+ else if ((r == 5))
179+ then "5"
180+ else if ((r == 6))
181+ then "6"
182+ else throw(("Unsupported r parameter passed: expected=[1,...,6] actual=" + toString(r)))
183+
184+
185+func ValidateBetAndDefineWinAmt (betAmt,playerChoice) = {
186+ let betAmtValid = if (if (if (if (if ((betAmt == (BET1 + COMMISSION)))
187+ then true
188+ else (betAmt == (BET2 + COMMISSION)))
189+ then true
190+ else (betAmt == (BET4 + COMMISSION)))
191+ then true
192+ else (betAmt == (BET8 + COMMISSION)))
193+ then true
194+ else (betAmt == (BET14 + COMMISSION)))
195+ then true
196+ else false
197+ if (betAmtValid)
198+ then {
199+ let bulletsCount = size(playerChoice)
200+ let bet = (betAmt - COMMISSION)
201+ let b1 = parseIntValue(take(playerChoice, 1))
202+ let forB2 = drop(playerChoice, 1)
203+ let b2 = parseIntValue(take(forB2, 1))
204+ let forB3 = drop(forB2, 1)
205+ let b3 = parseIntValue(take(forB3, 1))
206+ let forB4 = drop(forB3, 1)
207+ let b4 = parseIntValue(take(forB4, 1))
208+ let forB5 = drop(forB4, 1)
209+ let b5 = parseIntValue(take(forB5, 1))
210+ let forB6 = drop(forB5, 1)
211+ let b6 = parseIntValue(take(forB6, 1))
212+ let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
213+ if ((activeBullets == 5))
214+ then ((bet * RATE1) / RATEMULT)
215+ else if ((activeBullets == 4))
216+ then ((bet * RATE2) / RATEMULT)
217+ else if ((activeBullets == 3))
218+ then ((bet * RATE3) / RATEMULT)
219+ else if ((activeBullets == 2))
220+ then ((bet * RATE4) / RATEMULT)
221+ else if ((activeBullets == 1))
222+ then ((bet * RATE5) / RATEMULT)
223+ else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
224+ }
225+ else throw("Bet amount is not in range")
226+ }
227+
228+
229+func getWinStr (playerChoice) = {
230+ let b1 = parseIntValue(take(playerChoice, 1))
231+ let forB2 = drop(playerChoice, 1)
232+ let b2 = parseIntValue(take(forB2, 1))
233+ let forB3 = drop(playerChoice, 1)
234+ let b3 = parseIntValue(take(forB3, 1))
235+ let forB4 = drop(playerChoice, 1)
236+ let b4 = parseIntValue(take(forB4, 1))
237+ let forB5 = drop(playerChoice, 1)
238+ let b5 = parseIntValue(take(forB5, 1))
239+ let forB6 = drop(playerChoice, 1)
240+ let b6 = parseIntValue(take(forB6, 1))
241+ if ((b1 == 0))
242+ then "1"
243+ else if ((b2 == 0))
244+ then "2"
245+ else if ((b3 == 0))
246+ then "3"
247+ else if ((b4 == 0))
248+ then "4"
249+ else if ((b5 == 0))
250+ then "5"
251+ else if ((b6 == 0))
252+ then "6"
253+ else throw("Bet amount is not in range")
254+ }
255+
256+
257+func IsPlayerWin (playerChoice,randStr) = {
258+ let randInt = parseIntValue(randStr)
259+ let choiceArray = split(playerChoice, "")
260+ if ((choiceArray[(randInt - 1)] == "0"))
261+ then true
262+ else false
263+ }
264+
265+
266+func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,winByTimeout,decreasedReserves) = {
267+ let wSetCommonData = [decreasedReserves]
268+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, unit)]
269+ if (winByTimeout)
270+ then {
271+ let newGameDataStrAdjusted = ((newGameDataStr + "_") + FormatGameDataParam("TIMEOUT"))
272+ let gameData = DataEntry(gameId, newGameDataStrAdjusted)
273+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
274+ }
275+ else {
276+ let gameData = DataEntry(gameId, newGameDataStr)
277+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
278+ }
279+ }
280+
281+
282+@Callable(i)
283+func bet (playerChoice) = {
284+ let newGameNum = IncrementGameNum()
285+ let gameId = toBase58String(i.transactionId)
286+ let pmt = extract(i.payment)
287+ let betNotInWaves = isDefined(pmt.assetId)
288+ let feeNotInWaves = isDefined(pmt.assetId)
289+ let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
290+ let txIdUsed = isDefined(getString(this, gameId))
291+ if (betNotInWaves)
292+ then throw("Bet amount must be in Waves")
293+ else if (feeNotInWaves)
294+ then throw("Transaction's fee must be in Waves")
295+ else if (txIdUsed)
296+ then throw("Passed txId had been used before. Game aborted.")
297+ else {
298+ let playerPubKey58 = toBase58String(i.callerPublicKey)
299+ let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
300+ let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
301+ let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
302+ let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]
303+ ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
304+ }
305+ }
306+
307+
308+
309+@Callable(i)
310+func withdraw (gameId,rsaSignCrypted) = {
311+ let rsaSign = fromBase58String(rsaSignCrypted)
312+ let gameDataList = ExtractGameDataList(gameId)
313+ let gameState = gameDataList[IdxGameState]
314+ let playerChoice = gameDataList[IdxPlayerChoice]
315+ let startedHeight = parseIntValue(gameDataList[IdxStartedHeight])
316+ let winAmt = parseIntValue(gameDataList[IdxWinAmt])
317+ let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
318+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
319+ let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
320+ let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
321+ if ((gameState != STATESUBMITTED))
322+ then throw("Invalid game state for passed gameId")
323+ else if (winByTimeout)
324+ then {
325+ let randStr = getWinStr(playerChoice)
326+ let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
327+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
328+ }
329+ else {
330+ let randInt = GenerateRandInt(gameId, rsaSign)
331+ let randStr = RandToStr(randInt)
332+ if (IsPlayerWin(playerChoice, randStr))
333+ then {
334+ let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
335+ WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
336+ }
337+ else {
338+ let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
339+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
340+ }
341+ }
342+ }
343+
344+

github/deemru/w8io/169f3d6 
24.65 ms