tx · G4NXVLtnvYqYtJAvYtU3vjp6QRtMxKj44ePTLsF5JReT 3NBFHpzVTqcHQB6Zxec1f6N6ZGBWQ4VsBFD: -0.01500000 Waves 2019.09.24 17:36 [690549] smart account 3NBFHpzVTqcHQB6Zxec1f6N6ZGBWQ4VsBFD > SELF 0.00000000 Waves
{ "type": 13, "id": "G4NXVLtnvYqYtJAvYtU3vjp6QRtMxKj44ePTLsF5JReT", "fee": 1500000, "feeAssetId": null, "timestamp": 1569335720526, "version": 1, "sender": "3NBFHpzVTqcHQB6Zxec1f6N6ZGBWQ4VsBFD", "senderPublicKey": "8W9JLTJTfxrJrBNXxngzueBF4vJqeb6p9jFob7wb6QWQ", "proofs": [ "4Aokq8SEc1xL8LSLQDUwRJ72FXwfjLrVXBsbJNUuRYfCaF53bgENhD39mjQkj1DNDm5fUTTx91qJjfCqxA23UTd6" ], "script": "base64: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cmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABCQABkQAAAAIFAAAACGRhdGFMaXN0AAAAAAAAAAABBAAAAAZiZXRBbXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhkYXRhTGlzdAAAAAAAAAAAAgQAAAAHYXNzZXRJZAkAAZEAAAACBQAAAAhkYXRhTGlzdAAAAAAAAAAAAwQAAAAJZ2FtZVN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAQEAAAADWdhbWVUaW1lQ2hlY2sJAABmAAAAAgUAAAANZ2FtZVRpbWVGcmFtZQkAAGUAAAACBQAAAAZoZWlnaHQFAAAACWdhbWVTdGFydAQAAAAKc3RhdGVDaGVjawkAAAAAAAACBQAAAAlnYW1lU3RhdGUFAAAACHN0YXRlQWNjBAAAABJzZXRSZXNlcnZlZEJhbGFuY2UJAQAAABdkZWNyZWFzZVJlc2VydmVkQmFsYW5jZQAAAAIFAAAABmJldEFtdAUAAAAHYXNzZXRJZAQAAAATZHJvcHBlZEVsZW1lbnRzTGlzdAQAAAAIcm9sbDFJbnQJAQAAAAhyc2FUb0ludAAAAAMFAAAABmdhbWVJZAUAAAAIcnNhU2lnbjEFAAAADXJzYVB1YmxpY0tleTEEAAAACHJvbGwySW50CQEAAAAIcnNhVG9JbnQAAAADBQAAAAZnYW1lSWQFAAAACHJzYVNpZ24yBQAAAA1yc2FQdWJsaWNLZXkyBAAAAAhyb2xsM0ludAkBAAAACHJzYVRvSW50AAAAAwUAAAAGZ2FtZUlkBQAAAAhyc2FTaWduMwUAAAANcnNhUHVibGljS2V5MwQAAAAIZWxlbWVudDEJAQAAAAlpbnRUb0VsZW0AAAABBQAAAAhyb2xsMUludAQAAAAIZWxlbWVudDIJAQAAAAlpbnRUb0VsZW0AAAABBQAAAAhyb2xsMkludAQAAAAIZWxlbWVudDMJAQAAAAlpbnRUb0VsZW0AAAABBQAAAAhyb2xsM0ludAkABEwAAAACBQAAAAhlbGVtZW50MQkABEwAAAACBQAAAAhlbGVtZW50MgkABEwAAAACBQAAAAhlbGVtZW50MwUAAAADbmlsBAAAAAZ3aW5BbXQEAAAACnRocmVlRHJ1bXMJAAEsAAAAAgkAASwAAAACCQABkQAAAAIFAAAAE2Ryb3BwZWRFbGVtZW50c0xpc3QAAAAAAAAAAAAJAAGRAAAAAgUAAAATZHJvcHBlZEVsZW1lbnRzTGlzdAAAAAAAAAAAAQkAAZEAAAACBQAAABNkcm9wcGVkRWxlbWVudHNMaXN0AAAAAAAAAAACBAAAAAh0d29EcnVtcwkAASwAAAACCQABkQAAAAIFAAAAE2Ryb3BwZWRFbGVtZW50c0xpc3QAAAAAAAAAAAAJAAGRAAAAAgUAAAATZHJvcHBlZEVsZW1lbnRzTGlzdAAAAAAAAAAAAQQAAAAKbXVsdGlwbGllcgkBAAAAEGRlZmluZU11bHRpcGxpZXIAAAACBQAAAAp0aHJlZURydW1zBQAAAAh0d29EcnVtcwkAAGgAAAACBQAAAAZiZXRBbXQFAAAACm11bHRpcGxpZXIEAAAAEHN0cmluZ0Zvck5ld0RhdGEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAECAAAAAV8JAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAICAAAAAV8JAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAMCAAAAAV8JAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAQEAAAAD2Ryb3BwZWRFbGVtZW50cwkAASwAAAACCQABLAAAAAIJAAGRAAAAAgUAAAATZHJvcHBlZEVsZW1lbnRzTGlzdAAAAAAAAAAAAAkAAZEAAAACBQAAABNkcm9wcGVkRWxlbWVudHNMaXN0AAAAAAAAAAABCQABkQAAAAIFAAAAE2Ryb3BwZWRFbGVtZW50c0xpc3QAAAAAAAAAAAIDBQAAAApzdGF0ZUNoZWNrAwUAAAANZ2FtZVRpbWVDaGVjawMJAAAAAAAAAgUAAAAGd2luQW10AAAAAAAAAAAACQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACXN0YXRlTG9zZQUAAAAQc3RyaW5nRm9yTmV3RGF0YQkAAaQAAAABBQAAAAZ3aW5BbXQFAAAAD2Ryb3BwZWRFbGVtZW50cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACAgAAAAlSZXNlcnZlZF8FAAAAB2Fzc2V0SWQFAAAAEnNldFJlc2VydmVkQmFsYW5jZQUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAhzdGF0ZVdpbgUAAAAQc3RyaW5nRm9yTmV3RGF0YQkAAaQAAAABBQAAAAZ3aW5BbXQFAAAAD2Ryb3BwZWRFbGVtZW50cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACAgAAAAlSZXNlcnZlZF8FAAAAB2Fzc2V0SWQFAAAAEnNldFJlc2VydmVkQmFsYW5jZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAkAAlkAAAABBQAAAAdhc3NldElkBQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQJAAEsAAAAAgUAAAAMc3RhdGVUaW1lb3V0BQAAABBzdHJpbmdGb3JOZXdEYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAICAAAACVJlc2VydmVkXwUAAAAHYXNzZXRJZAUAAAASc2V0UmVzZXJ2ZWRCYWxhbmNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANcGxheWVyQWRkcmVzcwUAAAAGYmV0QW10CQACWQAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAABdHYW1lIHN0YXRlIGlzIGluY29ycmVjdAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAEAAAAFHZhbHVlUmVzZXJ2ZWRCYWxhbmNlCQAEGgAAAAIFAAAABHRoaXMCAAAACFJlc2VydmVkBAAAAA9yZXNlcnZlZEJhbGFuY2UEAAAAByRtYXRjaDEFAAAAFHZhbHVlUmVzZXJ2ZWRCYWxhbmNlAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDEFAAAAAWEAAAAAAAAAAAAEAAAAEGF2YWlsYWJsZUJhbGFuY2UJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMFAAAAD3Jlc2VydmVkQmFsYW5jZQQAAAAPYXZhaWxpYmxlQW1vdW50CQAAZwAAAAIFAAAAEGF2YWlsYWJsZUJhbGFuY2UIBQAAAAN0dHgAAAAGYW1vdW50BAAAAAlzaWduYXR1cmUJAAH0AAAAAwgFAAAAA3R0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAA3R0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAN0dHgAAAAPc2VuZGVyUHVibGljS2V5AwUAAAAPYXZhaWxpYmxlQW1vdW50BQAAAAlzaWduYXR1cmUHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAAEc3N0eAUAAAAHJG1hdGNoMAkAAfQAAAADCAUAAAAEc3N0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAABHNzdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAAEc3N0eAAAAA9zZW5kZXJQdWJsaWNLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAARpc3R4BQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAARpc3R4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAAEaXN0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAARpc3R4AAAAD3NlbmRlclB1YmxpY0tleQfhXblx", "chainId": 84, "height": 690549, "spentComplexity": 0 } View: original | compacted Prev: 95ogVTJ4xVeU254VYDh8G5rqZ9BPnvtfWM1P5MuPowwk Next: G9VyeGTSJB3annR4NbFn3J4YvxigUSsprChZtP4Phr8h Diff:
Old | New | Differences | |
---|---|---|---|
27 | 27 | ||
28 | 28 | let WCT = fromBase58String("WCT") | |
29 | 29 | ||
30 | - | let WavesMinAmt = | |
30 | + | let WavesMinAmt = 10000000 | |
31 | 31 | ||
32 | 32 | let WavesMaxAmt = (WavesMinAmt * 10) | |
33 | 33 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let rsaPublicKey1 = fromBase64String("base64:1") | |
5 | 5 | ||
6 | 6 | let rsaPublicKey2 = fromBase64String("base64:2") | |
7 | 7 | ||
8 | 8 | let rsaPublicKey3 = fromBase64String("base64:3") | |
9 | 9 | ||
10 | 10 | let gameTimeFrame = 1440 | |
11 | 11 | ||
12 | 12 | let stateAcc = "Accepted" | |
13 | 13 | ||
14 | 14 | let stateWin = "Win" | |
15 | 15 | ||
16 | 16 | let stateTimeout = "WinByTimeout" | |
17 | 17 | ||
18 | 18 | let stateLose = "Lose" | |
19 | 19 | ||
20 | 20 | let wBTC = fromBase58String("wBTC") | |
21 | 21 | ||
22 | 22 | let wETH = fromBase58String("wETH") | |
23 | 23 | ||
24 | 24 | let wLTC = fromBase58String("wLTC") | |
25 | 25 | ||
26 | 26 | let VST = fromBase58String("VST") | |
27 | 27 | ||
28 | 28 | let WCT = fromBase58String("WCT") | |
29 | 29 | ||
30 | - | let WavesMinAmt = | |
30 | + | let WavesMinAmt = 10000000 | |
31 | 31 | ||
32 | 32 | let WavesMaxAmt = (WavesMinAmt * 10) | |
33 | 33 | ||
34 | 34 | let BtcMinAmt = 10000 | |
35 | 35 | ||
36 | 36 | let BtcMaxAmt = (BtcMinAmt * 10) | |
37 | 37 | ||
38 | 38 | let EthMinAmt = 1000000 | |
39 | 39 | ||
40 | 40 | let EthMaxAmt = (EthMinAmt * 10) | |
41 | 41 | ||
42 | 42 | let LtcMinAmt = 2000000 | |
43 | 43 | ||
44 | 44 | let LtcMaxAmt = (LtcMinAmt * 10) | |
45 | 45 | ||
46 | 46 | let WctMinAmt = 500000000 | |
47 | 47 | ||
48 | 48 | let WctMaxAmt = (WctMinAmt * 10) | |
49 | 49 | ||
50 | 50 | let VstMinAmt = 500000000 | |
51 | 51 | ||
52 | 52 | let VstMaxAmt = (VstMinAmt * 10) | |
53 | 53 | ||
54 | 54 | func pmtAmtCheck (pmtAssetId,pmtAmt) = if ((pmtAssetId == "WAVES")) | |
55 | 55 | then if (if ((pmtAmt >= WavesMinAmt)) | |
56 | 56 | then (WavesMaxAmt >= pmtAmt) | |
57 | 57 | else false) | |
58 | 58 | then true | |
59 | 59 | else throw("Bet amount is not in range") | |
60 | 60 | else if ((pmtAssetId == "BTC")) | |
61 | 61 | then if (if ((pmtAmt >= BtcMinAmt)) | |
62 | 62 | then (BtcMaxAmt >= pmtAmt) | |
63 | 63 | else false) | |
64 | 64 | then true | |
65 | 65 | else throw("Bet amount is not in range") | |
66 | 66 | else if ((pmtAssetId == "ETH")) | |
67 | 67 | then if (if ((pmtAmt >= EthMinAmt)) | |
68 | 68 | then (EthMaxAmt >= pmtAmt) | |
69 | 69 | else false) | |
70 | 70 | then true | |
71 | 71 | else throw("Bet amount is not in range") | |
72 | 72 | else if ((pmtAssetId == "LTC")) | |
73 | 73 | then if (if ((pmtAmt >= LtcMinAmt)) | |
74 | 74 | then (LtcMaxAmt >= pmtAmt) | |
75 | 75 | else false) | |
76 | 76 | then true | |
77 | 77 | else throw("Bet amount is not in range") | |
78 | 78 | else if ((pmtAssetId == "WCT")) | |
79 | 79 | then if (if ((pmtAmt >= WctMinAmt)) | |
80 | 80 | then (WctMaxAmt >= pmtAmt) | |
81 | 81 | else false) | |
82 | 82 | then true | |
83 | 83 | else throw("Bet amount is not in range") | |
84 | 84 | else if (if ((pmtAmt >= VstMinAmt)) | |
85 | 85 | then (VstMaxAmt >= pmtAmt) | |
86 | 86 | else false) | |
87 | 87 | then true | |
88 | 88 | else throw("Bet amount is not in range") | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | func increaseReservedBalance (pmtAmt,pmtAssetId) = { | |
92 | 92 | let currentReservedBalance = { | |
93 | 93 | let valueReservedBalance = getInteger(this, ("Reserved_" + pmtAssetId)) | |
94 | 94 | match valueReservedBalance { | |
95 | 95 | case a: Int => | |
96 | 96 | a | |
97 | 97 | case _ => | |
98 | 98 | 0 | |
99 | 99 | } | |
100 | 100 | } | |
101 | 101 | let newReservedBalance = (currentReservedBalance + pmtAmt) | |
102 | 102 | if ((wavesBalance(this) >= newReservedBalance)) | |
103 | 103 | then { | |
104 | 104 | let increaseReservedBalance = newReservedBalance | |
105 | 105 | increaseReservedBalance | |
106 | 106 | } | |
107 | 107 | else throw("Bet was rejected. Insufficient funds on game account.") | |
108 | 108 | } | |
109 | 109 | ||
110 | 110 | ||
111 | 111 | func getDataList (gameId) = { | |
112 | 112 | let getDataString = getString(this, gameId) | |
113 | 113 | let a = match getDataString { | |
114 | 114 | case a: String => | |
115 | 115 | a | |
116 | 116 | case _ => | |
117 | 117 | throw("GameId was not found") | |
118 | 118 | } | |
119 | 119 | split(a, "_") | |
120 | 120 | } | |
121 | 121 | ||
122 | 122 | ||
123 | 123 | func intToElem (rsaInt) = if ((2 > rsaInt)) | |
124 | 124 | then "1" | |
125 | 125 | else if ((4 > rsaInt)) | |
126 | 126 | then "2" | |
127 | 127 | else if ((6 > rsaInt)) | |
128 | 128 | then "3" | |
129 | 129 | else if ((8 > rsaInt)) | |
130 | 130 | then "4" | |
131 | 131 | else if ((10 > rsaInt)) | |
132 | 132 | then "5" | |
133 | 133 | else if ((12 > rsaInt)) | |
134 | 134 | then "6" | |
135 | 135 | else "7" | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | func rsaToInt (gameId,rsaSign,rsaPublicKey) = { | |
139 | 139 | let rsaCheck = rsaVerify(SHA256, toBytes(gameId), rsaSign, rsaPublicKey) | |
140 | 140 | if (rsaCheck) | |
141 | 141 | then { | |
142 | 142 | let rsaInt = ((toInt(sha256(rsaSign)) % 19) + 1) | |
143 | 143 | if (if ((rsaInt > 0)) | |
144 | 144 | then (20 >= rsaInt) | |
145 | 145 | else false) | |
146 | 146 | then rsaInt | |
147 | 147 | else throw("Rsa integer is not in range") | |
148 | 148 | } | |
149 | 149 | else throw("Rsa Signature is invalid") | |
150 | 150 | } | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func decreaseReservedBalance (betAmt,assetId) = { | |
154 | 154 | let valueReservedBalance = getInteger(this, ("Reserved_" + assetId)) | |
155 | 155 | let extractReservedBalance = match valueReservedBalance { | |
156 | 156 | case a: Int => | |
157 | 157 | a | |
158 | 158 | case _ => | |
159 | 159 | 0 | |
160 | 160 | } | |
161 | 161 | let decreaseReservedBalance = (extractReservedBalance - betAmt) | |
162 | 162 | if ((decreaseReservedBalance > 0)) | |
163 | 163 | then decreaseReservedBalance | |
164 | 164 | else throw("Reserved balance couldn't be less than 0") | |
165 | 165 | } | |
166 | 166 | ||
167 | 167 | ||
168 | 168 | func defineMultiplier (threeDrums,twoDrums) = if ((threeDrums == "111")) | |
169 | 169 | then 1 | |
170 | 170 | else if ((threeDrums == "222")) | |
171 | 171 | then 2 | |
172 | 172 | else if ((threeDrums == "333")) | |
173 | 173 | then 3 | |
174 | 174 | else if ((threeDrums == "444")) | |
175 | 175 | then 4 | |
176 | 176 | else if ((threeDrums == "555")) | |
177 | 177 | then 5 | |
178 | 178 | else if ((threeDrums == "666")) | |
179 | 179 | then 6 | |
180 | 180 | else if ((threeDrums == "777")) | |
181 | 181 | then 7 | |
182 | 182 | else if ((twoDrums == "11")) | |
183 | 183 | then 8 | |
184 | 184 | else if ((twoDrums == "22")) | |
185 | 185 | then 9 | |
186 | 186 | else if ((twoDrums == "33")) | |
187 | 187 | then 10 | |
188 | 188 | else if ((twoDrums == "44")) | |
189 | 189 | then 11 | |
190 | 190 | else if ((twoDrums == "55")) | |
191 | 191 | then 12 | |
192 | 192 | else if ((twoDrums == "66")) | |
193 | 193 | then 13 | |
194 | 194 | else if ((twoDrums == "77")) | |
195 | 195 | then 14 | |
196 | 196 | else 0 | |
197 | 197 | ||
198 | 198 | ||
199 | 199 | @Callable(i) | |
200 | 200 | func bet () = { | |
201 | 201 | let pmt = extract(i.payment) | |
202 | 202 | let pmtAmt = pmt.amount | |
203 | 203 | let gameId = toBase58String(i.transactionId) | |
204 | 204 | let gameStart = height | |
205 | 205 | let playerPublicKey = toBase58String(i.callerPublicKey) | |
206 | 206 | let pmtAssetId = if (!(isDefined(pmt.assetId))) | |
207 | 207 | then "WAVES" | |
208 | 208 | else if ((pmt.assetId == wBTC)) | |
209 | 209 | then "BTC" | |
210 | 210 | else if ((pmt.assetId == wETH)) | |
211 | 211 | then "ETH" | |
212 | 212 | else if ((pmt.assetId == wLTC)) | |
213 | 213 | then "LTC" | |
214 | 214 | else if ((pmt.assetId == WCT)) | |
215 | 215 | then "WCT" | |
216 | 216 | else if ((pmt.assetId == VST)) | |
217 | 217 | then "VST" | |
218 | 218 | else throw("AssetId is incorrect") | |
219 | 219 | let setReservedBalance = increaseReservedBalance(pmtAmt, pmtAssetId) | |
220 | 220 | let pmtAmtCorrect = pmtAmtCheck(pmtAssetId, pmtAmt) | |
221 | 221 | if (pmtAmtCorrect) | |
222 | 222 | then { | |
223 | 223 | let dataString = ((((((((stateAcc + "_") + playerPublicKey) + "_") + toString(pmtAmt)) + "_") + pmtAssetId) + "_") + toString(gameStart)) | |
224 | 224 | WriteSet([DataEntry(gameId, dataString), DataEntry(("Reserved_" + pmtAssetId), setReservedBalance)]) | |
225 | 225 | } | |
226 | 226 | else throw("assetId is incorrect") | |
227 | 227 | } | |
228 | 228 | ||
229 | 229 | ||
230 | 230 | ||
231 | 231 | @Callable(i) | |
232 | 232 | func withdraw (gameId,rsaSign1,rsaSign2,rsaSign3) = { | |
233 | 233 | let dataList = getDataList(gameId) | |
234 | 234 | let gameState = dataList[0] | |
235 | 235 | let playerAddress = addressFromPublicKey(fromBase58String(dataList[1])) | |
236 | 236 | let betAmt = parseIntValue(dataList[2]) | |
237 | 237 | let assetId = dataList[3] | |
238 | 238 | let gameStart = parseIntValue(dataList[4]) | |
239 | 239 | let gameTimeCheck = (gameTimeFrame > (height - gameStart)) | |
240 | 240 | let stateCheck = (gameState == stateAcc) | |
241 | 241 | let setReservedBalance = decreaseReservedBalance(betAmt, assetId) | |
242 | 242 | let droppedElementsList = { | |
243 | 243 | let roll1Int = rsaToInt(gameId, rsaSign1, rsaPublicKey1) | |
244 | 244 | let roll2Int = rsaToInt(gameId, rsaSign2, rsaPublicKey2) | |
245 | 245 | let roll3Int = rsaToInt(gameId, rsaSign3, rsaPublicKey3) | |
246 | 246 | let element1 = intToElem(roll1Int) | |
247 | 247 | let element2 = intToElem(roll2Int) | |
248 | 248 | let element3 = intToElem(roll3Int) | |
249 | 249 | [element1, element2, element3] | |
250 | 250 | } | |
251 | 251 | let winAmt = { | |
252 | 252 | let threeDrums = ((droppedElementsList[0] + droppedElementsList[1]) + droppedElementsList[2]) | |
253 | 253 | let twoDrums = (droppedElementsList[0] + droppedElementsList[1]) | |
254 | 254 | let multiplier = defineMultiplier(threeDrums, twoDrums) | |
255 | 255 | (betAmt * multiplier) | |
256 | 256 | } | |
257 | 257 | let stringForNewData = ((((((dataList[1] + "_") + dataList[2]) + "_") + dataList[3]) + "_") + dataList[4]) | |
258 | 258 | let droppedElements = ((droppedElementsList[0] + droppedElementsList[1]) + droppedElementsList[2]) | |
259 | 259 | if (stateCheck) | |
260 | 260 | then if (gameTimeCheck) | |
261 | 261 | then if ((winAmt == 0)) | |
262 | 262 | then WriteSet([DataEntry(gameId, (((stateLose + stringForNewData) + toString(winAmt)) + droppedElements)), DataEntry(("Reserved_" + assetId), setReservedBalance)]) | |
263 | 263 | else ScriptResult(WriteSet([DataEntry(gameId, (((stateWin + stringForNewData) + toString(winAmt)) + droppedElements)), DataEntry(("Reserved_" + assetId), setReservedBalance)]), TransferSet([ScriptTransfer(playerAddress, winAmt, fromBase58String(assetId))])) | |
264 | 264 | else ScriptResult(WriteSet([DataEntry(gameId, (stateTimeout + stringForNewData)), DataEntry(("Reserved_" + assetId), setReservedBalance)]), TransferSet([ScriptTransfer(playerAddress, betAmt, fromBase58String(assetId))])) | |
265 | 265 | else throw("Game state is incorrect") | |
266 | 266 | } | |
267 | 267 | ||
268 | 268 | ||
269 | 269 | @Verifier(tx) | |
270 | 270 | func verify () = match tx { | |
271 | 271 | case ttx: TransferTransaction => | |
272 | 272 | let valueReservedBalance = getInteger(this, "Reserved") | |
273 | 273 | let reservedBalance = match valueReservedBalance { | |
274 | 274 | case a: Int => | |
275 | 275 | a | |
276 | 276 | case _ => | |
277 | 277 | 0 | |
278 | 278 | } | |
279 | 279 | let availableBalance = (wavesBalance(this) - reservedBalance) | |
280 | 280 | let availibleAmount = (availableBalance >= ttx.amount) | |
281 | 281 | let signature = sigVerify(ttx.bodyBytes, ttx.proofs[0], ttx.senderPublicKey) | |
282 | 282 | if (availibleAmount) | |
283 | 283 | then signature | |
284 | 284 | else false | |
285 | 285 | case sstx: SetScriptTransaction => | |
286 | 286 | sigVerify(sstx.bodyBytes, sstx.proofs[0], sstx.senderPublicKey) | |
287 | 287 | case istx: InvokeScriptTransaction => | |
288 | 288 | sigVerify(istx.bodyBytes, istx.proofs[0], istx.senderPublicKey) | |
289 | 289 | case _ => | |
290 | 290 | false | |
291 | 291 | } | |
292 | 292 |
github/deemru/w8io/169f3d6 45.42 ms ◑