tx · 79smjNMo8VBmqvofqkxjrf8TGBY85nc5ouYT6ZV38vkR

3MvJWcUyYDnGGBzyyG9fUeTPNgPLZwTxCU5:  -0.01000000 Waves

2021.08.22 15:50 [1669568] smart account 3MvJWcUyYDnGGBzyyG9fUeTPNgPLZwTxCU5 > SELF 0.00000000 Waves

{ "type": 13, "id": "79smjNMo8VBmqvofqkxjrf8TGBY85nc5ouYT6ZV38vkR", "fee": 1000000, "feeAssetId": null, "timestamp": 1629636675592, "version": 2, "chainId": 84, "sender": "3MvJWcUyYDnGGBzyyG9fUeTPNgPLZwTxCU5", "senderPublicKey": "AciE2BLEYe3xEBxS3DZwkVDTNJaqNE1BJ1pp3T3oqQ5b", "proofs": [ "5WLyCF8AG8Y3KAnfmCvociykszFQTCCR238iQXZMf2Zz83NZiK4MaYyNdH1WDQDweiMvt1wYDZxviBvoobnCPvX4" ], "script": "base64:AAIFAAAAAAAAADAIAhIGCgQBAQEBEgMKAQESAwoBARIDCgEBEgQKAgEIEgUKAwEICBIDCgEBEgMKAQEAAAArAAAAABBpbmN1YmF0b3JBZGRyZXNzAQAAABoBVC7VjNHEAefV6QDOzUAknrEUBzTpXs8rqgAAAAAOYnJlZWRlckFkZHJlc3MBAAAAGgFULtWM0cQB59XpAM7NQCSesRQHNOlezyuqAAAAAA5mYXJtaW5nQWRkcmVzcwEAAAAaAVTyNjnAK8rH0h1nWOr1vJ42L6l6ICBqM9MAAAAAC2VnZ3NBc3NldElkAQAAACAlAmXM9wRoyL4BWZF45VhaOGYUE61KTEq3/gUXSBcWgwAAAAAIbWFrZXJGZWUAAAAAAAAAAAEAAAAACHRha2VyRmVlAAAAAAAAAAACAAAAAAVTTE9UUwAAAAAAAAAACgAAAAAHV0FJVElORwAAAAAAAAAABQAAAAAMc3RlcER1cmF0aW9uAAAAAAAAAAADAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADHRyeUdldFN0cmluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADXRyeUdldEJvb2xlYW4AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIHAQAAAA1nZXROZXh0R2FtZUlkAAAAAAQAAAAGbmV4dElkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAACm5leHRHYW1lSWQDCQAAAAAAAAIFAAAABm5leHRJZAAAAAAAAAAAAAAAAAAAAAAAAQUAAAAGbmV4dElkAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEAAAAHYWRkcmVzcwkAASwAAAACAgAAAAxjdXJyZW50R2FtZV8FAAAAB2FkZHJlc3MBAAAAFGdldFBsYXllckN1cnJlbnRHYW1lAAAAAQAAAAdhZGRyZXNzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAAB2FkZHJlc3MBAAAACmdldFNsb3RLZXkAAAABAAAABHNsb3QJAAEsAAAAAgIAAAAFc2xvdF8JAAGkAAAAAQUAAAAEc2xvdAEAAAAHZ2V0U2xvdAAAAAEAAAAEc2xvdAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAKZ2V0U2xvdEtleQAAAAEFAAAABHNsb3QBAAAAC2dldE1ha2VyS2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAAVnYW1lXwkAAaQAAAABBQAAAAZnYW1lSWQCAAAABl9tYWtlcgEAAAAIZ2V0TWFrZXIAAAABAAAABmdhbWVJZAkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAAtnZXRNYWtlcktleQAAAAEFAAAABmdhbWVJZAEAAAALZ2V0VGFrZXJLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABWdhbWVfCQABpAAAAAEFAAAABmdhbWVJZAIAAAAGX3Rha2VyAQAAAAhnZXRUYWtlcgAAAAEAAAAGZ2FtZUlkCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAC2dldFRha2VyS2V5AAAAAQUAAAAGZ2FtZUlkAQAAAA1nZXRCZXRFZ2dzS2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAAVnYW1lXwkAAaQAAAABBQAAAAZnYW1lSWQCAAAACF9iZXRFZ2dzAQAAAApnZXRCZXRFZ2dzAAAAAQAAAAZnYW1lSWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAADWdldEJldEVnZ3NLZXkAAAABBQAAAAZnYW1lSWQBAAAAHWdldFdhaXRpbmdFeHBpcmF0aW9uSGVpZ2h0S2V5AAAAAQAAAAZnYW1lSWQJAAEsAAAAAgkAASwAAAACAgAAAAVnYW1lXwkAAaQAAAABBQAAAAZnYW1lSWQCAAAAGF93YWl0aW5nRXhwaXJhdGlvbkhlaWdodAEAAAAaZ2V0V2FpdGluZ0V4cGlyYXRpb25IZWlnaHQAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAdZ2V0V2FpdGluZ0V4cGlyYXRpb25IZWlnaHRLZXkAAAABBQAAAAZnYW1lSWQBAAAAFmdldEV4cGlyYXRpb25IZWlnaHRLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABWdhbWVfCQABpAAAAAEFAAAABmdhbWVJZAIAAAARX2V4cGlyYXRpb25IZWlnaHQBAAAAE2dldEV4cGlyYXRpb25IZWlnaHQAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAWZ2V0RXhwaXJhdGlvbkhlaWdodEtleQAAAAEFAAAABmdhbWVJZAEAAAARZ2V0UmFyaXR5UmFuZ2VLZXkAAAACAAAABmdhbWVJZAAAAA1yYW5nZVBvc2l0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVnYW1lXwkAAaQAAAABBQAAAAZnYW1lSWQCAAAADV9yYXJpdHlSYW5nZV8FAAAADXJhbmdlUG9zaXRpb24BAAAADmdldFJhcml0eVJhbmdlAAAAAgAAAAZnYW1lSWQAAAANcmFuZ2VQb3NpdGlvbgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARZ2V0UmFyaXR5UmFuZ2VLZXkAAAACBQAAAAZnYW1lSWQFAAAADXJhbmdlUG9zaXRpb24BAAAACmdldFN0ZXBLZXkAAAABAAAABmdhbWVJZAkAASwAAAACCQABLAAAAAICAAAABWdhbWVfCQABpAAAAAEFAAAABmdhbWVJZAIAAAAFX3N0ZXABAAAAB2dldFN0ZXAAAAABAAAABmdhbWVJZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAKZ2V0U3RlcEtleQAAAAEFAAAABmdhbWVJZAEAAAAMZ2V0UmFyaXR5S2V5AAAAAwAAAAZnYW1lSWQAAAAKcGxheWVyUm9sZQAAAA1yYW5nZVBvc2l0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAA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ckVudHJ5AAAAAgkBAAAAF2dldFBsYXllckN1cnJlbnRHYW1lS2V5AAAAAQUAAAAMbWFrZXJBZGRyZXNzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXZ2V0UGxheWVyQ3VycmVudEdhbWVLZXkAAAABBQAAAAx0YWtlckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAA9nZXRQcml6ZVNlbnRLZXkAAAACBQAAAAZnYW1lSWQFAAAACnBsYXllclJvbGUGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXBsYXllckFkZHJlc3MJAABoAAAAAgkBAAAACmdldEJldEVnZ3MAAAABBQAAAAZnYW1lSWQAAAAAAAAAAAIFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwDCQAAAAAAAAIFAAAABndpbm5lcgIAAAAEZHJhdwMJAAAAAAAAAgUAAAAKcGxheWVyUm9sZQIAAAAFbWFrZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADG1ha2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAD2dldFByaXplU2VudEtleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANcGxheWVyQWRkcmVzcwkBAAAACmdldEJldEVnZ3MAAAABBQAAAAZnYW1lSWQFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdnZXRQbGF5ZXJDdXJyZW50R2FtZUtleQAAAAEFAAAADHRha2VyQWRkcmVzcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAD2dldFByaXplU2VudEtleQAAAAIFAAAABmdhbWVJZAUAAAAKcGxheWVyUm9sZQYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVy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", "height": 1669568, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 9GHzTEVAAP8LxEj9yKCm6kXgndD3oJN6zdRaR2e4zuUA Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let incubatorAddress = base58'3MtBigTsaeevrcJAEwVcr4quwkqcrtnjoAh'
5+
6+let breederAddress = base58'3MtBigTsaeevrcJAEwVcr4quwkqcrtnjoAh'
7+
8+let farmingAddress = base58'3NBznG19rEYUAcnukTRTtwJHBVKQLbobVdC'
9+
10+let eggsAssetId = base58'3VUCuh9dWqe54SdzzNUkXhFXpc8UQynnJVh42B7MjNzN'
11+
12+let makerFee = 1
13+
14+let takerFee = 2
15+
16+let SLOTS = 10
17+
18+let WAITING = 5
19+
20+let stepDuration = 3
21+
22+func tryGetInteger (key) = match getInteger(this, key) {
23+ case b: Int =>
24+ b
25+ case _ =>
26+ 0
27+}
28+
29+
30+func tryGetString (key) = match getString(this, key) {
31+ case a: String =>
32+ a
33+ case _ =>
34+ ""
35+}
36+
37+
38+func tryGetBoolean (key) = match getBoolean(this, key) {
39+ case b: Boolean =>
40+ b
41+ case _ =>
42+ false
43+}
44+
45+
46+func getNextGameId () = {
47+ let nextId = tryGetInteger("nextGameId")
48+ if ((nextId == 0))
49+ then 1
50+ else nextId
51+ }
52+
53+
54+func getPlayerCurrentGameKey (address) = ("currentGame_" + address)
55+
56+
57+func getPlayerCurrentGame (address) = tryGetInteger(getPlayerCurrentGameKey(address))
58+
59+
60+func getSlotKey (slot) = ("slot_" + toString(slot))
61+
62+
63+func getSlot (slot) = tryGetInteger(getSlotKey(slot))
64+
65+
66+func getMakerKey (gameId) = (("game_" + toString(gameId)) + "_maker")
67+
68+
69+func getMaker (gameId) = tryGetString(getMakerKey(gameId))
70+
71+
72+func getTakerKey (gameId) = (("game_" + toString(gameId)) + "_taker")
73+
74+
75+func getTaker (gameId) = tryGetString(getTakerKey(gameId))
76+
77+
78+func getBetEggsKey (gameId) = (("game_" + toString(gameId)) + "_betEggs")
79+
80+
81+func getBetEggs (gameId) = tryGetInteger(getBetEggsKey(gameId))
82+
83+
84+func getWaitingExpirationHeightKey (gameId) = (("game_" + toString(gameId)) + "_waitingExpirationHeight")
85+
86+
87+func getWaitingExpirationHeight (gameId) = tryGetInteger(getWaitingExpirationHeightKey(gameId))
88+
89+
90+func getExpirationHeightKey (gameId) = (("game_" + toString(gameId)) + "_expirationHeight")
91+
92+
93+func getExpirationHeight (gameId) = tryGetInteger(getExpirationHeightKey(gameId))
94+
95+
96+func getRarityRangeKey (gameId,rangePosition) = ((("game_" + toString(gameId)) + "_rarityRange_") + rangePosition)
97+
98+
99+func getRarityRange (gameId,rangePosition) = tryGetInteger(getRarityRangeKey(gameId, rangePosition))
100+
101+
102+func getStepKey (gameId) = (("game_" + toString(gameId)) + "_step")
103+
104+
105+func getStep (gameId) = tryGetInteger(getStepKey(gameId))
106+
107+
108+func getRarityKey (gameId,playerRole,rangePosition) = (((((("game_" + toString(gameId)) + "_") + playerRole) + "_") + rangePosition) + "Rarity")
109+
110+
111+func getRarity (gameId,playerRole,rangePosition) = tryGetInteger(getRarityKey(gameId, playerRole, rangePosition))
112+
113+
114+func getCommitKey (gameId,playerRole) = (((("game_" + toString(gameId)) + "_") + playerRole) + "_commit")
115+
116+
117+func getCommit (gameId,playerRole) = tryGetString(getCommitKey(gameId, playerRole))
118+
119+
120+func getDuckOrderKey (gameId,playerRole) = (((("game_" + toString(gameId)) + "_") + playerRole) + "_duckOrder")
121+
122+
123+func getDuckOrder (gameId,playerRole) = tryGetString(getDuckOrderKey(gameId, playerRole))
124+
125+
126+func getPrizeSentKey (gameId,playerRole) = (((("game_" + toString(gameId)) + "_") + playerRole) + "_prizeSent")
127+
128+
129+func getPrizeSent (gameId,playerRole) = tryGetBoolean(getPrizeSentKey(gameId, playerRole))
130+
131+
132+func getScore (a,b) = if ((a > b))
133+ then 1
134+ else if ((b > a))
135+ then -1
136+ else 0
137+
138+
139+func getWinner (gameId) = {
140+ let makerDuckOrder = split(getDuckOrder(gameId, "maker"), ",")
141+ let takerDuckOrder = split(getDuckOrder(gameId, "taker"), ",")
142+ let makerRarity1 = getRarity(gameId, "maker", makerDuckOrder[0])
143+ let makerRarity2 = getRarity(gameId, "maker", makerDuckOrder[1])
144+ let makerRarity3 = getRarity(gameId, "maker", makerDuckOrder[2])
145+ let takerRarity1 = getRarity(gameId, "taker", makerDuckOrder[0])
146+ let takerRarity2 = getRarity(gameId, "taker", makerDuckOrder[1])
147+ let takerRarity3 = getRarity(gameId, "taker", makerDuckOrder[2])
148+ let makerScore = ((getScore(makerRarity1, takerRarity1) + getScore(makerRarity2, takerRarity2)) + getScore(makerRarity3, takerRarity3))
149+ if ((makerScore > 0))
150+ then "maker"
151+ else if ((0 > makerScore))
152+ then "taker"
153+ else "draw"
154+ }
155+
156+
157+func getWinnerExpired (gameStep) = if (if (if ((gameStep == 0))
158+ then true
159+ else (gameStep == 3))
160+ then true
161+ else (gameStep == 5))
162+ then "maker"
163+ else if (if (if ((gameStep == 1))
164+ then true
165+ else (gameStep == 2))
166+ then true
167+ else (gameStep == 4))
168+ then "taker"
169+ else "draw"
170+
171+
172+func sendPrize (gameId,playerAddress,playerRole,winner) = {
173+ let makerAddress = getMaker(gameId)
174+ let takerAddress = getTaker(gameId)
175+ if (getPrizeSent(gameId, playerRole))
176+ then throw("You have already got the prize")
177+ else if ((winner == playerRole))
178+ then [IntegerEntry(getPlayerCurrentGameKey(makerAddress), 0), IntegerEntry(getPlayerCurrentGameKey(takerAddress), 0), BooleanEntry(getPrizeSentKey(gameId, playerRole), true), ScriptTransfer(playerAddress, (getBetEggs(gameId) * 2), eggsAssetId)]
179+ else if ((winner == "draw"))
180+ then if ((playerRole == "maker"))
181+ then [IntegerEntry(getPlayerCurrentGameKey(makerAddress), 0), BooleanEntry(getPrizeSentKey(gameId, playerRole), true), ScriptTransfer(playerAddress, getBetEggs(gameId), eggsAssetId)]
182+ else [IntegerEntry(getPlayerCurrentGameKey(takerAddress), 0), BooleanEntry(getPrizeSentKey(gameId, playerRole), true), ScriptTransfer(playerAddress, getBetEggs(gameId), eggsAssetId)]
183+ else throw("You lose and don't have any prize")
184+ }
185+
186+
187+@Callable(i)
188+func makeGame (slot,rarityRangeWorst,rarityRangeMedium,rarityRangeBest) = {
189+ let callerAddress = toBase58String(i.caller.bytes)
190+ let slotGameId = getSlot(slot)
191+ let payment = value(i.payments[0])
192+ let eggs = (payment.amount - makerFee)
193+ let gameId = getNextGameId()
194+ if ((getPlayerCurrentGame(callerAddress) != 0))
195+ then throw("You already have an active game")
196+ else if (if ((0 > slot))
197+ then true
198+ else (slot >= SLOTS))
199+ then throw("Invalid slot")
200+ else if ((slotGameId != 0))
201+ then throw("This slot is busy")
202+ else if ((payment.assetId != eggsAssetId))
203+ then throw(("You can attach only EGGs with the following asset id: " + toBase58String(eggsAssetId)))
204+ else if ((0 >= eggs))
205+ then throw("Not enough EGGs")
206+ else if (if ((1 > rarityRangeWorst))
207+ then true
208+ else (rarityRangeWorst > 5))
209+ then throw("Invalid rarity range for the worst duck")
210+ else if (if ((1 > rarityRangeMedium))
211+ then true
212+ else (rarityRangeMedium > 5))
213+ then throw("Invalid rarity range for the medium duck")
214+ else if (if ((1 > rarityRangeBest))
215+ then true
216+ else (rarityRangeBest > 5))
217+ then throw("Invalid rarity range for the best duck")
218+ else if ((rarityRangeWorst >= rarityRangeMedium))
219+ then throw("The medium duck must be better than the worst one")
220+ else if ((rarityRangeMedium >= rarityRangeBest))
221+ then throw("The best duck must be better than the medium one")
222+ 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))]
223+ }
224+
225+
226+
227+@Callable(i)
228+func takeGame (slot) = {
229+ let callerAddress = toBase58String(i.caller.bytes)
230+ let gameId = getSlot(slot)
231+ let payment = value(i.payments[0])
232+ if ((getPlayerCurrentGame(callerAddress) != 0))
233+ then throw("You already have an active game")
234+ else if (if ((0 > slot))
235+ then true
236+ else (slot >= SLOTS))
237+ then throw("Invalid slot")
238+ else if ((getSlot(slot) == 0))
239+ then throw("This slot is empty")
240+ else if ((payment.assetId != eggsAssetId))
241+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
242+ else if ((payment.amount != (getBetEggs(gameId) + takerFee)))
243+ then throw("Insufficient eggs amount")
244+ else if ((height >= getWaitingExpirationHeight(gameId)))
245+ then throw("This game is expired")
246+ else [IntegerEntry(getPlayerCurrentGameKey(callerAddress), gameId), StringEntry(getTakerKey(gameId), callerAddress), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration)), IntegerEntry(getSlotKey(slot), 0)]
247+ }
248+
249+
250+
251+@Callable(i)
252+func kickGame (slot) = {
253+ let gameId = getSlot(slot)
254+ if (if ((0 > slot))
255+ then true
256+ else (slot >= SLOTS))
257+ then throw("Invalid slot")
258+ else if ((gameId == 0))
259+ then throw("Slot is empty")
260+ else if ((getWaitingExpirationHeight(gameId) > height))
261+ 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)
266+[IntegerEntry(getPlayerCurrentGameKey(maker), 0), IntegerEntry(getSlotKey(slot), 0), ScriptTransfer(Address(fromBase58String(maker)), (getBetEggs(gameId) + makerFee), eggsAssetId)]
267+ }
268+ }
269+
270+
271+
272+@Callable(i)
273+func pickDucks (gameId) = {
274+ let callerAddress = toBase58String(i.caller.bytes)
275+ let gameStep = getStep(gameId)
276+ let worstDuckId = value(value(i.payments[0]).assetId)
277+ let mediumDuckId = value(value(i.payments[1]).assetId)
278+ let bestDuckId = value(value(i.payments[2]).assetId)
279+ let worstRarityRange = getRarityRange(gameId, "worst")
280+ let mediumRarityRange = getRarityRange(gameId, "meduim")
281+ let bestRarityRange = getRarityRange(gameId, "best")
282+ if (if ((value(assetInfo(worstDuckId)).issuer != Address(breederAddress)))
283+ then (value(assetInfo(worstDuckId)).issuer != Address(incubatorAddress))
284+ else false)
285+ then throw("Invalid worstDuck NFT")
286+ else if (if ((value(assetInfo(mediumDuckId)).issuer != Address(breederAddress)))
287+ then (value(assetInfo(mediumDuckId)).issuer != Address(incubatorAddress))
288+ else false)
289+ then throw("Invalid mediumDuck NFT")
290+ else if (if ((value(assetInfo(bestDuckId)).issuer != Address(breederAddress)))
291+ then (value(assetInfo(bestDuckId)).issuer != Address(incubatorAddress))
292+ else false)
293+ then throw("Invalid bestDuck NFT")
294+ else if ((gameStep == 0))
295+ then if ((callerAddress != getTaker(gameId)))
296+ then throw("It is the taker's turn to pick now")
297+ else {
298+ let invokeWorstRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [worstDuckId], nil)
299+ if ((invokeWorstRes == invokeWorstRes))
300+ then {
301+ let worstRarity = match invokeWorstRes {
302+ case r: Int =>
303+ r
304+ case _ =>
305+ throw("Incorrect invoke result")
306+ }
307+ let invokeMediumRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [mediumDuckId], nil)
308+ if ((invokeMediumRes == invokeMediumRes))
309+ then {
310+ let mediumRarity = match invokeMediumRes {
311+ case r: Int =>
312+ r
313+ case _ =>
314+ throw("Incorrect invoke result")
315+ }
316+ let invokeBestRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [bestDuckId], nil)
317+ if ((invokeBestRes == invokeBestRes))
318+ then {
319+ let bestRarity = match invokeWorstRes {
320+ case r: Int =>
321+ r
322+ case _ =>
323+ throw("Incorrect invoke result")
324+ }
325+ if (if ((worstRarity >= (worstRarityRange * 10)))
326+ then true
327+ else (((worstRarityRange - 1) * 10) > worstRarity))
328+ then throw("Worst duck doesn't fit rarity range")
329+ else if (if ((mediumRarity >= (mediumRarityRange * 10)))
330+ then true
331+ else (((mediumRarityRange - 1) * 10) > mediumRarity))
332+ then throw("Medium duck doesn't fit rarity range")
333+ else if (if (if (if ((bestRarityRange == 5))
334+ then (40 > bestRarity)
335+ else false)
336+ then true
337+ else (bestRarity >= (bestRarityRange * 10)))
338+ then true
339+ else (((bestRarityRange - 1) * 10) > bestRarity))
340+ then throw("Best duck doesn't fit rarity range")
341+ 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)]
342+ }
343+ else throw("Strict value is not equal to itself.")
344+ }
345+ else throw("Strict value is not equal to itself.")
346+ }
347+ else throw("Strict value is not equal to itself.")
348+ }
349+ else if ((gameStep == 1))
350+ then if ((callerAddress != getMaker(gameId)))
351+ then throw("It is the maker's turn to pick now")
352+ else {
353+ let invokeWorstRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [worstDuckId], nil)
354+ if ((invokeWorstRes == invokeWorstRes))
355+ then {
356+ let worstRarity = match invokeWorstRes {
357+ case r: Int =>
358+ r
359+ case _ =>
360+ throw("Incorrect invoke result")
361+ }
362+ let invokeMediumRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [mediumDuckId], nil)
363+ if ((invokeMediumRes == invokeMediumRes))
364+ then {
365+ let mediumRarity = match invokeMediumRes {
366+ case r: Int =>
367+ r
368+ case _ =>
369+ throw("Incorrect invoke result")
370+ }
371+ let invokeBestRes = invoke(Address(farmingAddress), "getAssetRarityCallable", [bestDuckId], nil)
372+ if ((invokeBestRes == invokeBestRes))
373+ then {
374+ let bestRarity = match invokeWorstRes {
375+ case r: Int =>
376+ r
377+ case _ =>
378+ throw("Incorrect invoke result")
379+ }
380+ if (if ((worstRarity >= (worstRarityRange * 10)))
381+ then true
382+ else (((worstRarityRange - 1) * 10) > worstRarity))
383+ then throw("Worst duck doesn't fit rarity range")
384+ else if (if ((mediumRarity >= (mediumRarityRange * 10)))
385+ then true
386+ else (((mediumRarityRange - 1) * 10) > mediumRarity))
387+ then throw("Medium duck doesn't fit rarity range")
388+ else if (if (if (if ((bestRarityRange == 5))
389+ then (40 > bestRarity)
390+ else false)
391+ then true
392+ else (bestRarity >= (bestRarityRange * 10)))
393+ then true
394+ else (((bestRarityRange - 1) * 10) > bestRarity))
395+ then throw("Best duck doesn't fit rarity range")
396+ 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)]
397+ }
398+ else throw("Strict value is not equal to itself.")
399+ }
400+ else throw("Strict value is not equal to itself.")
401+ }
402+ else throw("Strict value is not equal to itself.")
403+ }
404+ else throw("The worst duck has already been picked")
405+ }
406+
407+
408+
409+@Callable(i)
410+func commit (gameId,hash) = {
411+ let callerAddress = toBase58String(i.caller.bytes)
412+ let gameStep = getStep(gameId)
413+ if ((2 > gameStep))
414+ then throw("Ducks hasn't been picked yet")
415+ else if ((gameStep == 2))
416+ then if ((callerAddress != getMaker(gameId)))
417+ then throw("It is the maker's turn to commit now")
418+ else [StringEntry(getCommitKey(gameId, "maker"), hash), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
419+ else if ((gameStep == 3))
420+ then if ((callerAddress != getTaker(gameId)))
421+ then throw("It is the taker's turn to commit now")
422+ else [StringEntry(getCommitKey(gameId, "taker"), hash), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
423+ else throw("Commit is finished")
424+ }
425+
426+
427+
428+@Callable(i)
429+func reveal (gameId,duckOrder,salt) = {
430+ let callerAddress = toBase58String(i.caller.bytes)
431+ let gameStep = getStep(gameId)
432+ if ((4 > gameStep))
433+ then throw("Reveal is not started")
434+ else if (if (if (if (if (if ((duckOrder != "worst,medium,best"))
435+ then true
436+ else (duckOrder != "worst,best,medium"))
437+ then true
438+ else (duckOrder != "medium,worst,best"))
439+ then true
440+ else (duckOrder != "medium,best,worst"))
441+ then true
442+ else (duckOrder != "best,worst,medium"))
443+ then true
444+ else (duckOrder != "best,medium,worst"))
445+ then throw("Invalid duckOrder")
446+ else if ((gameStep == 4))
447+ then if ((callerAddress != getMaker(gameId)))
448+ then throw("It is the maker's turn to reveal now")
449+ else if ((toBase58String(sha256(toBytes((duckOrder + salt)))) != getCommit(gameId, "maker")))
450+ then throw("reveal data is not valid")
451+ else [StringEntry(getDuckOrderKey(gameId, "maker"), duckOrder), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
452+ else if ((gameStep == 5))
453+ then if ((callerAddress != getTaker(gameId)))
454+ then throw("It is the taker's turn to reveal now")
455+ else if ((toBase58String(sha256(toBytes((duckOrder + salt)))) != getCommit(gameId, "taker")))
456+ then throw("reveal data is not valid")
457+ else [StringEntry(getDuckOrderKey(gameId, "taker"), duckOrder), IntegerEntry(getStepKey(gameId), (gameStep + 1)), IntegerEntry(getExpirationHeightKey(gameId), (height + stepDuration))]
458+ else throw("Reveal is finished")
459+ }
460+
461+
462+
463+@Callable(i)
464+func getPrize (gameId) = {
465+ let callerAddress = toBase58String(i.caller.bytes)
466+ let gameStep = getStep(gameId)
467+ if ((gameStep != 6))
468+ then throw("Game is not finished")
469+ else if ((callerAddress == getMaker(gameId)))
470+ then sendPrize(gameId, i.caller, "maker", getWinner(gameId))
471+ else if ((callerAddress == getTaker(gameId)))
472+ then sendPrize(gameId, i.caller, "taker", getWinner(gameId))
473+ else throw("Invalid caller address")
474+ }
475+
476+
477+
478+@Callable(i)
479+func getPrizeExpired (gameId) = {
480+ let callerAddress = toBase58String(i.caller.bytes)
481+ let gameStep = getStep(gameId)
482+ if ((gameStep == 6))
483+ then throw("Game is finished, call getPrize instead")
484+ else if ((getExpirationHeight(gameId) > height))
485+ then throw("Game is not expired")
486+ else if ((callerAddress == getMaker(gameId)))
487+ then sendPrize(gameId, i.caller, "maker", getWinnerExpired(gameStep))
488+ else if ((callerAddress == getTaker(gameId)))
489+ then sendPrize(gameId, i.caller, "taker", getWinnerExpired(gameStep))
490+ else throw("Invalid caller address")
491+ }
492+
493+
494+@Verifier(tx)
495+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
496+

github/deemru/w8io/169f3d6 
42.73 ms