tx · 9GHzTEVAAP8LxEj9yKCm6kXgndD3oJN6zdRaR2e4zuUA

3MvJWcUyYDnGGBzyyG9fUeTPNgPLZwTxCU5:  -0.05000000 Waves

2021.08.22 15:56 [1669573] smart account 3MvJWcUyYDnGGBzyyG9fUeTPNgPLZwTxCU5 > SELF 0.00000000 Waves

{ "type": 13, "id": "9GHzTEVAAP8LxEj9yKCm6kXgndD3oJN6zdRaR2e4zuUA", "fee": 5000000, "feeAssetId": null, "timestamp": 1629636999693, "version": 2, "chainId": 84, "sender": "3MvJWcUyYDnGGBzyyG9fUeTPNgPLZwTxCU5", "senderPublicKey": "AciE2BLEYe3xEBxS3DZwkVDTNJaqNE1BJ1pp3T3oqQ5b", "proofs": [ "65cF67rDmP7frry6EpeeGBk4AzsoXxxzZr6wRVkU6e3Js9ZRRxNksgEXD8oksAC2LKiYWKFuD9QFGzk5F4UidCap" ], "script": "base64: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YW1lSWQCAAAAGF93YWl0aW5nRXhwaXJhdGlvbkhlaWdodAEAAAAaZ2V0V2FpdGluZ0V4cGlyYXRpb25IZWlnaHQAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAdZ2V0V2FpdGluZ0V4cGlyYXRpb25IZWlnaHRLZXkAAAABBQAAAAZnYW1lSWQBAAAAFmdldEV4cGlyYXRpb25IZWlnaHRLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABWdhbWVfCQABpAAAAAEFAAAABmdhbWVJZAIAAAARX2V4cGlyYXRpb25IZWlnaHQBAAAAE2dldEV4cGlyYXRpb25IZWlnaHQAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAWZ2V0RXhwaXJhdGlvbkhlaWdodEtleQAAAAEFAAAABmdhbWVJZAEAAAARZ2V0UmFyaXR5UmFuZ2VLZXkAAAACAAAABmdhbWVJZAAAAA1yYW5nZVBvc2l0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVnYW1lXwkAAaQAAAABBQAAAAZnYW1lSWQCAAAADV9yYXJpdHlSYW5nZV8FAAAADXJhbmdlUG9zaXRpb24BAAAADmdldFJhcml0eVJhbmdlAAAAAgAAAAZnYW1lSWQAAAANcmFuZ2VQb3NpdGlvbgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARZ2V0UmFyaXR5UmFuZ2VLZXkAAAACBQAAAAZnYW1lSWQFAAAADXJhbmdlUG9zaXRpb24BAAAACmdldFN0ZXBLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABWdhbWVfCQABpAAAAAEFAAAABmdhbWVJZAIAAAAFX3N0ZXABAAAAB2dldFN0ZXAAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAKZ2V0U3RlcEtleQAAAAEFAAAABmdhbWVJZAEAAAAMZ2V0UmFyaXR5S2V5AAAAAwAAAAZnYW1lSWQAAAAKcGxheWVyUm9sZQAAAA1yYW5nZVBvc2l0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAA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ckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAAMbWFrZXJBZGRyZXNzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXZ2V0UGxheWVyQ3VycmVudEdhbWVLZXkAAAABBQAAAAx0YWtlckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAA9nZXRQcml6ZVNlbnRLZXkAAAACBQAAAAZnYW1lSWQFAAAACnBsYXllclJvbGUGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXBsYXllckFkZHJlc3MJAABoAAAAAgkBAAAACmdldEJldEVnZ3MAAAABBQAAAAZnYW1lSWQAAAAAAAAAAAIFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwDCQAAAAAAAAIFAAAABndpbm5lcgIAAAAEZHJhdwMJAAAAAAAAAgUAAAAKcGxheWVyUm9sZQIAAAAFbWFrZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADG1ha2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAD2dldFByaXplU2VudEtleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANcGxheWVyQWRkcmVzcwkBAAAACmdldEJldEVnZ3MAAAABBQAAAAZnYW1lSWQFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADHRha2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAD2dldFByaXplU2VudEtleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVy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", "height": 1669573, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 79smjNMo8VBmqvofqkxjrf8TGBY85nc5ouYT6ZV38vkR Next: F27yAiaHSH5tnsQ8YLAqS7BMGvW84uD4cqqa89eKKBTb Diff:
OldNewDifferences
259259 then throw("Slot is empty")
260260 else if ((getWaitingExpirationHeight(gameId) > height))
261261 then throw("Waiting is not finished yet")
262- else if ((getTaker(gameId) != ""))
263- then throw("This game is started")
264- else {
265- let maker = getMaker(gameId)
262+ else {
263+ let maker = getMaker(gameId)
266264 [IntegerEntry(getPlayerCurrentGameKey(maker), 0), IntegerEntry(getSlotKey(slot), 0), ScriptTransfer(Address(fromBase58String(maker)), (getBetEggs(gameId) + makerFee), eggsAssetId)]
267- }
265+ }
268266 }
269267
270268
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let incubatorAddress = base58'3MtBigTsaeevrcJAEwVcr4quwkqcrtnjoAh'
55
66 let breederAddress = base58'3MtBigTsaeevrcJAEwVcr4quwkqcrtnjoAh'
77
88 let farmingAddress = base58'3NBznG19rEYUAcnukTRTtwJHBVKQLbobVdC'
99
1010 let eggsAssetId = base58'3VUCuh9dWqe54SdzzNUkXhFXpc8UQynnJVh42B7MjNzN'
1111
1212 let makerFee = 1
1313
1414 let takerFee = 2
1515
1616 let SLOTS = 10
1717
1818 let WAITING = 5
1919
2020 let stepDuration = 3
2121
2222 func tryGetInteger (key) = match getInteger(this, key) {
2323 case b: Int =>
2424 b
2525 case _ =>
2626 0
2727 }
2828
2929
3030 func tryGetString (key) = match getString(this, key) {
3131 case a: String =>
3232 a
3333 case _ =>
3434 ""
3535 }
3636
3737
3838 func tryGetBoolean (key) = match getBoolean(this, key) {
3939 case b: Boolean =>
4040 b
4141 case _ =>
4242 false
4343 }
4444
4545
4646 func getNextGameId () = {
4747 let nextId = tryGetInteger("nextGameId")
4848 if ((nextId == 0))
4949 then 1
5050 else nextId
5151 }
5252
5353
5454 func getPlayerCurrentGameKey (address) = ("currentGame_" + address)
5555
5656
5757 func getPlayerCurrentGame (address) = tryGetInteger(getPlayerCurrentGameKey(address))
5858
5959
6060 func getSlotKey (slot) = ("slot_" + toString(slot))
6161
6262
6363 func getSlot (slot) = tryGetInteger(getSlotKey(slot))
6464
6565
6666 func getMakerKey (gameId) = (("game_" + toString(gameId)) + "_maker")
6767
6868
6969 func getMaker (gameId) = tryGetString(getMakerKey(gameId))
7070
7171
7272 func getTakerKey (gameId) = (("game_" + toString(gameId)) + "_taker")
7373
7474
7575 func getTaker (gameId) = tryGetString(getTakerKey(gameId))
7676
7777
7878 func getBetEggsKey (gameId) = (("game_" + toString(gameId)) + "_betEggs")
7979
8080
8181 func getBetEggs (gameId) = tryGetInteger(getBetEggsKey(gameId))
8282
8383
8484 func getWaitingExpirationHeightKey (gameId) = (("game_" + toString(gameId)) + "_waitingExpirationHeight")
8585
8686
8787 func getWaitingExpirationHeight (gameId) = tryGetInteger(getWaitingExpirationHeightKey(gameId))
8888
8989
9090 func getExpirationHeightKey (gameId) = (("game_" + toString(gameId)) + "_expirationHeight")
9191
9292
9393 func getExpirationHeight (gameId) = tryGetInteger(getExpirationHeightKey(gameId))
9494
9595
9696 func getRarityRangeKey (gameId,rangePosition) = ((("game_" + toString(gameId)) + "_rarityRange_") + rangePosition)
9797
9898
9999 func getRarityRange (gameId,rangePosition) = tryGetInteger(getRarityRangeKey(gameId, rangePosition))
100100
101101
102102 func getStepKey (gameId) = (("game_" + toString(gameId)) + "_step")
103103
104104
105105 func getStep (gameId) = tryGetInteger(getStepKey(gameId))
106106
107107
108108 func getRarityKey (gameId,playerRole,rangePosition) = (((((("game_" + toString(gameId)) + "_") + playerRole) + "_") + rangePosition) + "Rarity")
109109
110110
111111 func getRarity (gameId,playerRole,rangePosition) = tryGetInteger(getRarityKey(gameId, playerRole, rangePosition))
112112
113113
114114 func getCommitKey (gameId,playerRole) = (((("game_" + toString(gameId)) + "_") + playerRole) + "_commit")
115115
116116
117117 func getCommit (gameId,playerRole) = tryGetString(getCommitKey(gameId, playerRole))
118118
119119
120120 func getDuckOrderKey (gameId,playerRole) = (((("game_" + toString(gameId)) + "_") + playerRole) + "_duckOrder")
121121
122122
123123 func getDuckOrder (gameId,playerRole) = tryGetString(getDuckOrderKey(gameId, playerRole))
124124
125125
126126 func getPrizeSentKey (gameId,playerRole) = (((("game_" + toString(gameId)) + "_") + playerRole) + "_prizeSent")
127127
128128
129129 func getPrizeSent (gameId,playerRole) = tryGetBoolean(getPrizeSentKey(gameId, playerRole))
130130
131131
132132 func getScore (a,b) = if ((a > b))
133133 then 1
134134 else if ((b > a))
135135 then -1
136136 else 0
137137
138138
139139 func getWinner (gameId) = {
140140 let makerDuckOrder = split(getDuckOrder(gameId, "maker"), ",")
141141 let takerDuckOrder = split(getDuckOrder(gameId, "taker"), ",")
142142 let makerRarity1 = getRarity(gameId, "maker", makerDuckOrder[0])
143143 let makerRarity2 = getRarity(gameId, "maker", makerDuckOrder[1])
144144 let makerRarity3 = getRarity(gameId, "maker", makerDuckOrder[2])
145145 let takerRarity1 = getRarity(gameId, "taker", makerDuckOrder[0])
146146 let takerRarity2 = getRarity(gameId, "taker", makerDuckOrder[1])
147147 let takerRarity3 = getRarity(gameId, "taker", makerDuckOrder[2])
148148 let makerScore = ((getScore(makerRarity1, takerRarity1) + getScore(makerRarity2, takerRarity2)) + getScore(makerRarity3, takerRarity3))
149149 if ((makerScore > 0))
150150 then "maker"
151151 else if ((0 > makerScore))
152152 then "taker"
153153 else "draw"
154154 }
155155
156156
157157 func getWinnerExpired (gameStep) = if (if (if ((gameStep == 0))
158158 then true
159159 else (gameStep == 3))
160160 then true
161161 else (gameStep == 5))
162162 then "maker"
163163 else if (if (if ((gameStep == 1))
164164 then true
165165 else (gameStep == 2))
166166 then true
167167 else (gameStep == 4))
168168 then "taker"
169169 else "draw"
170170
171171
172172 func sendPrize (gameId,playerAddress,playerRole,winner) = {
173173 let makerAddress = getMaker(gameId)
174174 let takerAddress = getTaker(gameId)
175175 if (getPrizeSent(gameId, playerRole))
176176 then throw("You have already got the prize")
177177 else if ((winner == playerRole))
178178 then [IntegerEntry(getPlayerCurrentGameKey(makerAddress), 0), IntegerEntry(getPlayerCurrentGameKey(takerAddress), 0), BooleanEntry(getPrizeSentKey(gameId, playerRole), true), ScriptTransfer(playerAddress, (getBetEggs(gameId) * 2), eggsAssetId)]
179179 else if ((winner == "draw"))
180180 then if ((playerRole == "maker"))
181181 then [IntegerEntry(getPlayerCurrentGameKey(makerAddress), 0), BooleanEntry(getPrizeSentKey(gameId, playerRole), true), ScriptTransfer(playerAddress, getBetEggs(gameId), eggsAssetId)]
182182 else [IntegerEntry(getPlayerCurrentGameKey(takerAddress), 0), BooleanEntry(getPrizeSentKey(gameId, playerRole), true), ScriptTransfer(playerAddress, getBetEggs(gameId), eggsAssetId)]
183183 else throw("You lose and don't have any prize")
184184 }
185185
186186
187187 @Callable(i)
188188 func makeGame (slot,rarityRangeWorst,rarityRangeMedium,rarityRangeBest) = {
189189 let callerAddress = toBase58String(i.caller.bytes)
190190 let slotGameId = getSlot(slot)
191191 let payment = value(i.payments[0])
192192 let eggs = (payment.amount - makerFee)
193193 let gameId = getNextGameId()
194194 if ((getPlayerCurrentGame(callerAddress) != 0))
195195 then throw("You already have an active game")
196196 else if (if ((0 > slot))
197197 then true
198198 else (slot >= SLOTS))
199199 then throw("Invalid slot")
200200 else if ((slotGameId != 0))
201201 then throw("This slot is busy")
202202 else if ((payment.assetId != eggsAssetId))
203203 then throw(("You can attach only EGGs with the following asset id: " + toBase58String(eggsAssetId)))
204204 else if ((0 >= eggs))
205205 then throw("Not enough EGGs")
206206 else if (if ((1 > rarityRangeWorst))
207207 then true
208208 else (rarityRangeWorst > 5))
209209 then throw("Invalid rarity range for the worst duck")
210210 else if (if ((1 > rarityRangeMedium))
211211 then true
212212 else (rarityRangeMedium > 5))
213213 then throw("Invalid rarity range for the medium duck")
214214 else if (if ((1 > rarityRangeBest))
215215 then true
216216 else (rarityRangeBest > 5))
217217 then throw("Invalid rarity range for the best duck")
218218 else if ((rarityRangeWorst >= rarityRangeMedium))
219219 then throw("The medium duck must be better than the worst one")
220220 else if ((rarityRangeMedium >= rarityRangeBest))
221221 then throw("The best duck must be better than the medium one")
222222 else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getMakerKey(gameId), callerAddress), IntegerEntry(getBetEggsKey(gameId), eggs), IntegerEntry(getRarityRangeKey(gameId, "worst"), rarityRangeWorst), IntegerEntry(getRarityRangeKey(gameId, "medium"), rarityRangeMedium), IntegerEntry(getRarityRangeKey(gameId, "best"), rarityRangeBest), IntegerEntry(getWaitingExpirationHeightKey(gameId), (height + WAITING)), IntegerEntry(getSlotKey(slot), gameId), IntegerEntry("nextGameId", (gameId + 1))]
223223 }
224224
225225
226226
227227 @Callable(i)
228228 func takeGame (slot) = {
229229 let callerAddress = toBase58String(i.caller.bytes)
230230 let gameId = getSlot(slot)
231231 let payment = value(i.payments[0])
232232 if ((getPlayerCurrentGame(callerAddress) != 0))
233233 then throw("You already have an active game")
234234 else if (if ((0 > slot))
235235 then true
236236 else (slot >= SLOTS))
237237 then throw("Invalid slot")
238238 else if ((getSlot(slot) == 0))
239239 then throw("This slot is empty")
240240 else if ((payment.assetId != eggsAssetId))
241241 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
242242 else if ((payment.amount != (getBetEggs(gameId) + takerFee)))
243243 then throw("Insufficient eggs amount")
244244 else if ((height >= getWaitingExpirationHeight(gameId)))
245245 then throw("This game is expired")
246246 else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getTakerKey(gameId), callerAddress), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration)), IntegerEntry(getSlotKey(slot), 0)]
247247 }
248248
249249
250250
251251 @Callable(i)
252252 func kickGame (slot) = {
253253 let gameId = getSlot(slot)
254254 if (if ((0 > slot))
255255 then true
256256 else (slot >= SLOTS))
257257 then throw("Invalid slot")
258258 else if ((gameId == 0))
259259 then throw("Slot is empty")
260260 else if ((getWaitingExpirationHeight(gameId) > height))
261261 then throw("Waiting is not finished yet")
262- else if ((getTaker(gameId) != ""))
263- then throw("This game is started")
264- else {
265- let maker = getMaker(gameId)
262+ else {
263+ let maker = getMaker(gameId)
266264 [IntegerEntry(getPlayerCurrentGameKey(maker), 0), IntegerEntry(getSlotKey(slot), 0), ScriptTransfer(Address(fromBase58String(maker)), (getBetEggs(gameId) + makerFee), eggsAssetId)]
267- }
265+ }
268266 }
269267
270268
271269
272270 @Callable(i)
273271 func pickDucks (gameId) = {
274272 let callerAddress = toBase58String(i.caller.bytes)
275273 let gameStep = getStep(gameId)
276274 let worstDuckId = value(value(i.payments[0]).assetId)
277275 let mediumDuckId = value(value(i.payments[1]).assetId)
278276 let bestDuckId = value(value(i.payments[2]).assetId)
279277 let worstRarityRange = getRarityRange(gameId, "worst")
280278 let mediumRarityRange = getRarityRange(gameId, "meduim")
281279 let bestRarityRange = getRarityRange(gameId, "best")
282280 if (if ((value(assetInfo(worstDuckId)).issuer != Address(breederAddress)))
283281 then (value(assetInfo(worstDuckId)).issuer != Address(incubatorAddress))
284282 else false)
285283 then throw("Invalid worstDuck NFT")
286284 else if (if ((value(assetInfo(mediumDuckId)).issuer != Address(breederAddress)))
287285 then (value(assetInfo(mediumDuckId)).issuer != Address(incubatorAddress))
288286 else false)
289287 then throw("Invalid mediumDuck NFT")
290288 else if (if ((value(assetInfo(bestDuckId)).issuer != Address(breederAddress)))
291289 then (value(assetInfo(bestDuckId)).issuer != Address(incubatorAddress))
292290 else false)
293291 then throw("Invalid bestDuck NFT")
294292 else if ((gameStep == 0))
295293 then if ((callerAddress != getTaker(gameId)))
296294 then throw("It is the taker's turn to pick now")
297295 else {
298296 let invokeWorstRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [worstDuckId], nil)
299297 if ((invokeWorstRes == invokeWorstRes))
300298 then {
301299 let worstRarity = match invokeWorstRes {
302300 case r: Int =>
303301 r
304302 case _ =>
305303 throw("Incorrect invoke result")
306304 }
307305 let invokeMediumRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [mediumDuckId], nil)
308306 if ((invokeMediumRes == invokeMediumRes))
309307 then {
310308 let mediumRarity = match invokeMediumRes {
311309 case r: Int =>
312310 r
313311 case _ =>
314312 throw("Incorrect invoke result")
315313 }
316314 let invokeBestRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [bestDuckId], nil)
317315 if ((invokeBestRes == invokeBestRes))
318316 then {
319317 let bestRarity = match invokeWorstRes {
320318 case r: Int =>
321319 r
322320 case _ =>
323321 throw("Incorrect invoke result")
324322 }
325323 if (if ((worstRarity >= (worstRarityRange * 10)))
326324 then true
327325 else (((worstRarityRange - 1) * 10) > worstRarity))
328326 then throw("Worst duck doesn't fit rarity range")
329327 else if (if ((mediumRarity >= (mediumRarityRange * 10)))
330328 then true
331329 else (((mediumRarityRange - 1) * 10) > mediumRarity))
332330 then throw("Medium duck doesn't fit rarity range")
333331 else if (if (if (if ((bestRarityRange == 5))
334332 then (40 > bestRarity)
335333 else false)
336334 then true
337335 else (bestRarity >= (bestRarityRange * 10)))
338336 then true
339337 else (((bestRarityRange - 1) * 10) > bestRarity))
340338 then throw("Best duck doesn't fit rarity range")
341339 else [IntegerEntry(getRarityKey(gameId, "taker", "worst"), worstRarity), IntegerEntry(getRarityKey(gameId, "taker", "medium"), mediumRarity), IntegerEntry(getRarityKey(gameId, "taker", "best"), bestRarity), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration)), ScriptTransfer(i.caller, 1, worstDuckId), ScriptTransfer(i.caller, 1, mediumDuckId), ScriptTransfer(i.caller, 1, bestDuckId)]
342340 }
343341 else throw("Strict value is not equal to itself.")
344342 }
345343 else throw("Strict value is not equal to itself.")
346344 }
347345 else throw("Strict value is not equal to itself.")
348346 }
349347 else if ((gameStep == 1))
350348 then if ((callerAddress != getMaker(gameId)))
351349 then throw("It is the maker's turn to pick now")
352350 else {
353351 let invokeWorstRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [worstDuckId], nil)
354352 if ((invokeWorstRes == invokeWorstRes))
355353 then {
356354 let worstRarity = match invokeWorstRes {
357355 case r: Int =>
358356 r
359357 case _ =>
360358 throw("Incorrect invoke result")
361359 }
362360 let invokeMediumRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [mediumDuckId], nil)
363361 if ((invokeMediumRes == invokeMediumRes))
364362 then {
365363 let mediumRarity = match invokeMediumRes {
366364 case r: Int =>
367365 r
368366 case _ =>
369367 throw("Incorrect invoke result")
370368 }
371369 let invokeBestRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [bestDuckId], nil)
372370 if ((invokeBestRes == invokeBestRes))
373371 then {
374372 let bestRarity = match invokeWorstRes {
375373 case r: Int =>
376374 r
377375 case _ =>
378376 throw("Incorrect invoke result")
379377 }
380378 if (if ((worstRarity >= (worstRarityRange * 10)))
381379 then true
382380 else (((worstRarityRange - 1) * 10) > worstRarity))
383381 then throw("Worst duck doesn't fit rarity range")
384382 else if (if ((mediumRarity >= (mediumRarityRange * 10)))
385383 then true
386384 else (((mediumRarityRange - 1) * 10) > mediumRarity))
387385 then throw("Medium duck doesn't fit rarity range")
388386 else if (if (if (if ((bestRarityRange == 5))
389387 then (40 > bestRarity)
390388 else false)
391389 then true
392390 else (bestRarity >= (bestRarityRange * 10)))
393391 then true
394392 else (((bestRarityRange - 1) * 10) > bestRarity))
395393 then throw("Best duck doesn't fit rarity range")
396394 else [IntegerEntry(getRarityKey(gameId, "maker", "worst"), worstRarity), IntegerEntry(getRarityKey(gameId, "maker", "medium"), mediumRarity), IntegerEntry(getRarityKey(gameId, "maker", "best"), bestRarity), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration)), ScriptTransfer(i.caller, 1, worstDuckId), ScriptTransfer(i.caller, 1, mediumDuckId), ScriptTransfer(i.caller, 1, bestDuckId)]
397395 }
398396 else throw("Strict value is not equal to itself.")
399397 }
400398 else throw("Strict value is not equal to itself.")
401399 }
402400 else throw("Strict value is not equal to itself.")
403401 }
404402 else throw("The worst duck has already been picked")
405403 }
406404
407405
408406
409407 @Callable(i)
410408 func commit (gameId,hash) = {
411409 let callerAddress = toBase58String(i.caller.bytes)
412410 let gameStep = getStep(gameId)
413411 if ((2 > gameStep))
414412 then throw("Ducks hasn't been picked yet")
415413 else if ((gameStep == 2))
416414 then if ((callerAddress != getMaker(gameId)))
417415 then throw("It is the maker's turn to commit now")
418416 else [StringEntry(getCommitKey(gameId, "maker"), hash), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
419417 else if ((gameStep == 3))
420418 then if ((callerAddress != getTaker(gameId)))
421419 then throw("It is the taker's turn to commit now")
422420 else [StringEntry(getCommitKey(gameId, "taker"), hash), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
423421 else throw("Commit is finished")
424422 }
425423
426424
427425
428426 @Callable(i)
429427 func reveal (gameId,duckOrder,salt) = {
430428 let callerAddress = toBase58String(i.caller.bytes)
431429 let gameStep = getStep(gameId)
432430 if ((4 > gameStep))
433431 then throw("Reveal is not started")
434432 else if (if (if (if (if (if ((duckOrder != "worst,medium,best"))
435433 then true
436434 else (duckOrder != "worst,best,medium"))
437435 then true
438436 else (duckOrder != "medium,worst,best"))
439437 then true
440438 else (duckOrder != "medium,best,worst"))
441439 then true
442440 else (duckOrder != "best,worst,medium"))
443441 then true
444442 else (duckOrder != "best,medium,worst"))
445443 then throw("Invalid duckOrder")
446444 else if ((gameStep == 4))
447445 then if ((callerAddress != getMaker(gameId)))
448446 then throw("It is the maker's turn to reveal now")
449447 else if ((toBase58String(sha256(toBytes((duckOrder + salt)))) != getCommit(gameId, "maker")))
450448 then throw("reveal data is not valid")
451449 else [StringEntry(getDuckOrderKey(gameId, "maker"), duckOrder), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
452450 else if ((gameStep == 5))
453451 then if ((callerAddress != getTaker(gameId)))
454452 then throw("It is the taker's turn to reveal now")
455453 else if ((toBase58String(sha256(toBytes((duckOrder + salt)))) != getCommit(gameId, "taker")))
456454 then throw("reveal data is not valid")
457455 else [StringEntry(getDuckOrderKey(gameId, "taker"), duckOrder), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
458456 else throw("Reveal is finished")
459457 }
460458
461459
462460
463461 @Callable(i)
464462 func getPrize (gameId) = {
465463 let callerAddress = toBase58String(i.caller.bytes)
466464 let gameStep = getStep(gameId)
467465 if ((gameStep != 6))
468466 then throw("Game is not finished")
469467 else if ((callerAddress == getMaker(gameId)))
470468 then sendPrize(gameId, i.caller, "maker", getWinner(gameId))
471469 else if ((callerAddress == getTaker(gameId)))
472470 then sendPrize(gameId, i.caller, "taker", getWinner(gameId))
473471 else throw("Invalid caller address")
474472 }
475473
476474
477475
478476 @Callable(i)
479477 func getPrizeExpired (gameId) = {
480478 let callerAddress = toBase58String(i.caller.bytes)
481479 let gameStep = getStep(gameId)
482480 if ((gameStep == 6))
483481 then throw("Game is finished, call getPrize instead")
484482 else if ((getExpirationHeight(gameId) > height))
485483 then throw("Game is not expired")
486484 else if ((callerAddress == getMaker(gameId)))
487485 then sendPrize(gameId, i.caller, "maker", getWinnerExpired(gameStep))
488486 else if ((callerAddress == getTaker(gameId)))
489487 then sendPrize(gameId, i.caller, "taker", getWinnerExpired(gameStep))
490488 else throw("Invalid caller address")
491489 }
492490
493491
494492 @Verifier(tx)
495493 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
496494

github/deemru/w8io/169f3d6 
75.21 ms