tx · jgsmQ5vM8GiZ1m4o9nekGfvd6K5f8Bb2mebEG9S4d5y

3MvsimPvkKL2rJr3Uer4YKDB19EGWGjVyth:  -0.01400000 Waves

2020.04.10 12:40 [948075] smart account 3MvsimPvkKL2rJr3Uer4YKDB19EGWGjVyth > SELF 0.00000000 Waves

{ "type": 13, "id": "jgsmQ5vM8GiZ1m4o9nekGfvd6K5f8Bb2mebEG9S4d5y", "fee": 1400000, "feeAssetId": null, "timestamp": 1586511631612, "version": 1, "sender": "3MvsimPvkKL2rJr3Uer4YKDB19EGWGjVyth", "senderPublicKey": "6W3Tc8hMWKD4AMsXDKNFqB7WvHKQiESNTsencADCHH2o", "proofs": [ "4vrr7xxAyr8dFcXAWfpTe2zyskzRKTX9pw7mUiiv5YTmu1B2eRgY5JKPP67TCq8qf9sHaHCoSvH9rRnsdQ683uEZ" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEIEgQKAggCAAAAKQAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABj2Jhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW1wdVhjSS9vNHBJQjV5d3Y5RE9PR2FwVEJVd1JWbE0vNitINmhGZWxPWHRrcndZL1lJdG1QeEVEcHo3ckFlclFQUWU5dERQRWFBdi9HbmxFenR5Yk9GWGd1OUR6RGU4WW9NUkQxdmFrZ29BY29nbWJZNThRRDZLTWo1SGtvVmoveVROSWM5c3pqNXFoSWxyQWRtYjNLTEw2aFFVN3k4K0pqNjlCV1ZQc2FRZ2tzcFNkZVl0YjF0SFFjN3Q5NW43T1o1NnIyQTdHMytiUWY2blNNa1BrQWhJckVwYkNtNThvaUdCY3pkVGQvTHFGU1ZvdFpzYkw3WWg2U0hMZm5IZUQrUWdjZkpybmFtOE9ITUdKRUpUUlhqSUxlSEdqbFJDUDhvVnBpb0hyeTFTMnhQeDVzVnpJbTJNTStDelllbkFHbG8wajI2YXRCaGlVTG9UdWx3RDNwUUlEQVFBQgAAAAAGU0VSVkVSCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNOQ2lHMjhMbVd5VGlnV0cxM0U1UW52ZEhCc1pGWVhTUzJqAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABDgAAAAAA5NQVhCQUxBTkNFRElGRgAAAAAAO5rKAAAAAAAEQkVUMQAAAAAAAAAAAQAAAAAEQkVUMgAAAAAAAAAAAgAAAAAEQkVUNAAAAAAAAAAABAAAAAAEQkVUOAAAAAAAAAAACAAAAAAFQkVUMTQAAAAAAAAAAA4AAAAABEJFVFMJAARMAAAAAgUAAAAEQkVUMQkABEwAAAACBQAAAARCRVQyCQAETAAAAAIFAAAABEJFVDQJAARMAAAAAgUAAAAEQkVUOAkABEwAAAACBQAAAAVCRVQxNAUAAAADbmlsAAAAAAZXQVZFU0QAAAAAAAX14QAAAAAABVVTRE5EAAAAAAAAD0JAAAAAAAhERUNJTUFMUwkABEwAAAACBQAAAAZXQVZFU0QJAARMAAAAAgUAAAAFVVNETkQFAAAAA25pbAAAAAAG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SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAADc3RyBQAAAAckbWF0Y2gwBQAAAANzdHIJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABkdhbWU6IAUAAAAGZ2FtZUlkAgAAAAsgbm90IGZvdW5kLgIAAAABXwEAAAAMd2luU2NyaXB0U2V0AAAABwAAAAZnYW1lSWQAAAANcGxheWVyQWRkcmVzcwAAAAl3aW5BbW91bnQAAAAHYXNzZXRJZAAAAA5uZXdHYW1lRGF0YVN0cgAAAAx3aW5CeVRpbWVvdXQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADndTZXRDb21tb25EYXRhCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwEAAAADnRTZXRDb21tb25EYXRhCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXBsYXllckFkZHJlc3MFAAAACXdpbkFtb3VudAkAAZEAAAACBQAAAAZBU1NFVFMFAAAAB2Fzc2V0SWQFAAAAA25pbAMFAAAADHdpbkJ5VGltZW91dAQAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkAASwAAAACBQAAAA5uZXdHYW1lRGF0YVN0cgIAAAAIX1RJTUVPVVQEAAAACGdhbWVEYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAABZuZXdHYW1lRGF0YVN0ckFkanVzdGVkCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACGdhbWVEYXRhBQAAAA53U2V0Q29tbW9uRGF0YQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAAOdFNldENvbW1vbkRhdGEAAAACAAAAAWkBAAAAA2JldAAAAAEAAAAMcGxheWVyQ2hvaWNlBAAAAAZnYW1lSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAMJAAAAAAAAAggFAAAAAWkAAAAHcGF5bWVudAUAAAAEdW5pdAkAAAIAAAABAgAAAApObyBwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAlCZXQgZm9yOiAFAAAABmdhbWVJZAIAAAASIHdhcyBhbHJlYWR5IG1hZGUuBAAAAAFwCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAB2Fzc2V0SWQJAQAAABV2YWxpZGF0ZUFuZEdldEFzc2V0SWQAAAABCAUAAAABcAAAAAdhc3NldElkBAAAAApjb21taXNzaW9uCQEAAAANZ2V0Q29tbWlzc2lvbgAAAAEFAAAAB2Fzc2V0SWQEAAAACXdpbkFtb3VudAkBAAAAGnZhbGlkYXRlQmV0QW5kR2V0V2luQW1vdW50AAAAAwgFAAAAAXAAAAAGYW1vdW50BQAAAAdhc3NldElkBQAAAAxwbGF5ZXJDaG9pY2UEAAAACHR4SWRVc2VkCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAZnYW1lSWQEAAAADnBsYXllclB1YktleTU4CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAALZ2FtZURhdGFTdHIJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAADlNUQVRFU1VCTUlUVEVEBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAAZoZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAIAAAAACQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAkBAAAAFWluY3JlYXNlUmVzZXJ2ZUFtb3VudAAAAAIFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMaW5jcmVtZW50SW50AAAAAQUAAAAPR0FNRVNDT1VOVEVSS0VZCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAAC2dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGU0VSVkVSBQAAAApjb21taXNzaW9uBQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAhnYW1lRGF0YQkBAAAAD2V4dHJhY3RHYW1lRGF0YQAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAPSWR4UGxheWVyQ2hvaWNlBAAAAA1zdGFydGVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEElkeFN0YXJ0ZWRIZWlnaHQEAAAACXdpbkFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhXaW5BbW91bnQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAACGdhbWVEYXRhBQAAABFJZHhQbGF5ZXJQdWJLZXk1OAQAAAAHYXNzZXRJZAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAApJZHhBc3NldElkBAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAAAx3aW5CeVRpbWVvdXQJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADXN0YXJ0ZWRIZWlnaHQFAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUEAAAAEWRlY3JlYXNlZFJlc2VydmVzCQEAAAAWZGVjcmVhc2VSZXNlcnZlZEFtb3VudAAAAAMFAAAABmdhbWVJZAUAAAAHYXNzZXRJZAUAAAAJd2luQW1vdW50AwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDBQAAAAx3aW5CeVRpbWVvdXQEAAAAB3JhbmRTdHIJAAEvAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAADmZvcm1hdEdhbWVEYXRhAAAABwUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAHcmFuZFN0cgkBAAAADHdpblNjcmlwdFNldAAAAAcFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAHcmFuZFN0cgkBAAAAD2dlbmVyYXRlUmFuZEludAAAAAIFAAAABmdhbWVJZAUAAAAHcnNhU2lnbgMJAQAAAAtpc1BsYXllcldpbgAAAAIFAAAADHBsYXllckNob2ljZQUAAAAHcmFuZFN0cgQAAAAObmV3R2FtZURhdGFTdHIJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAAB3JhbmRTdHIJAQAAAAx3aW5TY3JpcHRTZXQAAAAHBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAAOZm9ybWF0R2FtZURhdGEAAAAHBQAAAAlTVEFURUxPU1QFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAHcmFuZFN0cgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgkABEwAAAACBQAAABFkZWNyZWFzZWRSZXNlcnZlcwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADdHR4BQAAAAckbWF0Y2gwBAAAAAdhc3NldElkCQEAAAAVdmFsaWRhdGVBbmRHZXRBc3NldElkAAAAAQgFAAAAA3R0eAAAAAdhc3NldElkCQAAZwAAAAIJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMIBQAAAAN0dHgAAAAGYW1vdW50CQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAAAdhc3NldElkAAAAAAAAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwAwkAAAAAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAIJAQAAAAhnZXRJbnRPcgAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAHBwe9CQQ3", "chainId": 84, "height": 948075, "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("3NCiG28LmWyTigWG13E5QnvdHBsZFYXSS2j")
7+
8+let RANDORACLETIMEFRAME = 4320
9+
10+let MAXBALANCEDIFF = 1000000000
11+
12+let BET1 = 1
13+
14+let BET2 = 2
15+
16+let BET4 = 4
17+
18+let BET8 = 8
19+
20+let BET14 = 14
21+
22+let BETS = [BET1, BET2, BET4, BET8, BET14]
23+
24+let WAVESD = 100000000
25+
26+let USDND = 1000000
27+
28+let DECIMALS = [WAVESD, USDND]
29+
30+let ASSETS = [unit, fromBase58String("3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC")]
31+
32+func getCommission (assetId) = ((5 * DECIMALS[assetId]) / 1000)
33+
34+
35+let RATEMULT = 10000
36+
37+let RATE = 19000
38+
39+let IdxGameState = 0
40+
41+let IdxPlayerChoice = 1
42+
43+let IdxPlayerPubKey58 = 2
44+
45+let IdxStartedHeight = 3
46+
47+let IdxWinAmount = 4
48+
49+let IdxAssetId = 5
50+
51+let RESERVATIONKEY = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"]
52+
53+let GAMESCOUNTERKEY = "$GAME_NUM"
54+
55+let STATESUBMITTED = "SUBMITTED"
56+
57+let STATEWON = "WON"
58+
59+let STATELOST = "LOST"
60+
61+func getIntOr (key,default) = if (isDefined(getInteger(this, key)))
62+ then getIntegerValue(this, key)
63+ else default
64+
65+
66+func setInt (key,value) = DataEntry(key, value)
67+
68+
69+func incrementInt (key) = setInt(key, (getIntOr(key, -1) + 1))
70+
71+
72+func changeInt (key,by) = setInt(key, (getIntOr(key, 0) + by))
73+
74+
75+func increaseReserveAmount (winAmount,assetId) = {
76+ let newReservedAmount = (getIntOr(RESERVATIONKEY[assetId], 0) + winAmount)
77+ if ((newReservedAmount > wavesBalance(this)))
78+ then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.")
79+ else newReservedAmount
80+ }
81+
82+
83+func decreaseReservedAmount (gameId,assetId,winAmount) = if ((0 > (getIntOr(RESERVATIONKEY[assetId], 0) - winAmount)))
84+ then throw("Invalid Dice Roller account state - reserved amount is less than 0")
85+ else changeInt(RESERVATIONKEY[assetId], -(winAmount))
86+
87+
88+func validateAndGetAssetId (assetId) = if ((assetId == ASSETS[0]))
89+ then 0
90+ else if ((assetId == ASSETS[1]))
91+ then 1
92+ else throw("Invalid payment asset")
93+
94+
95+func validateBetAndGetWinAmount (betAmount,assetId,playerChoice) = {
96+ let dicesCount = size(playerChoice)
97+ let commission = getCommission(assetId)
98+ func checkAmount (a,x) = if (a)
99+ then true
100+ else (betAmount == ((x * DECIMALS[assetId]) + commission))
101+
102+ if (!({
103+ let $list44584491 = BETS
104+ let $size44584491 = size($list44584491)
105+ let $acc044584491 = false
106+ if (($size44584491 == 0))
107+ then $acc044584491
108+ else {
109+ let $acc144584491 = checkAmount($acc044584491, $list44584491[0])
110+ if (($size44584491 == 1))
111+ then $acc144584491
112+ else {
113+ let $acc244584491 = checkAmount($acc144584491, $list44584491[1])
114+ if (($size44584491 == 2))
115+ then $acc244584491
116+ else {
117+ let $acc344584491 = checkAmount($acc244584491, $list44584491[2])
118+ if (($size44584491 == 3))
119+ then $acc344584491
120+ else {
121+ let $acc444584491 = checkAmount($acc344584491, $list44584491[3])
122+ if (($size44584491 == 4))
123+ then $acc444584491
124+ else {
125+ let $acc544584491 = checkAmount($acc444584491, $list44584491[4])
126+ if (($size44584491 == 5))
127+ then $acc544584491
128+ else {
129+ let $acc644584491 = checkAmount($acc544584491, $list44584491[5])
130+ throw("List size exceed 5")
131+ }
132+ }
133+ }
134+ }
135+ }
136+ }
137+ }))
138+ then throw("Bet amount is not valid")
139+ else if ((parseInt(playerChoice) == unit))
140+ then throw("Invalid player's choice")
141+ else if (if ((1 > dicesCount))
142+ then true
143+ else (dicesCount > 5))
144+ then throw("Invalid dices count in player's choice")
145+ else {
146+ let bet = (betAmount - commission)
147+ ((bet * RATE) / RATEMULT)
148+ }
149+ }
150+
151+
152+func generateRandInt (gameId,rsaSign) = {
153+ let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
154+ if (!(rsaSigValid))
155+ then throw("Invalid RSA signature")
156+ else {
157+ let rand = (toInt(sha256(rsaSign)) % 2)
158+ let result = if ((0 > rand))
159+ then (-1 * rand)
160+ else rand
161+ toString(result)
162+ }
163+ }
164+
165+
166+func isPlayerWin (playerChoice,randStr) = {
167+ let s = size(playerChoice)
168+ if ((s == 1))
169+ then (playerChoice == randStr)
170+ else false
171+ }
172+
173+
174+func formatGameData (gameState,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = (((((((((((gameState + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(startedHeight)) + "_") + toString(winAmount)) + "_") + toString(assetId)) + (if ((randOrEmpty == ""))
175+ then ""
176+ else ("_" + randOrEmpty)))
177+
178+
179+func extractGameData (gameId) = split(match getString(this, gameId) {
180+ case str: String =>
181+ str
182+ case _ =>
183+ throw((("Game: " + gameId) + " not found."))
184+}, "_")
185+
186+
187+func winScriptSet (gameId,playerAddress,winAmount,assetId,newGameDataStr,winByTimeout,decreasedReserves) = {
188+ let wSetCommonData = [decreasedReserves]
189+ let tSetCommonData = [ScriptTransfer(playerAddress, winAmount, ASSETS[assetId])]
190+ if (winByTimeout)
191+ then {
192+ let newGameDataStrAdjusted = (newGameDataStr + "_TIMEOUT")
193+ let gameData = DataEntry(gameId, newGameDataStrAdjusted)
194+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
195+ }
196+ else {
197+ let gameData = DataEntry(gameId, newGameDataStr)
198+ ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
199+ }
200+ }
201+
202+
203+@Callable(i)
204+func bet (playerChoice) = {
205+ let gameId = toBase58String(i.transactionId)
206+ if ((i.payment == unit))
207+ then throw("No payment")
208+ else if (isDefined(getString(this, gameId)))
209+ then throw((("Bet for: " + gameId) + " was already made."))
210+ else {
211+ let p = extract(i.payment)
212+ let assetId = validateAndGetAssetId(p.assetId)
213+ let commission = getCommission(assetId)
214+ let winAmount = validateBetAndGetWinAmount(p.amount, assetId, playerChoice)
215+ let txIdUsed = isDefined(getString(this, gameId))
216+ let playerPubKey58 = toBase58String(i.callerPublicKey)
217+ let gameDataStr = formatGameData(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmount, assetId, "")
218+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY[assetId], increaseReserveAmount(winAmount, assetId)), incrementInt(GAMESCOUNTERKEY), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(SERVER, commission, unit)]))
219+ }
220+ }
221+
222+
223+
224+@Callable(i)
225+func withdraw (gameId,rsaSign) = {
226+ let gameData = extractGameData(gameId)
227+ let gameState = gameData[IdxGameState]
228+ let playerChoice = gameData[IdxPlayerChoice]
229+ let startedHeight = parseIntValue(gameData[IdxStartedHeight])
230+ let winAmount = parseIntValue(gameData[IdxWinAmount])
231+ let playerPubKey58 = gameData[IdxPlayerPubKey58]
232+ let assetId = parseIntValue(gameData[IdxAssetId])
233+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
234+ let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
235+ let decreasedReserves = decreaseReservedAmount(gameId, assetId, winAmount)
236+ if ((gameState != STATESUBMITTED))
237+ then throw("Invalid game state for passed gameId")
238+ else if (winByTimeout)
239+ then {
240+ let randStr = take(playerChoice, 1)
241+ let newGameDataStr = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
242+ winScriptSet(gameId, playerAddress, winAmount, assetId, newGameDataStr, winByTimeout, decreasedReserves)
243+ }
244+ else {
245+ let randStr = generateRandInt(gameId, rsaSign)
246+ if (isPlayerWin(playerChoice, randStr))
247+ then {
248+ let newGameDataStr = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
249+ winScriptSet(gameId, playerAddress, winAmount, assetId, newGameDataStr, winByTimeout, decreasedReserves)
250+ }
251+ else {
252+ let newGameDataStr = formatGameData(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
253+ WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
254+ }
255+ }
256+ }
257+
258+
259+@Verifier(tx)
260+func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
261+ then match tx {
262+ case ttx: TransferTransaction =>
263+ let assetId = validateAndGetAssetId(ttx.assetId)
264+ ((wavesBalance(this) - ttx.amount) >= getIntOr(RESERVATIONKEY[assetId], 0))
265+ case stx: SetScriptTransaction =>
266+ if ((getIntOr(RESERVATIONKEY[0], 0) == 0))
267+ then (getIntOr(RESERVATIONKEY[1], 0) == 0)
268+ else false
269+ case _ =>
270+ false
271+ }
272+ else false
273+

github/deemru/w8io/026f985 
24.45 ms