2022.08.09 14:39 [3242363] smart account 3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv > SELF 0.00000000 Waves

{ "type": 13, "id": "7fRSjEQFutTMnkCb55cN1ZTTjsUN5oU8gdehCPxNAw2K", "fee": 2000000, "feeAssetId": null, "timestamp": 1660045218894, "version": 2, "chainId": 87, "sender": "3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv", "senderPublicKey": "EBHsV7TQYm4qS2V7iZXEXwcbUdEYQyCSLEdY2AMvLPns", "proofs": [ "3Spb62ZYijdTxyH3uR9UDMkKvuuq1uyERd2hibpGzTSPT5hUxBwtpEVrCwW5Pm231QxKA9c9U6cjvxp9Dg16RR9D" ], "script": "base64:AAIFAAAAAAAAADkIAhIDCgEIEgMKAQESAwoBARIDCgEIEgMKAQgSAwoBCBIECgIICBIFCgMICAgSBAoCCAgSBAoCCAgAAAAdAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX3JlYmlydGhBZGRyZXNzAQAAABNnZXRTd29wUHJvbW9BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfc3dvcFByb21vQWRkcmVzcwEAAAASZ2V0QmFieUR1Y2tBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABZzdGF0aWNfYmFieUR1Y2tBZGRyZXNzAQAAABVnZXRSZWZDb250cmFjdEFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAGXN0YXRpY19yZWZDb250cmFjdEFkZHJlc3MBAAAAEWdldENvdXBvbnNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfY291cG9uc0FkZHJlc3MBAAAADmdldEJ1cm5BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABJzdGF0aWNfYnVybkFkZHJlc3MAAAAAEGRlbGF5Rm9ySGF0Y2hpbmcAAAAAAAAAAAIAAAAAC3R5cGVzQW1vdW50AAAAAAAAAAAKAAAAAA1SZWZlcmVyUmV3YXJkAAAAAAAAAAAFAAAAAA9IYXRjaGluZ1N0YXJ0ZWQCAAAAEEhBVENISU5HX1NUQVJURUQAAAAAEEhhdGNoaW5nRmluaXNoZWQCAAAAEUhBVENISU5HX0ZJTklTSEVEAQAAAAhpc0xvY2tlZAAAAAAEAAAADW1hc3RlckFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeIsgYh8IDKQaIyACMe/6mJIkg53XAWyQkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAANbWFzdGVyQWRkcmVzcwIAAAAHZWdnbG9jawMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAABRnZXRIYXRjaGluZ1N0YXR1c0tleQAAAAIAAAAHYWRkcmVzcwAAAAR0eElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAAFfCQACWAAAAAEFAAAABHR4SWQCAAAAB19zdGF0dXMBAAAAGmdldEhhdGNoaW5nRmluaXNoSGVpZ2h0S2V5AAAAAgAAAAdhZGRyZXNzAAAABHR4SWQJAAEsAAAAAgkAASwAAAAC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bAAAAAFpAQAAABFzdGFydER1Y2tIYXRjaGluZwAAAAEAAAAOcmVmZXJlckFkZHJlc3MDCQAAZgAAAAIJAQAAAAhpc0xvY2tlZAAAAAAAAAAAAAAAAAAJAAACAAAAAQIAAAArSVNESDogRUdHIG9wZXJhdGlvbnMgYXJlIHRlbXBvcmFyaWx5IGxvY2tlZAQAAAAQdG90YWxEdWNrc0Ftb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAAxkdWNrc19hbW91bnQEAAAACmVnZ3NOZWVkZWQJAQAAABVjb3VudEVnZ3NOZWVkZWRBbW91bnQAAAABBQAAABB0b3RhbER1Y2tzQW1vdW50BAAAAAdyZXN1bHRzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRnZXRIYXRjaGluZ1N0YXR1c0tleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAA9IYXRjaGluZ1N0YXJ0ZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JIYXRjaGluZwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAMZHVja3NfYW1vdW50CQAAZAAAAAIFAAAAEHRvdGFsRHVja3NBbW91bnQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEGR1Y2tzX2xhc3RfcHJpY2UJAABpAAAAAgUAAAAKZWdnc05lZWRlZAAAAAAAAA9CQAUAAAADbmlsBAAAAAVlbnRyeQMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAASZ2V0QmFieUR1Y2tBZGRyZXNzAAAAAAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACWhhdGNoaW5nXwkAAlgAAAABCAUAAAABaQAAAA10cmFu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IG9wZXJhdGlvbnMgYXJlIHRlbXBvcmFyaWx5IGxvY2tlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAE2dldFN3b3BQcm9tb0FkZHJlc3MAAAAACQAAAgAAAAECAAAAGUlTREhGQTogUGVybWlzc2lvbiBkZW5pZWQEAAAAEHRvdGFsRHVja3NBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAMZHVja3NfYW1vdW50BAAAAAplZ2dzTmVlZGVkCQEAAAAVY291bnRFZ2dzTmVlZGVkQW1vdW50AAAAAQUAAAAQdG90YWxEdWNrc0Ftb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0SGF0Y2hpbmdTdGF0dXNLZXkAAAACBQAAAAdhZGRyZXNzCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAA9IYXRjaGluZ1N0YXJ0ZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIFAAAAB2FkZHJlc3MIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABBkZWxheUZvckhhdGNoaW5nCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAxkdWNrc19hbW91bnQJAABkAAAAAgUAAAAQdG90YWxEdWNrc0Ftb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQZHVja3NfbGFzdF9wcmljZQkAAGkAAAACBQAAAAplZ2dzTmVlZGVkAAAAAAAAD0JACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJaGF0Y2hpbmdfCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQCAAAABl9wcm9tbwYFAAAAA25pbAAAAAFpAQAAABJmaW5pc2hEdWNrSGF0Y2hpbmcAAAABAAAAB3R4SWRTdHIEAAAABW93bmVyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkBAAAAFmZpbmlzaEhhdGNoaW5nSW50ZXJuYWwAAAACBQAAAAd0eElkU3RyBQAAAAVvd25lcgAAAAFpAQAAAA1pc3N1ZUZyZWVEdWNrAAAAAgAAAAdhZGRyZXNzAAAAB3R4SWRTdHIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIJAQAAABFnZXRSZWJpcnRoQWRkcmVzcwAAAAAJAAACAAAAAQIAAAASSVNGRDogcmViaXJ0aCBvbmx5BAAAAAR0eElkCQACWQAAAAEFAAAAB3R4SWRTdHIEAAAAEWhhdGNoaW5nU3RhdHVzS2V5CQEAAAAUZ2V0SGF0Y2hpbmdTdGF0dXNLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBAAAAA9maW5pc2hIZWlnaHRLZXkJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIFAAAAB2FkZHJlc3MFAAAABHR4SWQEAAAAEHRvdGFsRHVja3NBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAMZHVja3NfYW1vdW50BAAAAAplZ2dzTmVlZGVkCQEAAAAVY291bnRFZ2dzTmVlZGVkQW1vdW50AAAAAQUAAAAQdG90YWxEdWNrc0Ftb3VudAQAAAANJHQwMTAzMDExMDQ2MwkBAAAADWdldFJhbmRvbU5hbWUAAAACBQAAAAR0eElkCQAAZAAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+kAAAABBQAAAAR0eElkCQABLAAAAAIJAAEsAAAAAgUAAAAHdHhJZFN0cgIAAAALIG5vdCBmb3VuZCAJAAJYAAAAAQUAAAAEdHhJZAAAAAAAAAAAAQQAAAAHZHVja0dlbggFAAAADSR0MDEwMzAxMTA0NjMAAAACXzEEAAAAB2Zhcm1HZW4IBQAAAA0kdDAxMDMwMTEwNDYzAAAAAl8yBAAAABJqYWNrcG90UmFuZG9tRW50cnkIBQAAAA0kdDAxMDMwMTEwNDYzAAAAAl8zBAAAAAtkZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAICAAAADnsiZ2Vub3R5cGUiOiAiBQAAAAdkdWNrR2VuAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAHBQAAAAdkdWNrR2VuBQAA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", "height": 3242363, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FWCr7BUNsk28RhNHyX3CR8PFjxV4wUFQtu3UUxLNWXPv Next: 9F7mYBjQfkrFJ7LW5FUVaXvYThvrrvXY3nkwnY6H8LMW Diff:
OldNewDifferences
142142 }
143143
144144
145+func finishHatchingInternal (txIdStr,owner) = {
146+ let txId = fromBase58String(txIdStr)
147+ let hatchingStatusKey = getHatchingStatusKey(owner, txId)
148+ let finishHeightKey = getHatchingFinishHeightKey(owner, txId)
149+ let duckIdKey = getDuckIdKey(owner, txId)
150+ let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
151+ case t: Boolean =>
152+ t
153+ case _ =>
154+ false
155+ }
156+ let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
157+ let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
158+ if ((hatchingTxStatus == HatchingFinished))
159+ then {
160+ let duckId = getStringValue(this, getDuckIdKey(owner, txId))
161+ throw(("IFDH: The duck was hatched and claimed already, here is the folowing: " + duckId))
162+ }
163+ else if ((hatchingFinishHeight > height))
164+ then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
165+ else {
166+ let $t055245610 = getRandomName(txId, hatchingFinishHeight)
167+ let duckGen = $t055245610._1
168+ let farmGen = $t055245610._2
169+ let jackpotRandomEntry = $t055245610._3
170+ let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
171+ let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
172+ let assetId = calculateAssetId(asset)
173+ let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
174+[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(Address(fromBase58String(owner)), 1, assetId)]
175+ }
176+ }
177+
178+
145179 @Callable(i)
146180 func configureOracle (oracle) = if ((i.caller != this))
147181 then throw("ICU: admin only")
228262
229263 @Callable(i)
230264 func finishDuckHatching (txIdStr) = {
231- let txId = fromBase58String(txIdStr)
232- let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
233- let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
234- let duckIdKey = getDuckIdKey(toString(i.caller), txId)
235- let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
236- case t: Boolean =>
237- t
238- case _ =>
239- false
240- }
241- let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
242- let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
243- if ((hatchingTxStatus == HatchingFinished))
244- then {
245- let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
246- throw(("IFDH: The duck was hatched and claimed already, here is the folowing: " + duckId))
247- }
248- else if ((hatchingFinishHeight > height))
249- then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
250- else {
251- let $t088328918 = getRandomName(txId, hatchingFinishHeight)
252- let duckGen = $t088328918._1
253- let farmGen = $t088328918._2
254- let jackpotRandomEntry = $t088328918._3
255- let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
256- let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
257- let assetId = calculateAssetId(asset)
258- let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
259-[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)]
260- }
265+ let owner = toString(i.originCaller)
266+ finishHatchingInternal(txIdStr, owner)
261267 }
262268
263269
271277 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
272278 let totalDucksAmount = tryGetInteger("ducks_amount")
273279 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
274- let $t01018710349 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
275- let duckGen = $t01018710349._1
276- let farmGen = $t01018710349._2
277- let jackpotRandomEntry = $t01018710349._3
280+ let $t01030110463 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
281+ let duckGen = $t01030110463._1
282+ let farmGen = $t01030110463._2
283+ let jackpotRandomEntry = $t01030110463._3
278284 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
279285 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
280286 let assetId = calculateAssetId(asset)
296302 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
297303 let totalDucksAmount = tryGetInteger("ducks_amount")
298304 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
299- let $t01182411876 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
300- let duckGen = $t01182411876._1
301- let farmGen = $t01182411876._2
305+ let $t01193811990 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
306+ let duckGen = $t01193811990._1
307+ let farmGen = $t01193811990._2
302308 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
303309 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
304310 let assetId = calculateAssetId(asset)
327333 }
328334
329335
336+
337+@Callable(i)
338+func finishDuckHatchingAdmin (txIdStr,owner) = if ((i.caller != this))
339+ then throw("IFDHA: Only admins can run this!")
340+ else finishHatchingInternal(txIdStr, owner)
341+
342+
330343 @Verifier(tx)
331344 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
332345
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")))
3131
3232
3333 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
3434
3535
3636 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
3737
3838
3939 let delayForHatching = 2
4040
4141 let typesAmount = 10
4242
4343 let RefererReward = 5
4444
4545 let HatchingStarted = "HATCHING_STARTED"
4646
4747 let HatchingFinished = "HATCHING_FINISHED"
4848
4949 func isLocked () = {
5050 let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
5151 match getInteger(masterAddress, "egglock") {
5252 case b: Int =>
5353 b
5454 case _ =>
5555 0
5656 }
5757 }
5858
5959
6060 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
6161
6262
6363 func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
6464
6565
6666 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
6767
6868
6969 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
7070
7171
7272 func tryGetInteger (key) = {
7373 let val = match getInteger(this, key) {
7474 case b: Int =>
7575 b
7676 case _ =>
7777 0
7878 }
7979 val
8080 }
8181
8282
8383 let discountCoefficient = tryGetInteger("discountCoefficient")
8484
8585 let saleCoefficient = tryGetInteger("saleCoefficient")
8686
8787 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
8888 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
8989 let randomHash = sha256(((base58'incubator' + txId) + value(randomSeedBlock.vrf)))
9090 (toInt(randomHash, offset) % variants)
9191 }
9292
9393
9494 func wasUniqueBorn (gen) = tryGetInteger(getDuckStatsKey(gen))
9595
9696
9797 func getRandomName (txId,hatchingFinishHeight) = {
9898 let jackpotRandom = getRandomNumber(1000, txId, hatchingFinishHeight, 4)
9999 let entry = IntegerEntry("last_jackpot_random", jackpotRandom)
100100 if (if ((jackpotRandom == 512))
101101 then (wasUniqueBorn("DUCK-WWWWALEX-JU") == 0)
102102 else false)
103103 then $Tuple3("DUCK-WWWWALEX-JU", "1A1E1L4W1X-J", entry)
104104 else {
105105 let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 5)
106106 let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 6)
107107 let color = if ((colorRandom == 0))
108108 then "Y"
109109 else if ((colorRandom == 1))
110110 then "G"
111111 else if ((colorRandom == 2))
112112 then "B"
113113 else "R"
114114 if ((typeRandom == 0))
115115 then $Tuple3(("DUCK-HHHHHHHH-G" + color), "8H-G", entry)
116116 else if ((typeRandom == 1))
117117 then $Tuple3(("DUCK-GGGGGGGG-G" + color), "8G-G", entry)
118118 else if ((typeRandom == 2))
119119 then $Tuple3(("DUCK-IIIIIIII-G" + color), "8I-G", entry)
120120 else $Tuple3(("DUCK-KKKKKKKK-G" + color), "8K-G", entry)
121121 }
122122 }
123123
124124
125125 func countEggsNeededAmount (totalDucksAmount) = {
126126 let n = totalDucksAmount
127127 let g = discountCoefficient
128128 let s = saleCoefficient
129129 let t = typesAmount
130130 let price = pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN)
131131 if ((saleCoefficient == 0))
132132 then (price * 1000000)
133133 else (((price * 1000000) / 100) * (100 - saleCoefficient))
134134 }
135135
136136
137137 func asInt (value) = match value {
138138 case int: Int =>
139139 int
140140 case _ =>
141141 throw("IAI: wrong type, expected: Int")
142142 }
143143
144144
145+func finishHatchingInternal (txIdStr,owner) = {
146+ let txId = fromBase58String(txIdStr)
147+ let hatchingStatusKey = getHatchingStatusKey(owner, txId)
148+ let finishHeightKey = getHatchingFinishHeightKey(owner, txId)
149+ let duckIdKey = getDuckIdKey(owner, txId)
150+ let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
151+ case t: Boolean =>
152+ t
153+ case _ =>
154+ false
155+ }
156+ let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
157+ let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
158+ if ((hatchingTxStatus == HatchingFinished))
159+ then {
160+ let duckId = getStringValue(this, getDuckIdKey(owner, txId))
161+ throw(("IFDH: The duck was hatched and claimed already, here is the folowing: " + duckId))
162+ }
163+ else if ((hatchingFinishHeight > height))
164+ then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
165+ else {
166+ let $t055245610 = getRandomName(txId, hatchingFinishHeight)
167+ let duckGen = $t055245610._1
168+ let farmGen = $t055245610._2
169+ let jackpotRandomEntry = $t055245610._3
170+ let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
171+ let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
172+ let assetId = calculateAssetId(asset)
173+ let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
174+[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(Address(fromBase58String(owner)), 1, assetId)]
175+ }
176+ }
177+
178+
145179 @Callable(i)
146180 func configureOracle (oracle) = if ((i.caller != this))
147181 then throw("ICU: admin only")
148182 else [StringEntry("static_oracleAddress", oracle)]
149183
150184
151185
152186 @Callable(i)
153187 func setDiscount (val) = if ((i.caller != this))
154188 then throw("ISD: admin_only")
155189 else [IntegerEntry("discountCoefficient", val)]
156190
157191
158192
159193 @Callable(i)
160194 func setSale (val) = if ((i.caller != this))
161195 then throw("ISS: admin_only")
162196 else [IntegerEntry("saleCoefficient", val)]
163197
164198
165199
166200 @Callable(i)
167201 func startDuckHatching (refererAddress) = if ((isLocked() > 0))
168202 then throw("ISDH: EGG operations are temporarily locked")
169203 else {
170204 let totalDucksAmount = tryGetInteger("ducks_amount")
171205 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
172206 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))]
173207 let entry = if ((i.caller == getBabyDuckAddress()))
174208 then [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)]
175209 else {
176210 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [eggsNeeded], nil))
177211 if ((amountPaidByCoupons == amountPaidByCoupons))
178212 then {
179213 let leftToPay = (eggsNeeded - amountPaidByCoupons)
180214 if ((leftToPay != 0))
181215 then {
182216 let firstPayment = value(i.payments[0])
183217 if ((firstPayment.assetId != getEggAssetId()))
184218 then throw(("ISDH: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
185219 else if ((leftToPay > firstPayment.amount))
186220 then throw(("ISDH: To hatch a duck you currently need the following amount of EGGlets: " + toString(leftToPay)))
187221 else {
188222 let refererReward = fraction(leftToPay, RefererReward, 100)
189223 let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
190224 if ((refCall == refCall))
191225 then {
192226 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererReward))])
193227 if ((burnCall == burnCall))
194228 then {
195229 let payback = (firstPayment.amount - leftToPay)
196230 if ((payback > 0))
197231 then [ScriptTransfer(i.caller, payback, getEggAssetId())]
198232 else nil
199233 }
200234 else throw("Strict value is not equal to itself.")
201235 }
202236 else throw("Strict value is not equal to itself.")
203237 }
204238 }
205239 else nil
206240 }
207241 else throw("Strict value is not equal to itself.")
208242 }
209243 if ((entry == entry))
210244 then (results ++ entry)
211245 else throw("Strict value is not equal to itself.")
212246 }
213247
214248
215249
216250 @Callable(i)
217251 func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
218252 then throw("ISDHFA: EGG operations are temporarily locked")
219253 else if ((i.caller != getSwopPromoAddress()))
220254 then throw("ISDHFA: Permission denied")
221255 else {
222256 let totalDucksAmount = tryGetInteger("ducks_amount")
223257 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
224258 [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)]
225259 }
226260
227261
228262
229263 @Callable(i)
230264 func finishDuckHatching (txIdStr) = {
231- let txId = fromBase58String(txIdStr)
232- let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
233- let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
234- let duckIdKey = getDuckIdKey(toString(i.caller), txId)
235- let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
236- case t: Boolean =>
237- t
238- case _ =>
239- false
240- }
241- let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
242- let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
243- if ((hatchingTxStatus == HatchingFinished))
244- then {
245- let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
246- throw(("IFDH: The duck was hatched and claimed already, here is the folowing: " + duckId))
247- }
248- else if ((hatchingFinishHeight > height))
249- then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
250- else {
251- let $t088328918 = getRandomName(txId, hatchingFinishHeight)
252- let duckGen = $t088328918._1
253- let farmGen = $t088328918._2
254- let jackpotRandomEntry = $t088328918._3
255- let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
256- let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
257- let assetId = calculateAssetId(asset)
258- let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
259-[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)]
260- }
265+ let owner = toString(i.originCaller)
266+ finishHatchingInternal(txIdStr, owner)
261267 }
262268
263269
264270
265271 @Callable(i)
266272 func issueFreeDuck (address,txIdStr) = if ((i.caller != getRebirthAddress()))
267273 then throw("ISFD: rebirth only")
268274 else {
269275 let txId = fromBase58String(txIdStr)
270276 let hatchingStatusKey = getHatchingStatusKey(address, txId)
271277 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
272278 let totalDucksAmount = tryGetInteger("ducks_amount")
273279 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
274- let $t01018710349 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
275- let duckGen = $t01018710349._1
276- let farmGen = $t01018710349._2
277- let jackpotRandomEntry = $t01018710349._3
280+ let $t01030110463 = getRandomName(txId, (valueOrErrorMessage(transactionHeightById(txId), ((txIdStr + " not found ") + toBase58String(txId))) + 1))
281+ let duckGen = $t01030110463._1
282+ let farmGen = $t01030110463._2
283+ let jackpotRandomEntry = $t01030110463._3
278284 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
279285 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
280286 let assetId = calculateAssetId(asset)
281287 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
282288 let duckIdKey = getDuckIdKey(address, txId)
283289 $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))
284290 }
285291
286292
287293
288294 @Callable(i)
289295 func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != getRebirthAddress()))
290296 then (i.caller != this)
291297 else false)
292298 then throw("ISJ: admin or rebirth only")
293299 else {
294300 let txId = fromBase58String(txIdStr)
295301 let hatchingStatusKey = getHatchingStatusKey(address, txId)
296302 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
297303 let totalDucksAmount = tryGetInteger("ducks_amount")
298304 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
299- let $t01182411876 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
300- let duckGen = $t01182411876._1
301- let farmGen = $t01182411876._2
305+ let $t01193811990 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
306+ let duckGen = $t01193811990._1
307+ let farmGen = $t01193811990._2
302308 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
303309 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
304310 let assetId = calculateAssetId(asset)
305311 let duckIdKey = getDuckIdKey(address, txId)
306312 let valueDuckIdKeyExits = tryGetString(duckIdKey)
307313 if ((valueDuckIdKeyExits != ""))
308314 then throw((("ISJ: You will override following duckId :" + duckIdKey) + " make sure that your txId is unique!"))
309315 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))
310316 }
311317
312318
313319
314320 @Callable(i)
315321 func reduceRarity (assetId,fGen) = {
316322 let asset = fromBase58String(assetId)
317323 if (if ((i.caller != getRebirthAddress()))
318324 then (i.caller != this)
319325 else false)
320326 then throw("IRR: admin or rebirth only")
321327 else {
322328 let duckGen = value(assetInfo(asset)).name
323329 let letter = takeRight(take(duckGen, 6), 1)
324330 let farmGen = (("8" + letter) + "-G")
325331 [IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
326332 }
327333 }
328334
329335
336+
337+@Callable(i)
338+func finishDuckHatchingAdmin (txIdStr,owner) = if ((i.caller != this))
339+ then throw("IFDHA: Only admins can run this!")
340+ else finishHatchingInternal(txIdStr, owner)
341+
342+
330343 @Verifier(tx)
331344 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
332345

github/deemru/w8io/786bc32 
78.27 ms