tx · FTzAuFynzDmv6cyWD43Ltj9P6NRDwHz5A3DgsazCHxdU

3N7Jku8rAaHYxHVX9483o7oZuvAKdgHbBFb:  -0.01500000 Waves

2020.04.29 19:54 [976325] smart account 3N7Jku8rAaHYxHVX9483o7oZuvAKdgHbBFb > SELF 0.00000000 Waves

{ "type": 13, "id": "FTzAuFynzDmv6cyWD43Ltj9P6NRDwHz5A3DgsazCHxdU", "fee": 1500000, "feeAssetId": null, "timestamp": 1588179392188, "version": 1, "sender": "3N7Jku8rAaHYxHVX9483o7oZuvAKdgHbBFb", "senderPublicKey": "45ujwJAa1HCRfuaSjMdn4m42zMcYvyQz1tonMixrLmam", "proofs": [ "46ArCwDg7v1EdErWkzudXM3iSjR9XhZPXs3CavPJwXeEUWQ9w77zBCcAevZu2mJDwJF9Ei9j6ZgjCfnxgY8vijUj" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEIEgQKAggCAAAASAAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABj2Jhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW1wdVhjSS9vNHBJQjV5d3Y5RE9PR2FwVEJVd1JWbE0vNitINmhGZWxPWHRrcndZL1lJdG1QeEVEcHo3ckFlclFQUWU5dERQRWFBdi9HbmxFenR5Yk9GWGd1OUR6RGU4WW9NUkQxdmFrZ29BY29nbWJZNThRRDZLTWo1SGtvVmoveVROSWM5c3pqNXFoSWxyQWRtYjNLTEw2aFFVN3k4K0pqNjlCV1ZQc2FRZ2tzcFNkZVl0YjF0SFFjN3Q5NW43T1o1NnIyQTdHMytiUWY2blNNa1BrQWhJckVwYkNtNThvaUdCY3pkVGQvTHFGU1ZvdFpzYkw3WWg2U0hMZm5IZUQrUWdjZkpybmFtOE9ITUdKRUpUUlhqSUxlSEdqbFJDUDhvVnBpb0hyeTFTMnhQeDVzVnpJbTJNTStDelllbkFHbG8wajI2YXRCaGlVTG9UdWx3RDNwUUlEQVFBQgAAAAAGU0VSVkVSCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNONEFpYjVpdWJXaUdNemRUaDZ3V2lWRFZibzMyb2VWVW1IAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABDgAAAAAAZXQVZFU0QAAAAAAAX14QAAAAAABVVTRE5EAAAAAAAAD0JAAAAAAAhERUNJTUFMUwkABEwAAAACBQAAAAZXQVZFU0QJAARMAAAAAgUAAAAFVVNETkQFAAAAA25pbAAAAAAGQVNTRVRTCQAETAAAAAIFAAAABHVuaXQJAARMAAAAAgkAAlkAAAABAgAAACwzS0ZYQkdHTENqQTVaMkR1VzREcTlmRERySGpKSlAxWkVrYW9halN6dUtzQwUAAAADbmlsAAAAAApDT01NSVNTSU9OCQAETAAAAAIJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAAZXQVZFU0QAAAAAAAAAA+gJAARMAAAAAgkAAGgAAAACCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAFVVNETkQAAAAAAAAA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YXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPR0FNRVNDT1VOVEVSS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA251bQUAAAAHJG1hdGNoMAUAAAADbnVtAAAAAAAAAAAACQAAZAAAAAIFAAAAB2dhbWVOdW0AAAAAAAAAAAEBAAAAFWV4dHJhY3RSZXNlcnZlZEFtb3VudAAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAFWluY3JlYXNlUmVzZXJ2ZUFtb3VudAAAAAIAAAAJd2luQW1vdW50AAAAB2Fzc2V0SWQEAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAZAAAAAIJAQAAAAhnZXRJbnRPcgAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkFAAAAB2Fzc2V0SWQAAAAAAAAAAAAFAAAACXdpbkFtb3VudAMJAABmAAAAAgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzCQAAAgAAAAECAAAAVEluc3VmZmljaWVudCBmdW5kcyBvbiBEaWNlIFJvbGxlciBhY2NvdW50LiBUcmFuc2FjdGlvbiB3YXMgcmVqZWN0ZWQgZm9yIHlvdXIgc2FmZXR5LgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQBAAAAFmRlY3JlYXNlUmVzZXJ2ZWRBbW91bnQAAAADAAAABmdhbWVJZAAAAAdhc3NldElkAAAACXdpbkFtb3VudAMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAAAdhc3NldElkAAAAAAAAAAAABQAAAAl3aW5BbW91bnQJAAACAAAAAQIAAABCSW52YWxpZCBEaWNlIFJvbGxlciBhY2NvdW50IHN0YXRlIC0gcmVzZXJ2ZWQgYW1vdW50IGlzIGxlc3MgdGhh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ByRtYXRjaDACAAAABlN0cmluZwQAAAADc3RyBQAAAAckbWF0Y2gwBQAAAANzdHIJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABkdhbWU6IAUAAAAGZ2FtZUlkAgAAAAsgbm90IGZvdW5kLgIAAAABXwEAAAAMd2luU2NyaXB0U2V0AAAABwAAAAZnYW1lSWQAAAANcGxheWVyQWRkcmVzcwAAAAl3aW5BbW91bnQAAAAHYXNzZXRJZAAAAA5uZXdHYW1lRGF0YVN0cgAAAAx3aW5CeVRpbWVvdXQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADndTZXRDb21tb25EYXRhCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwEAAAADnRTZXRDb21tb25EYXRhCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXBsYXllckFkZHJlc3MFAAAACXdpbkFtb3VudAkAAZEAAAACBQAAAAZBU1NFVFMFAAAAB2Fzc2V0SWQFAAAAA25pbAMFAAAADHdpbkJ5VGltZW91dAQAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkAASwAAAACBQAAAA5uZXdHYW1lRGF0YVN0cgIAAAAIX1RJTUVPVVQEAAAACGdhbWVEYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAABZuZXdHYW1lRGF0YVN0ckFkanVzdGVkCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACGdhbWVEYXRhBQAAAA53U2V0Q29tbW9uRGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOdFNldENvbW1vbkRhdGEAAAACAAAAAWkBAAAAA2JldAAAAAEAAAAMcGxheWVyQ2hvaWNlBAAAAAZnYW1lSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAMJAAAAAAAAAggFAAAAAWkAAAAHcGF5bWVudAUAAAAEdW5pdAkAAAIAAAABAgAAAApObyBwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAlCZXQgZm9yOiAFAAAABmdhbWVJZAIAAAASIHdhcyBhbHJlYWR5IG1hZGUuBAAAAAFwCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAB2Fzc2V0SWQJAQAAABV2YWxpZGF0ZUFuZEdldEFzc2V0SWQAAAABCAUAAAABcAAAAAdhc3NldElkBAAAAApjb21taXNzaW9uCQEAAAANZ2V0Q29tbWlzc2lvbgAAAAEFAAAAB2Fzc2V0SWQEAAAACXdpbkFtb3VudAkBAAAAGnZhbGlkYXRlQmV0QW5kR2V0V2luQW1vdW50AAAAAwgFAAAAAXAAAAAGYW1vdW50BQAAAAdhc3NldElkBQAAAAxwbGF5ZXJDaG9pY2UEAAAADnBsYXllclB1YktleTU4CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAIZ2FtZURhdGEJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAADlNUQVRFU1VCTUlUVEVEBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAAZoZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAIAAAAACQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAkBAAAAFWluY3JlYXNlUmVzZXJ2ZUFtb3VudAAAAAIFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMaW5jcmVtZW50SW50AAAAAQUAAAAPR0FNRVNDT1VOVEVSS0VZCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAACGdhbWVEYXRhBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGU0VSVkVSBQAAAApjb21taXNzaW9uCAUAAAABcAAAAAdhc3NldElkBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAhnYW1lRGF0YQkBAAAAD2V4dHJhY3RHYW1lRGF0YQAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAPSWR4UGxheWVyQ2hvaWNlBAAAAA1zdGFydGVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEElkeFN0YXJ0ZWRIZWlnaHQEAAAACXdpbkFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhXaW5BbW91bnQEAAAAB2Fzc2V0SWQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAKSWR4QXNzZXRJZAQAAAAOcGxheWVyUHViS2V5NTgJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAAAx3aW5CeVRpbWVvdXQJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADXN0YXJ0ZWRIZWlnaHQFAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUEAAAAEWRlY3JlYXNlZFJlc2VydmVzCQEAAAAWZGVjcmVhc2VSZXNlcnZlZEFtb3VudAAAAAMFAAAABmdhbWVJZAUAAAAHYXNzZXRJZAUAAAAJd2luQW1vdW50AwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDBQAAAAx3aW5CeVRpbWVvdXQEAAAAB3JhbmRTdHIFAAAADHBsYXllckNob2ljZQQAAAAObmV3R2FtZURhdGFTdHIJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAAB3JhbmRTdHIJAQAAAAx3aW5TY3JpcHRTZXQAAAAHBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAABHJhbmQJAQAAAA9nZW5lcmF0ZVJhbmRJbnQAAAACBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24EAAAAB3JhbmRTdHIJAQAAAAlyYW5kVG9TdHIAAAABBQAAAARyYW5kAwkBAAAAC2lzUGxheWVyV2luAAAAAgUAAAAMcGxheWVyQ2hvaWNlBQAAAARyYW5kBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAADmZvcm1hdEdhbWVEYXRhAAAABwUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAHcmFuZFN0cgkBAAAADHdpblNjcmlwdFNldAAAAAcFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAObmV3R2FtZURhdGFTdHIJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAACVNUQVRFTE9TVAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAEAAAAB2Fzc2V0SWQJAQAAABV2YWxpZGF0ZUFuZEdldEFzc2V0SWQAAAABCAUAAAADdHR4AAAAB2Fzc2V0SWQJAABnAAAAAgkAAGUAAAACCQAD6wAAAAIFAAAABHRoaXMIBQAAAAN0dHgAAAAHYXNzZXRJZAgFAAAAA3R0eAAAAAZhbW91bnQJAQAAAAhnZXRJbnRPcgAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkFAAAAB2Fzc2V0SWQAAAAAAAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAANzdHgFAAAAByRtYXRjaDADCQAAAAAAAAIJAQAAAAhnZXRJbnRPcgAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAgkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAcHB/t5mFg=", "chainId": 84, "height": 976325, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpuXcI/o4pIB5ywv9DOOGapTBUwRVlM/6+H6hFelOXtkrwY/YItmPxEDpz7rAerQPQe9tDPEaAv/GnlEztybOFXgu9DzDe8YoMRD1vakgoAcogmbY58QD6KMj5HkoVj/yTNIc9szj5qhIlrAdmb3KLL6hQU7y8+Jj69BWVPsaQgkspSdeYtb1tHQc7t95n7OZ56r2A7G3+bQf6nSMkPkAhIrEpbCm58oiGBczdTd/LqFSVotZsbL7Yh6SHLfnHeD+QgcfJrnam8OHMGJEJTRXjILeHGjlRCP8oVpioHry1S2xPx5sVzIm2MM+CzYenAGlo0j26atBhiULoTulwD3pQIDAQAB")
5+
6+let SERVER = addressFromStringValue("3N4Aib5iubWiGMzdTh6wWiVDVbo32oeVUmH")
7+
8+let RANDORACLETIMEFRAME = 4320
9+
10+let WAVESD = 100000000
11+
12+let USDND = 1000000
13+
14+let DECIMALS = [WAVESD, USDND]
15+
16+let ASSETS = [unit, fromBase58String("3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC")]
17+
18+let COMMISSION = [((5 * WAVESD) / 1000), (((5 * USDND) / 1000) * 10)]
19+
20+func getCommission (assetId) = COMMISSION[assetId]
21+
22+
23+func getBetMin (assetId) = ((1 * DECIMALS[assetId]) / 2)
24+
25+
26+func getBetMax (assetId) = (6 * DECIMALS[assetId])
27+
28+
29+func getBetStep (assetId) = ((1 * DECIMALS[assetId]) / 10)
30+
31+
32+func getIntOr (key,default) = if (isDefined(getInteger(this, key)))
33+ then getIntegerValue(this, key)
34+ else default
35+
36+
37+func setInt (key,value) = DataEntry(key, value)
38+
39+
40+func incrementInt (key) = setInt(key, (getIntOr(key, -1) + 1))
41+
42+
43+func changeInt (key,by) = setInt(key, (getIntOr(key, 0) + by))
44+
45+
46+let PRECISION = 10000
47+
48+let R1MAX = 96
49+
50+let R1MIN = 94
51+
52+let R1K = 9860
53+
54+let R2MAX = 93
55+
56+let R2MIN = 87
57+
58+let R2K = 9800
59+
60+let R3MAX = 86
61+
62+let R3MIN = 86
63+
64+let R3K = 9750
65+
66+let R4MAX = 85
67+
68+let R4MIN = 84
69+
70+let R4K = 9670
71+
72+let R5MAX = 83
73+
74+let R5MIN = 83
75+
76+let R5K = 9630
77+
78+let R6MAX = 82
79+
80+let R6MIN = 67
81+
82+let R6K = 9610
83+
84+let R7MAX = 66
85+
86+let R7MIN = 56
87+
88+let R7K = 9560
89+
90+let R8MAX = 55
91+
92+let R8MIN = 38
93+
94+let R8K = 9500
95+
96+let R9MAX = 37
97+
98+let R9MIN = 3
99+
100+let R9K = 9290
101+
102+let R10MAX = 2
103+
104+let R10MIN = 1
105+
106+let R10K = 9860
107+
108+let IdxGameState = 0
109+
110+let IdxPlayerChoice = 1
111+
112+let IdxPlayerPubKey58 = 2
113+
114+let IdxStartedHeight = 3
115+
116+let IdxWinAmount = 4
117+
118+let IdxAssetId = 5
119+
120+let RESERVATIONKEY = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"]
121+
122+let GAMESCOUNTERKEY = "$GAME_NUM"
123+
124+let MAXBALANCEKEY = "$MAX_BALANCE"
125+
126+let STATESUBMITTED = "SUBMITTED"
127+
128+let STATEWON = "WON"
129+
130+let STATELOST = "LOST"
131+
132+func incrementGameNum () = {
133+ let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
134+ case num: Int =>
135+ num
136+ case _ =>
137+ 0
138+ }
139+ (gameNum + 1)
140+ }
141+
142+
143+func extractReservedAmount (assetId) = match getInteger(this, RESERVATIONKEY[assetId]) {
144+ case a: Int =>
145+ a
146+ case _ =>
147+ 0
148+}
149+
150+
151+func increaseReserveAmount (winAmount,assetId) = {
152+ let newReservedAmount = (getIntOr(RESERVATIONKEY[assetId], 0) + winAmount)
153+ if ((newReservedAmount > wavesBalance(this)))
154+ then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.")
155+ else newReservedAmount
156+ }
157+
158+
159+func decreaseReservedAmount (gameId,assetId,winAmount) = if ((0 > (getIntOr(RESERVATIONKEY[assetId], 0) - winAmount)))
160+ then throw("Invalid Dice Roller account state - reserved amount is less than 0")
161+ else changeInt(RESERVATIONKEY[assetId], -(winAmount))
162+
163+
164+func validateAndGetAssetId (assetId) = if ((assetId == ASSETS[0]))
165+ then 0
166+ else if ((assetId == ASSETS[1]))
167+ then 1
168+ else throw("Invalid payment asset")
169+
170+
171+func validateBetAndGetWinAmount (betAmount,assetId,playerChoice) = {
172+ let bet = (betAmount - getCommission(assetId))
173+ let BETMIN = getBetMin(assetId)
174+ let BETMAX = getBetMax(assetId)
175+ let BETSTEP = getBetStep(assetId)
176+ let betAmountValid = if (if ((bet >= BETMIN))
177+ then (BETMAX >= bet)
178+ else false)
179+ then ((bet % BETSTEP) == 0)
180+ else false
181+ if (betAmountValid)
182+ then {
183+ let playerChoiceInt = parseIntValue(playerChoice)
184+ if (if ((playerChoiceInt >= 1))
185+ then (96 >= playerChoiceInt)
186+ else false)
187+ then {
188+ let RKxPrecision = if (if ((R1MAX >= playerChoiceInt))
189+ then (playerChoiceInt >= R1MIN)
190+ else false)
191+ then R1K
192+ else if (if ((R2MAX >= playerChoiceInt))
193+ then (playerChoiceInt >= R2MIN)
194+ else false)
195+ then R2K
196+ else if (if ((R3MAX >= playerChoiceInt))
197+ then (playerChoiceInt >= R3MIN)
198+ else false)
199+ then R3K
200+ else if (if ((R4MAX >= playerChoiceInt))
201+ then (playerChoiceInt >= R4MIN)
202+ else false)
203+ then R4K
204+ else if (if ((R5MAX >= playerChoiceInt))
205+ then (playerChoiceInt >= R5MIN)
206+ else false)
207+ then R5K
208+ else if (if ((R6MAX >= playerChoiceInt))
209+ then (playerChoiceInt >= R6MIN)
210+ else false)
211+ then R6K
212+ else if (if ((R7MAX >= playerChoiceInt))
213+ then (playerChoiceInt >= R7MIN)
214+ else false)
215+ then R7K
216+ else if (if ((R8MAX >= playerChoiceInt))
217+ then (playerChoiceInt >= R8MIN)
218+ else false)
219+ then R8K
220+ else if (if ((R9MAX >= playerChoiceInt))
221+ then (playerChoiceInt >= R9MIN)
222+ else false)
223+ then R9K
224+ else if (if ((R10MAX >= playerChoiceInt))
225+ then (playerChoiceInt >= R10MIN)
226+ else false)
227+ then R10K
228+ else throw(("Couldn't define range: playerChoice=" + playerChoice))
229+ ((((100 * RKxPrecision) / playerChoiceInt) * bet) / PRECISION)
230+ }
231+ else throw("Player choice is out of the condition below: 1 <= choice <= 96")
232+ }
233+ else throw(((((("Bet amount is not in range: minBet=" + toString(BETMIN)) + " maxBet=") + toString(BETMAX)) + " betStep=") + toString(BETSTEP)))
234+ }
235+
236+
237+func randToStr (r) = if (if ((r >= 1))
238+ then (100 >= r)
239+ else false)
240+ then toString(r)
241+ else throw(("Unsupported r parameter passed: expected=[1,...,100] actual=" + toString(r)))
242+
243+
244+func generateRandInt (gameId,rsaSign) = {
245+ let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
246+ if (rsaSigValid)
247+ then {
248+ let rand = (toInt(sha256(rsaSign)) % 100)
249+ if ((0 > rand))
250+ then ((-1 * rand) + 1)
251+ else (rand + 1)
252+ }
253+ else throw("Invalid RSA signature")
254+ }
255+
256+
257+func isPlayerWin (playerChoice,rand) = {
258+ let playerChoiceInt = parseIntValue(playerChoice)
259+ (playerChoiceInt >= rand)
260+ }
261+
262+
263+func formatGameDataParam (p) = {
264+ let s = size(p)
265+ if ((s == 0))
266+ then throw("Parameter size must be greater then 0")
267+ else if ((s > 99))
268+ then throw("Parameter size must be less then 100")
269+ else if ((10 > s))
270+ then (("0" + toString(s)) + p)
271+ else (toString(s) + p)
272+ }
273+
274+
275+func formatGameData (gameState,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = (((((((((((gameState + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(startedHeight)) + "_") + toString(winAmount)) + "_") + toString(assetId)) + (if ((randOrEmpty == ""))
276+ then ""
277+ else ("_" + randOrEmpty)))
278+
279+
280+func extractGameData (gameId) = split(match getString(this, gameId) {
281+ case str: String =>
282+ str
283+ case _ =>
284+ throw((("Game: " + gameId) + " not found."))
285+}, "_")
286+
287+
288+func winScriptSet (gameId,playerAddress,winAmount,assetId,newGameDataStr,winByTimeout,decreasedReserves) = {
289+ let wSetCommonData = [decreasedReserves]
290+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmount, ASSETS[assetId])]
291+ if (winByTimeout)
292+ then {
293+ let newGameDataStrAdjusted = (newGameDataStr + "_TIMEOUT")
294+ let gameData = DataEntry(gameId, newGameDataStrAdjusted)
295+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
296+ }
297+ else {
298+ let gameData = DataEntry(gameId, newGameDataStr)
299+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
300+ }
301+ }
302+
303+
304+@Callable(i)
305+func bet (playerChoice) = {
306+ let gameId = toBase58String(i.transactionId)
307+ if ((i.payment == unit))
308+ then throw("No payment")
309+ else if (isDefined(getString(this, gameId)))
310+ then throw((("Bet for: " + gameId) + " was already made."))
311+ else {
312+ let p = extract(i.payment)
313+ let assetId = validateAndGetAssetId(p.assetId)
314+ let commission = getCommission(assetId)
315+ let winAmount = validateBetAndGetWinAmount(p.amount, assetId, playerChoice)
316+ let playerPubKey58 = toBase58String(i.callerPublicKey)
317+ let gameData = formatGameData(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmount, assetId, "")
318+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY[assetId], increaseReserveAmount(winAmount, assetId)), incrementInt(GAMESCOUNTERKEY), DataEntry(gameId, gameData)]), TransferSet([ScriptTransfer(SERVER, commission, p.assetId)]))
319+ }
320+ }
321+
322+
323+
324+@Callable(i)
325+func withdraw (gameId,rsaSign) = {
326+ let gameData = extractGameData(gameId)
327+ let gameState = gameData[IdxGameState]
328+ let playerChoice = gameData[IdxPlayerChoice]
329+ let startedHeight = parseIntValue(gameData[IdxStartedHeight])
330+ let winAmount = parseIntValue(gameData[IdxWinAmount])
331+ let assetId = parseIntValue(gameData[IdxAssetId])
332+ let playerPubKey58 = gameData[IdxPlayerPubKey58]
333+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
334+ let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
335+ let decreasedReserves = decreaseReservedAmount(gameId, assetId, winAmount)
336+ if ((gameState != STATESUBMITTED))
337+ then throw("Invalid game state for passed gameId")
338+ else if (winByTimeout)
339+ then {
340+ let randStr = playerChoice
341+ let newGameDataStr = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
342+ winScriptSet(gameId, playerAddress, winAmount, assetId, newGameDataStr, winByTimeout, decreasedReserves)
343+ }
344+ else {
345+ let rand = generateRandInt(gameId, rsaSign)
346+ let randStr = randToStr(rand)
347+ if (isPlayerWin(playerChoice, rand))
348+ then {
349+ let newGameDataStr = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
350+ winScriptSet(gameId, playerAddress, winAmount, assetId, newGameDataStr, winByTimeout, decreasedReserves)
351+ }
352+ else {
353+ let newGameDataStr = formatGameData(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
354+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
355+ }
356+ }
357+ }
358+
359+
360+@Verifier(tx)
361+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
362+ then match tx {
363+ case ttx: TransferTransaction =>
364+ let assetId = validateAndGetAssetId(ttx.assetId)
365+ ((assetBalance(this, ttx.assetId) - ttx.amount) >= getIntOr(RESERVATIONKEY[assetId], 0))
366+ case stx: SetScriptTransaction =>
367+ if ((getIntOr(RESERVATIONKEY[0], 0) == 0))
368+ then (getIntOr(RESERVATIONKEY[1], 0) == 0)
369+ else false
370+ case _ =>
371+ false
372+ }
373+ else false
374+

github/deemru/w8io/3ef1775 
32.73 ms