tx · BN8m2Mxde1A3XYHPjG8vJA3Zn7oaPWfKFdG9TuWUWETT

3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv:  -0.01400000 Waves

2022.06.04 14:13 [3147081] smart account 3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv > SELF 0.00000000 Waves

{ "type": 13, "id": "BN8m2Mxde1A3XYHPjG8vJA3Zn7oaPWfKFdG9TuWUWETT", "fee": 1400000, "feeAssetId": null, "timestamp": 1654341274526, "version": 2, "chainId": 87, "sender": "3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv", "senderPublicKey": "EBHsV7TQYm4qS2V7iZXEXwcbUdEYQyCSLEdY2AMvLPns", "proofs": [ "bS7Aco23UJfWN2wbsQQRuFRkPgWiEMo96uSRCb8EtrBEZ999S1uBZbApnuqeLpDEkNCfbF8nKjtkKEd5Vs5Q3MX" ], "script": "base64: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ZXJhdGlvbnMgYXJlIHRlbXBvcmFyaWx5IGxvY2tlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAE2dldFN3b3BQcm9tb0FkZHJlc3MAAAAACQAAAgAAAAECAAAAGUlTREhGQTogUGVybWlzc2lvbiBkZW5pZWQEAAAAEHRvdGFsRHVja3NBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAMZHVja3NfYW1vdW50BAAAAAplZ2dzTmVlZGVkCQEAAAAVY291bnRFZ2dzTmVlZGVkQW1vdW50AAAAAQUAAAAQdG90YWxEdWNrc0Ftb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0SGF0Y2hpbmdTdGF0dXNLZXkAAAACBQAAAAdhZGRyZXNzCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAA9IYXRjaGluZ1N0YXJ0ZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIFAAAAB2FkZHJlc3MIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABBkZWxheUZvckhhdGNoaW5nCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAxkdWNrc19hbW91bnQJAABkAAAAAgUAAAAQdG90YWxEdWNrc0Ftb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQZHVja3NfbGFzdF9wcmljZQkAAGkAAAACBQAAAAplZ2dzTmVlZGVkAAAAAAAAD0JACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJaGF0Y2hpbmdfCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQCAAAABl9wcm9tbwYFAAAAA25pbAAAAAFpAQAAABJmaW5pc2hEdWNrSGF0Y2hpbmcAAAABAAAAB3R4SWRTdHIEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAARaGF0Y2hpbmdTdGF0dXNLZXkJAQAAABRnZXRIYXRj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AgIAAAAFZHVja18JAAJYAAAAAQUAAAAHYXNzZXRJZAIAAAAGX2dyb3duBQAAAAxkdWNrRnJvbUJhYnkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9nZXREdWNrU3RhdHNLZXkAAAABBQAAAAdkdWNrR2VuBQAAAAZhbW91bnQJAARMAAAAAgUAAAASamFja3BvdFJhbmRvbUVudHJ5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGc3RhdHNfBQAAAAdmYXJtR2VuAgAAAAlfcXVhbnRpdHkJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGc3RhdHNfBQAAAAdmYXJtR2VuAgAAAAlfcXVhbnRpdHkAAAAAAAAAAAEJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABBQAAAAdhc3NldElkBQAAAANuaWwAAAABaQEAAAANaXNzdWVGcmVlRHVjawAAAAIAAAAHYWRkcmVzcwAAAAd0eElkU3RyAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAARZ2V0UmViaXJ0aEFkZHJlc3MAAAAACQAAAgAAAAECAAAAEklTRkQ6IHJlYmlydGggb25seQQAAAAEdHhJZAkAAlkAAAABBQAAAAd0eElkU3RyBAAAABFoYXRjaGluZ1N0YXR1c0tleQkBAAAAFGdldEhhdGNoaW5nU3RhdHVzS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBAAAABB0b3RhbER1Y2tzQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADGR1Y2tzX2Ftb3VudAQAAAAKZWdnc05lZWRlZAkBAAAAFWNvdW50RWdnc05lZWRlZEFtb3VudAAAAAEFAAAAEHRvdGFsRHVja3NBbW91bnQEAAAADCR0MDk5NDQxMDEw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cmVzcwUAAAAEdHhJZAQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBAAAABB0b3RhbER1Y2tzQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADGR1Y2tzX2Ftb3VudAQAAAAKZWdnc05lZWRlZAkBAAAAFWNvdW50RWdnc05lZWRlZEFtb3VudAAAAAEFAAAAEHRvdGFsRHVja3NBbW91bnQEAAAADSR0MDExNTgxMTE2MzMJAAUUAAAAAgkAASwAAAACCQABLAAAAAICAAAABURVQ0stBQAAAANnZW4CAAAAAy1KVQIAAAAEOFctSgQAAAAHZHVja0dlbggFAAAADSR0MDExNTgxMTE2MzMAAAACXzEEAAAAB2Zhcm1HZW4IBQAAAA0kdDAxMTU4MTExNjMzAAAAAl8yBAAAAAtkZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAICAAAADnsiZ2Vub3R5cGUiOiAiBQAAAAdkdWNrR2VuAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAHBQAAAAdkdWNrR2VuBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAQAAAAAAAAAAAAcFAAAABHVuaXQFAAAABmhlaWdodAQAAAAHYXNzZXRJZAkABDgAAAABBQAAAAVhc3NldAQAAAAJZHVja0lkS2V5CQEAAAAMZ2V0RHVja0lkS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAQAAAATdmFsdWVEdWNrSWRLZXlFeGl0cwkBAAAADHRyeUdldFN0cmluZwAAAAEFAAAACWR1Y2tJZEtleQMJAQAAAAIhPQAAAAIFAAAAE3ZhbHVlRHVja0lkS2V5RXhpdHMCAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAApSVNKOiBZb3Ugd2lsbCBvdmVycmlkZSBmb2xsb3dpbmcgZHVja0lkIDoFAAAACWR1Y2tJZEtleQIAAAAkIG1ha2Ugc3VyZSB0aGF0IHlvdXIgdHhJZCBpcyB1bmlxdWUhCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJ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", "height": 3147081, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3uVnKTQ6wSKTQf7DTcuQQqKWKHCxpR386AkmHbZyLz4T Next: cAH7vFTStNMkgBtSJCeZBqKyCm4haqhiLYZGJkWJEct Diff:
OldNewDifferences
2828
2929
3030 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
31+
32+
33+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
3134
3235
3336 let delayForHatching = 2
8083
8184 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
8285 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
83- let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
84- (toInt(randomHash, (offset * 8)) % variants)
86+ let randomHash = sha256(((base58'incubator' + txId) + value(randomSeedBlock.vrf)))
87+ (toInt(randomHash, offset) % variants)
8588 }
8689
8790
8992
9093
9194 func getRandomName (txId,hatchingFinishHeight) = {
92- let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 0)
93- if (if ((5 > jackpotRandom))
94- then (wasUniqueBorn("DUCK-WWPUZZLE-JU") == 0)
95+ let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 4)
96+ let entry = IntegerEntry("last_jackpot_random", jackpotRandom)
97+ if (if ((jackpotRandom > 495))
98+ then (wasUniqueBorn("DUCK-WWGRANJA-JU") == 0)
9599 else false)
96- then $Tuple2("DUCK-WWPUZZLE-JU", "1E1L1P1U2W2Z-J")
100+ then $Tuple3("DUCK-WWGRANJA-JU", "2A1G1J1N1R2W-J", entry)
97101 else {
98- let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
99- let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
102+ let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 5)
103+ let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 6)
100104 let color = if ((colorRandom == 0))
101105 then "Y"
102106 else if ((colorRandom == 1))
105109 then "B"
106110 else "R"
107111 if ((typeRandom == 0))
108- then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
112+ then $Tuple3(("DUCK-HHHHHHHH-G" + color), "8H-G", entry)
109113 else if ((typeRandom == 1))
110- then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
114+ then $Tuple3(("DUCK-GGGGGGGG-G" + color), "8G-G", entry)
111115 else if ((typeRandom == 2))
112- then $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
113- else $Tuple2(("DUCK-KKKKKKKK-G" + color), "8K-G")
116+ then $Tuple3(("DUCK-IIIIIIII-G" + color), "8I-G", entry)
117+ else $Tuple3(("DUCK-KKKKKKKK-G" + color), "8K-G", entry)
114118 }
115119 }
116120
127131 }
128132
129133
134+func asInt (value) = match value {
135+ case int: Int =>
136+ int
137+ case _ =>
138+ throw("FAI: wrong type, expected: Int")
139+}
140+
141+
130142 @Callable(i)
131143 func configureOracle (oracle) = if ((i.caller != this))
132- then throw("admin only")
144+ then throw("ICU: admin only")
133145 else [StringEntry("static_oracleAddress", oracle)]
134146
135147
136148
137149 @Callable(i)
138150 func setDiscount (val) = if ((i.caller != this))
139- then throw("admin_only")
151+ then throw("ISD: admin_only")
140152 else [IntegerEntry("discountCoefficient", val)]
141153
142154
143155
144156 @Callable(i)
145157 func setSale (val) = if ((i.caller != this))
146- then throw("admin_only")
158+ then throw("ISS: admin_only")
147159 else [IntegerEntry("saleCoefficient", val)]
148160
149161
150162
151163 @Callable(i)
152164 func startDuckHatching (refererAddress) = if ((isLocked() > 0))
153- then throw("EGG operations are temporarily locked")
165+ then throw("ISDH: EGG operations are temporarily locked")
154166 else {
155167 let totalDucksAmount = tryGetInteger("ducks_amount")
156168 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
157- let firstPayment = value(i.payments[0])
158169 let results = [StringEntry(getHatchingStatusKey(toString(i.originCaller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.originCaller), i.transactionId), (height + delayForHatching)), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000))]
159- if ((i.caller == getBabyDuckAddress()))
160- then (results ++ [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)])
161- else if ((firstPayment.assetId != getEggAssetId()))
162- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
163- else if ((eggsNeeded > firstPayment.amount))
164- then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
165- else {
166- let refererReward = fraction(eggsNeeded, RefererReward, 100)
167- let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
168- if ((refCall == refCall))
169- then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), getEggAssetId())])
170- else throw("Strict value is not equal to itself.")
170+ let entry = if ((i.caller == getBabyDuckAddress()))
171+ then [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)]
172+ else {
173+ let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [eggsNeeded], nil))
174+ if ((amountPaidByCoupons == amountPaidByCoupons))
175+ then {
176+ let leftToPay = (eggsNeeded - amountPaidByCoupons)
177+ if ((leftToPay != 0))
178+ then {
179+ let firstPayment = value(i.payments[0])
180+ if ((firstPayment.assetId != getEggAssetId()))
181+ then throw(("ISDH: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
182+ else if ((leftToPay > firstPayment.amount))
183+ then throw(("ISDH: To hatch a duck you currently need the following amount of EGGlets: " + toString(leftToPay)))
184+ else {
185+ let refererReward = fraction(leftToPay, RefererReward, 100)
186+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
187+ if ((refCall == refCall))
188+ then {
189+ let payback = (firstPayment.amount - leftToPay)
190+ if ((payback > 0))
191+ then [ScriptTransfer(i.caller, payback, getEggAssetId())]
192+ else nil
193+ }
194+ else throw("Strict value is not equal to itself.")
195+ }
196+ }
197+ else nil
171198 }
199+ else throw("Strict value is not equal to itself.")
200+ }
201+ if ((entry == entry))
202+ then (results ++ entry)
203+ else throw("Strict value is not equal to itself.")
172204 }
173205
174206
175207
176208 @Callable(i)
177209 func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
178- then throw("EGG operations are temporarily locked")
210+ then throw("ISDHFA: EGG operations are temporarily locked")
179211 else if ((i.caller != getSwopPromoAddress()))
180- then throw("Pernission denied")
212+ then throw("ISDHFA: Permission denied")
181213 else {
182214 let totalDucksAmount = tryGetInteger("ducks_amount")
183215 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
203235 if ((hatchingTxStatus == HatchingFinished))
204236 then {
205237 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
206- throw(("The duck was hatched and claimed already, here is the folowing: " + duckId))
238+ throw(("IFDH: The duck was hatched and claimed already, here is the folowing: " + duckId))
207239 }
208240 else if ((hatchingFinishHeight > height))
209241 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
210242 else {
211- let $t079167982 = getRandomName(txId, hatchingFinishHeight)
212- let duckGen = $t079167982._1
213- let farmGen = $t079167982._2
243+ let $t085898675 = getRandomName(txId, hatchingFinishHeight)
244+ let duckGen = $t085898675._1
245+ let farmGen = $t085898675._2
246+ let jackpotRandomEntry = $t085898675._3
214247 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
215248 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
216249 let assetId = calculateAssetId(asset)
217250 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
218-[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), BooleanEntry((("duck_" + toBase58String(assetId)) + "_grown"), duckFromBaby), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(i.caller, 1, assetId)]
251+[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), BooleanEntry((("duck_" + toBase58String(assetId)) + "_grown"), duckFromBaby), IntegerEntry(getDuckStatsKey(duckGen), amount), jackpotRandomEntry, IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(i.caller, 1, assetId)]
219252 }
220253 }
221254
223256
224257 @Callable(i)
225258 func issueFreeDuck (address,txIdStr) = if ((i.caller != getRebirthAddress()))
226- then throw("rebirth only")
259+ then throw("ISFD: rebirth only")
227260 else {
228261 let txId = fromBase58String(txIdStr)
229262 let hatchingStatusKey = getHatchingStatusKey(address, txId)
230263 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
231264 let totalDucksAmount = tryGetInteger("ducks_amount")
232265 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
233- let $t092179359 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
234- let duckGen = $t092179359._1
235- let farmGen = $t092179359._2
266+ let $t0994410106 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
267+ let duckGen = $t0994410106._1
268+ let farmGen = $t0994410106._2
269+ let jackpotRandomEntry = $t0994410106._3
236270 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
237271 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
238272 let assetId = calculateAssetId(asset)
239273 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
240274 let duckIdKey = getDuckIdKey(address, txId)
241- $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
275+ $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), jackpotRandomEntry, StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
242276 }
243277
244278
247281 func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != getRebirthAddress()))
248282 then (i.caller != this)
249283 else false)
250- then throw("admin or rebirth only")
284+ then throw("ISJ: admin or rebirth only")
251285 else {
252286 let txId = fromBase58String(txIdStr)
253287 let hatchingStatusKey = getHatchingStatusKey(address, txId)
254288 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
255289 let totalDucksAmount = tryGetInteger("ducks_amount")
256290 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
257- let $t01080810860 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
258- let duckGen = $t01080810860._1
259- let farmGen = $t01080810860._2
291+ let $t01158111633 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
292+ let duckGen = $t01158111633._1
293+ let farmGen = $t01158111633._2
260294 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
261295 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
262296 let assetId = calculateAssetId(asset)
263297 let duckIdKey = getDuckIdKey(address, txId)
264298 let valueDuckIdKeyExits = tryGetString(duckIdKey)
265299 if ((valueDuckIdKeyExits != ""))
266- then throw((("You will override following duckId :" + duckIdKey) + " make sure that your txId is unique!"))
300+ then throw((("ISJ: You will override following duckId :" + duckIdKey) + " make sure that your txId is unique!"))
267301 else $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) + 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
268302 }
269303
275309 if (if ((i.caller != getRebirthAddress()))
276310 then (i.caller != this)
277311 else false)
278- then throw("admin or rebirth only")
312+ then throw("IRR: admin or rebirth only")
279313 else {
280314 let duckGen = value(assetInfo(asset)).name
281315 let letter = takeRight(take(duckGen, 6), 1)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetString (key) = tryGetStringExternal(this, key)
1313
1414
1515 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
1616
1717
1818 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
1919
2020
2121 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
2222
2323
2424 func getSwopPromoAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_swopPromoAddress")))
2525
2626
2727 func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
2828
2929
3030 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
31+
32+
33+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
3134
3235
3336 let delayForHatching = 2
3437
3538 let typesAmount = 10
3639
3740 let RefererReward = 5
3841
3942 let HatchingStarted = "HATCHING_STARTED"
4043
4144 let HatchingFinished = "HATCHING_FINISHED"
4245
4346 func isLocked () = {
4447 let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
4548 match getInteger(masterAddress, "egglock") {
4649 case b: Int =>
4750 b
4851 case _ =>
4952 0
5053 }
5154 }
5255
5356
5457 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
5558
5659
5760 func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
5861
5962
6063 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
6164
6265
6366 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
6467
6568
6669 func tryGetInteger (key) = {
6770 let val = match getInteger(this, key) {
6871 case b: Int =>
6972 b
7073 case _ =>
7174 0
7275 }
7376 val
7477 }
7578
7679
7780 let discountCoefficient = tryGetInteger("discountCoefficient")
7881
7982 let saleCoefficient = tryGetInteger("saleCoefficient")
8083
8184 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
8285 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
83- let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
84- (toInt(randomHash, (offset * 8)) % variants)
86+ let randomHash = sha256(((base58'incubator' + txId) + value(randomSeedBlock.vrf)))
87+ (toInt(randomHash, offset) % variants)
8588 }
8689
8790
8891 func wasUniqueBorn (gen) = tryGetInteger(getDuckStatsKey(gen))
8992
9093
9194 func getRandomName (txId,hatchingFinishHeight) = {
92- let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 0)
93- if (if ((5 > jackpotRandom))
94- then (wasUniqueBorn("DUCK-WWPUZZLE-JU") == 0)
95+ let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 4)
96+ let entry = IntegerEntry("last_jackpot_random", jackpotRandom)
97+ if (if ((jackpotRandom > 495))
98+ then (wasUniqueBorn("DUCK-WWGRANJA-JU") == 0)
9599 else false)
96- then $Tuple2("DUCK-WWPUZZLE-JU", "1E1L1P1U2W2Z-J")
100+ then $Tuple3("DUCK-WWGRANJA-JU", "2A1G1J1N1R2W-J", entry)
97101 else {
98- let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
99- let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
102+ let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 5)
103+ let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 6)
100104 let color = if ((colorRandom == 0))
101105 then "Y"
102106 else if ((colorRandom == 1))
103107 then "G"
104108 else if ((colorRandom == 2))
105109 then "B"
106110 else "R"
107111 if ((typeRandom == 0))
108- then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
112+ then $Tuple3(("DUCK-HHHHHHHH-G" + color), "8H-G", entry)
109113 else if ((typeRandom == 1))
110- then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
114+ then $Tuple3(("DUCK-GGGGGGGG-G" + color), "8G-G", entry)
111115 else if ((typeRandom == 2))
112- then $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
113- else $Tuple2(("DUCK-KKKKKKKK-G" + color), "8K-G")
116+ then $Tuple3(("DUCK-IIIIIIII-G" + color), "8I-G", entry)
117+ else $Tuple3(("DUCK-KKKKKKKK-G" + color), "8K-G", entry)
114118 }
115119 }
116120
117121
118122 func countEggsNeededAmount (totalDucksAmount) = {
119123 let n = totalDucksAmount
120124 let g = discountCoefficient
121125 let s = saleCoefficient
122126 let t = typesAmount
123127 let price = pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN)
124128 if ((saleCoefficient == 0))
125129 then (price * 1000000)
126130 else (((price * 1000000) / 100) * (100 - saleCoefficient))
127131 }
128132
129133
134+func asInt (value) = match value {
135+ case int: Int =>
136+ int
137+ case _ =>
138+ throw("FAI: wrong type, expected: Int")
139+}
140+
141+
130142 @Callable(i)
131143 func configureOracle (oracle) = if ((i.caller != this))
132- then throw("admin only")
144+ then throw("ICU: admin only")
133145 else [StringEntry("static_oracleAddress", oracle)]
134146
135147
136148
137149 @Callable(i)
138150 func setDiscount (val) = if ((i.caller != this))
139- then throw("admin_only")
151+ then throw("ISD: admin_only")
140152 else [IntegerEntry("discountCoefficient", val)]
141153
142154
143155
144156 @Callable(i)
145157 func setSale (val) = if ((i.caller != this))
146- then throw("admin_only")
158+ then throw("ISS: admin_only")
147159 else [IntegerEntry("saleCoefficient", val)]
148160
149161
150162
151163 @Callable(i)
152164 func startDuckHatching (refererAddress) = if ((isLocked() > 0))
153- then throw("EGG operations are temporarily locked")
165+ then throw("ISDH: EGG operations are temporarily locked")
154166 else {
155167 let totalDucksAmount = tryGetInteger("ducks_amount")
156168 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
157- let firstPayment = value(i.payments[0])
158169 let results = [StringEntry(getHatchingStatusKey(toString(i.originCaller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.originCaller), i.transactionId), (height + delayForHatching)), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000))]
159- if ((i.caller == getBabyDuckAddress()))
160- then (results ++ [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)])
161- else if ((firstPayment.assetId != getEggAssetId()))
162- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
163- else if ((eggsNeeded > firstPayment.amount))
164- then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
165- else {
166- let refererReward = fraction(eggsNeeded, RefererReward, 100)
167- let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
168- if ((refCall == refCall))
169- then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), getEggAssetId())])
170- else throw("Strict value is not equal to itself.")
170+ let entry = if ((i.caller == getBabyDuckAddress()))
171+ then [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)]
172+ else {
173+ let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [eggsNeeded], nil))
174+ if ((amountPaidByCoupons == amountPaidByCoupons))
175+ then {
176+ let leftToPay = (eggsNeeded - amountPaidByCoupons)
177+ if ((leftToPay != 0))
178+ then {
179+ let firstPayment = value(i.payments[0])
180+ if ((firstPayment.assetId != getEggAssetId()))
181+ then throw(("ISDH: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
182+ else if ((leftToPay > firstPayment.amount))
183+ then throw(("ISDH: To hatch a duck you currently need the following amount of EGGlets: " + toString(leftToPay)))
184+ else {
185+ let refererReward = fraction(leftToPay, RefererReward, 100)
186+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
187+ if ((refCall == refCall))
188+ then {
189+ let payback = (firstPayment.amount - leftToPay)
190+ if ((payback > 0))
191+ then [ScriptTransfer(i.caller, payback, getEggAssetId())]
192+ else nil
193+ }
194+ else throw("Strict value is not equal to itself.")
195+ }
196+ }
197+ else nil
171198 }
199+ else throw("Strict value is not equal to itself.")
200+ }
201+ if ((entry == entry))
202+ then (results ++ entry)
203+ else throw("Strict value is not equal to itself.")
172204 }
173205
174206
175207
176208 @Callable(i)
177209 func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
178- then throw("EGG operations are temporarily locked")
210+ then throw("ISDHFA: EGG operations are temporarily locked")
179211 else if ((i.caller != getSwopPromoAddress()))
180- then throw("Pernission denied")
212+ then throw("ISDHFA: Permission denied")
181213 else {
182214 let totalDucksAmount = tryGetInteger("ducks_amount")
183215 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
184216 [StringEntry(getHatchingStatusKey(address, i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(address, i.transactionId), (height + delayForHatching)), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_promo"), true)]
185217 }
186218
187219
188220
189221 @Callable(i)
190222 func finishDuckHatching (txIdStr) = {
191223 let txId = fromBase58String(txIdStr)
192224 let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
193225 let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
194226 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
195227 let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
196228 case t: Boolean =>
197229 t
198230 case _ =>
199231 false
200232 }
201233 let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
202234 let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
203235 if ((hatchingTxStatus == HatchingFinished))
204236 then {
205237 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
206- throw(("The duck was hatched and claimed already, here is the folowing: " + duckId))
238+ throw(("IFDH: The duck was hatched and claimed already, here is the folowing: " + duckId))
207239 }
208240 else if ((hatchingFinishHeight > height))
209241 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
210242 else {
211- let $t079167982 = getRandomName(txId, hatchingFinishHeight)
212- let duckGen = $t079167982._1
213- let farmGen = $t079167982._2
243+ let $t085898675 = getRandomName(txId, hatchingFinishHeight)
244+ let duckGen = $t085898675._1
245+ let farmGen = $t085898675._2
246+ let jackpotRandomEntry = $t085898675._3
214247 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
215248 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
216249 let assetId = calculateAssetId(asset)
217250 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
218-[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), BooleanEntry((("duck_" + toBase58String(assetId)) + "_grown"), duckFromBaby), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(i.caller, 1, assetId)]
251+[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), BooleanEntry((("duck_" + toBase58String(assetId)) + "_grown"), duckFromBaby), IntegerEntry(getDuckStatsKey(duckGen), amount), jackpotRandomEntry, IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(i.caller, 1, assetId)]
219252 }
220253 }
221254
222255
223256
224257 @Callable(i)
225258 func issueFreeDuck (address,txIdStr) = if ((i.caller != getRebirthAddress()))
226- then throw("rebirth only")
259+ then throw("ISFD: rebirth only")
227260 else {
228261 let txId = fromBase58String(txIdStr)
229262 let hatchingStatusKey = getHatchingStatusKey(address, txId)
230263 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
231264 let totalDucksAmount = tryGetInteger("ducks_amount")
232265 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
233- let $t092179359 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
234- let duckGen = $t092179359._1
235- let farmGen = $t092179359._2
266+ let $t0994410106 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
267+ let duckGen = $t0994410106._1
268+ let farmGen = $t0994410106._2
269+ let jackpotRandomEntry = $t0994410106._3
236270 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
237271 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
238272 let assetId = calculateAssetId(asset)
239273 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
240274 let duckIdKey = getDuckIdKey(address, txId)
241- $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
275+ $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), jackpotRandomEntry, StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
242276 }
243277
244278
245279
246280 @Callable(i)
247281 func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != getRebirthAddress()))
248282 then (i.caller != this)
249283 else false)
250- then throw("admin or rebirth only")
284+ then throw("ISJ: admin or rebirth only")
251285 else {
252286 let txId = fromBase58String(txIdStr)
253287 let hatchingStatusKey = getHatchingStatusKey(address, txId)
254288 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
255289 let totalDucksAmount = tryGetInteger("ducks_amount")
256290 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
257- let $t01080810860 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
258- let duckGen = $t01080810860._1
259- let farmGen = $t01080810860._2
291+ let $t01158111633 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
292+ let duckGen = $t01158111633._1
293+ let farmGen = $t01158111633._2
260294 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
261295 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
262296 let assetId = calculateAssetId(asset)
263297 let duckIdKey = getDuckIdKey(address, txId)
264298 let valueDuckIdKeyExits = tryGetString(duckIdKey)
265299 if ((valueDuckIdKeyExits != ""))
266- then throw((("You will override following duckId :" + duckIdKey) + " make sure that your txId is unique!"))
300+ then throw((("ISJ: You will override following duckId :" + duckIdKey) + " make sure that your txId is unique!"))
267301 else $Tuple2([IntegerEntry(getHatchingFinishHeightKey(address, txId), height), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) + 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) + 1)), asset, ScriptTransfer(value(addressFromString(address)), 1, assetId)], toBase58String(assetId))
268302 }
269303
270304
271305
272306 @Callable(i)
273307 func reduceRarity (assetId,fGen) = {
274308 let asset = fromBase58String(assetId)
275309 if (if ((i.caller != getRebirthAddress()))
276310 then (i.caller != this)
277311 else false)
278- then throw("admin or rebirth only")
312+ then throw("IRR: admin or rebirth only")
279313 else {
280314 let duckGen = value(assetInfo(asset)).name
281315 let letter = takeRight(take(duckGen, 6), 1)
282316 let farmGen = (("8" + letter) + "-G")
283317 [IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
284318 }
285319 }
286320
287321
288322 @Verifier(tx)
289323 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
290324

github/deemru/w8io/3ef1775 
69.73 ms