tx · 7HbhscT1Asfa75kZm4gu9Bj3cLidrcmsoYrCGJ1vPeUK

3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv:  -0.01400000 Waves

2022.05.10 11:03 [3110807] smart account 3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv > SELF 0.00000000 Waves

{ "type": 13, "id": "7HbhscT1Asfa75kZm4gu9Bj3cLidrcmsoYrCGJ1vPeUK", "fee": 1400000, "feeAssetId": null, "timestamp": 1652169818823, "version": 2, "chainId": 87, "sender": "3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv", "senderPublicKey": "EBHsV7TQYm4qS2V7iZXEXwcbUdEYQyCSLEdY2AMvLPns", "proofs": [ "oVbXhX71EQSU53LqLam4Re4oxg1qk5AhnFzFuMV7GF3CYkeHXCU38Jh8hM9VHJgze9h96yMkQBKpf5agpjDmFgU" ], "script": "base64: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AAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABlAAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQFAAAACmVnZ3NOZWVkZWQJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABtzdGFydER1Y2tIYXRjaGluZ0ZvckFkZHJlc3MAAAABAAAAB2FkZHJlc3MDCQAAZgAAAAIJAQAAAAhpc0xvY2tlZAAAAAAAAAAAAAAAAAAJAAACAAAAAQIAAAAlRUdHIG9wZXJhdGlvbnMgYXJlIHRlbXBvcmFyaWx5IGxvY2tlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAE2dldFN3b3BQcm9tb0FkZHJlc3MAAAAACQAAAgAAAAECAAAAEVBlcm5pc3Npb24gZGVuaWVkBAAAABB0b3RhbER1Y2tzQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADGR1Y2tzX2Ftb3VudAQAAAAKZWdnc05lZWRlZAkBAAAAFWNvdW50RWdnc05lZWRlZEFtb3VudAAAAAEFAAAAEHRvdGFsRHVja3NBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGdldEhhdGNoaW5nU3RhdHVzS2V5AAAAAgUAAAAHYWRkcmVzcwgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAPSGF0Y2hpbmdTdGFydGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACBQAAAAdhZGRyZXNzCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JIYXRjaGluZwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAMZHVja3NfYW1vdW50CQAAZAAAAAIFAAAAEHRvdGFsRHVja3NBbW91bnQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAA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aW5nU3RhdHVzS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBAAAABB0b3RhbER1Y2tzQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADGR1Y2tzX2Ftb3VudAQAAAAKZWdnc05lZWRlZAkBAAAAFWNvdW50RWdnc05lZWRlZEFtb3VudAAAAAEFAAAAEHRvdGFsRHVja3NBbW91bnQEAAAADSR0MDExMDA5MTEwNjEJAAUUAAAAAgkAASwAAAACCQABLAAAAAICAAAABURVQ0stBQAAAANnZW4CAAAAAy1KVQIAAAAEOFctSgQAAAAHZHVja0dlbggFAAAADSR0MDExMDA5MTEwNjEAAAACXzEEAAAAB2Zhcm1HZW4IBQAAAA0kdDAxMTAwOTExMDYxAAAAAl8yBAAAAAtkZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAICAAAADnsiZ2Vub3R5cGUiOiAiBQAAAAdkdWNrR2VuAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAHBQAAAAdkdWNrR2VuBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAQAAAAAAAAAAAAcFAAAABHVuaXQFAAAABmhlaWdodAQAAAAHYXNzZXRJZAkABDgAAAABBQAAAAVhc3NldAQAAAAJZHVja0lkS2V5CQEAAAAMZ2V0RHVja0lkS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAEdHhJZAkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADGR1Y2tzX2Ftb3VudAkAAGQAAAACBQAAABB0b3RhbER1Y2tzQW1vdW50AAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABBkdWNrc19sYXN0X3ByaWNl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", "height": 3110807, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3HemMfwDzGZpgoeU3ddFcRGMvyDCqExhYSEntMSHg7bW Next: 5DpstjBTVhVkf8ZbDGgQpxtAbLETsR8CvrWbm9j8pqn7 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let eggsAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'
4+func tryGetStringExternal (address,key) = match getString(address, key) {
5+ case a: String =>
6+ a
7+ case _ =>
8+ ""
9+}
10+
11+
12+func tryGetString (key) = tryGetStringExternal(this, key)
13+
14+
15+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
16+
17+
18+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
19+
20+
21+func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
22+
23+
24+func getSwopPromoAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_swopPromoAddress")))
25+
26+
27+func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
28+
29+
30+func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
31+
532
633 let delayForHatching = 2
734
835 let typesAmount = 10
9-
10-let refContractAddress = base58'3P8ejTkfRpz9WqCwCuihesNXU5k3zmFFfVe'
1136
1237 let RefererReward = 5
1338
1439 let HatchingStarted = "HATCHING_STARTED"
1540
1641 let HatchingFinished = "HATCHING_FINISHED"
17-
18-let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ'
19-
20-let babyDucksAddress = base58'3PKmLiGEfqLWMC1H9xhzqvAZKUXfFm8uoeg'
21-
22-let swopPromoAddress = base58'3P6s9C39Ak5FAQ3F5VapYJ3ULxgbsAReXWD'
2342
2443 func isLocked () = {
2544 let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
5675
5776
5877 let discountCoefficient = tryGetInteger("discountCoefficient")
78+
79+let saleCoefficient = tryGetInteger("saleCoefficient")
5980
6081 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
6182 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
105126 func countEggsNeededAmount (totalDucksAmount) = {
106127 let n = totalDucksAmount
107128 let g = discountCoefficient
129+ let s = saleCoefficient
108130 let t = typesAmount
109131 let price = pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN)
110- (price * 1000000)
132+ if ((saleCoefficient == 0))
133+ then (price * 1000000)
134+ else (((price * 1000000) / 100) * (100 - saleCoefficient))
111135 }
136+
137+
138+@Callable(i)
139+func configureOracle (oracle) = if ((i.caller != this))
140+ then throw("admin only")
141+ else [StringEntry("static_oracleAddress", oracle)]
142+
112143
113144
114145 @Callable(i)
115146 func setDiscount (val) = if ((i.caller != this))
116147 then throw("admin_only")
117148 else [IntegerEntry("discountCoefficient", val)]
149+
150+
151+
152+@Callable(i)
153+func setSale (val) = if ((i.caller != this))
154+ then throw("admin_only")
155+ else [IntegerEntry("saleCoefficient", val)]
118156
119157
120158
126164 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
127165 let firstPayment = value(i.payments[0])
128166 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))]
129- if ((i.caller == Address(babyDucksAddress)))
167+ if ((i.caller == getBabyDuckAddress()))
130168 then (results ++ [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)])
131- else if ((firstPayment.assetId != eggsAssetId))
132- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
169+ else if ((firstPayment.assetId != getEggAssetId()))
170+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
133171 else if ((eggsNeeded > firstPayment.amount))
134172 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
135173 else {
136174 let refererReward = fraction(eggsNeeded, RefererReward, 100)
137- let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
175+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
138176 if ((refCall == refCall))
139- then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)])
177+ then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), getEggAssetId())])
140178 else throw("Strict value is not equal to itself.")
141179 }
142180 }
146184 @Callable(i)
147185 func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
148186 then throw("EGG operations are temporarily locked")
149- else if ((i.caller != Address(swopPromoAddress)))
187+ else if ((i.caller != getSwopPromoAddress()))
150188 then throw("Pernission denied")
151189 else {
152190 let totalDucksAmount = tryGetInteger("ducks_amount")
178216 else if ((hatchingFinishHeight > height))
179217 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
180218 else {
181- let $t067706836 = getRandomName(txId, hatchingFinishHeight)
182- let duckGen = $t067706836._1
183- let farmGen = $t067706836._2
219+ let $t081748240 = getRandomName(txId, hatchingFinishHeight)
220+ let duckGen = $t081748240._1
221+ let farmGen = $t081748240._2
184222 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
185223 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
186224 let assetId = calculateAssetId(asset)
192230
193231
194232 @Callable(i)
195-func issueFreeDuck (address,txIdStr) = if ((i.caller != Address(rebirthAddress)))
233+func issueFreeDuck (address,txIdStr) = if ((i.caller != getRebirthAddress()))
196234 then throw("rebirth only")
197235 else {
198236 let txId = fromBase58String(txIdStr)
200238 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
201239 let totalDucksAmount = tryGetInteger("ducks_amount")
202240 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
203- let $t080758160 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
204- let duckGen = $t080758160._1
205- let farmGen = $t080758160._2
241+ let $t094759560 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
242+ let duckGen = $t094759560._1
243+ let farmGen = $t094759560._2
206244 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
207245 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
208246 let assetId = calculateAssetId(asset)
214252
215253
216254 @Callable(i)
217-func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != Address(rebirthAddress)))
255+func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != getRebirthAddress()))
218256 then (i.caller != this)
219257 else false)
220258 then throw("admin or rebirth only")
224262 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
225263 let totalDucksAmount = tryGetInteger("ducks_amount")
226264 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
227- let $t096139665 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
228- let duckGen = $t096139665._1
229- let farmGen = $t096139665._2
265+ let $t01100911061 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
266+ let duckGen = $t01100911061._1
267+ let farmGen = $t01100911061._2
230268 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
231269 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
232270 let assetId = calculateAssetId(asset)
239277 @Callable(i)
240278 func reduceRarity (assetId,fGen) = {
241279 let asset = fromBase58String(assetId)
242- if (if ((i.caller != Address(rebirthAddress)))
280+ if (if ((i.caller != getRebirthAddress()))
243281 then (i.caller != this)
244282 else false)
245283 then throw("admin or rebirth only")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let eggsAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'
4+func tryGetStringExternal (address,key) = match getString(address, key) {
5+ case a: String =>
6+ a
7+ case _ =>
8+ ""
9+}
10+
11+
12+func tryGetString (key) = tryGetStringExternal(this, key)
13+
14+
15+func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
16+
17+
18+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
19+
20+
21+func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress")))
22+
23+
24+func getSwopPromoAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_swopPromoAddress")))
25+
26+
27+func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
28+
29+
30+func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
31+
532
633 let delayForHatching = 2
734
835 let typesAmount = 10
9-
10-let refContractAddress = base58'3P8ejTkfRpz9WqCwCuihesNXU5k3zmFFfVe'
1136
1237 let RefererReward = 5
1338
1439 let HatchingStarted = "HATCHING_STARTED"
1540
1641 let HatchingFinished = "HATCHING_FINISHED"
17-
18-let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ'
19-
20-let babyDucksAddress = base58'3PKmLiGEfqLWMC1H9xhzqvAZKUXfFm8uoeg'
21-
22-let swopPromoAddress = base58'3P6s9C39Ak5FAQ3F5VapYJ3ULxgbsAReXWD'
2342
2443 func isLocked () = {
2544 let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
2645 match getInteger(masterAddress, "egglock") {
2746 case b: Int =>
2847 b
2948 case _ =>
3049 0
3150 }
3251 }
3352
3453
3554 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
3655
3756
3857 func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
3958
4059
4160 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
4261
4362
4463 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
4564
4665
4766 func tryGetInteger (key) = {
4867 let val = match getInteger(this, key) {
4968 case b: Int =>
5069 b
5170 case _ =>
5271 0
5372 }
5473 val
5574 }
5675
5776
5877 let discountCoefficient = tryGetInteger("discountCoefficient")
78+
79+let saleCoefficient = tryGetInteger("saleCoefficient")
5980
6081 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
6182 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
6283 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
6384 (toInt(randomHash, (offset * 8)) % variants)
6485 }
6586
6687
6788 func wasUniqueBorn (gen) = tryGetInteger(getDuckStatsKey(gen))
6889
6990
7091 func getRandomName (txId,hatchingFinishHeight) = {
7192 let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 0)
7293 if (if ((5 > jackpotRandom))
7394 then (wasUniqueBorn("DUCK-WWZETKIN-JU") == 0)
7495 else false)
7596 then $Tuple2("DUCK-WWZETKIN-JU", "1E1I1K1N1T1U2W1Z-J")
7697 else if (if ((10 > jackpotRandom))
7798 then (wasUniqueBorn("DUCK-WWWWMARG-JU") == 0)
7899 else false)
79100 then $Tuple2("DUCK-WWWWMARG-JU", "1A1G1M1R4W-J")
80101 else if (if ((15 > jackpotRandom))
81102 then (wasUniqueBorn("DUCK-WWWDAISY-JU") == 0)
82103 else false)
83104 then $Tuple2("DUCK-WWWDAISY-JU", "1A1D1I1S3W1Y-J")
84105 else {
85106 let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
86107 let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
87108 let color = if ((colorRandom == 0))
88109 then "Y"
89110 else if ((colorRandom == 1))
90111 then "G"
91112 else if ((colorRandom == 2))
92113 then "B"
93114 else "R"
94115 if ((typeRandom == 0))
95116 then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
96117 else if ((typeRandom == 1))
97118 then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
98119 else if ((typeRandom == 2))
99120 then $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
100121 else $Tuple2(("DUCK-KKKKKKKK-G" + color), "8K-G")
101122 }
102123 }
103124
104125
105126 func countEggsNeededAmount (totalDucksAmount) = {
106127 let n = totalDucksAmount
107128 let g = discountCoefficient
129+ let s = saleCoefficient
108130 let t = typesAmount
109131 let price = pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN)
110- (price * 1000000)
132+ if ((saleCoefficient == 0))
133+ then (price * 1000000)
134+ else (((price * 1000000) / 100) * (100 - saleCoefficient))
111135 }
136+
137+
138+@Callable(i)
139+func configureOracle (oracle) = if ((i.caller != this))
140+ then throw("admin only")
141+ else [StringEntry("static_oracleAddress", oracle)]
142+
112143
113144
114145 @Callable(i)
115146 func setDiscount (val) = if ((i.caller != this))
116147 then throw("admin_only")
117148 else [IntegerEntry("discountCoefficient", val)]
149+
150+
151+
152+@Callable(i)
153+func setSale (val) = if ((i.caller != this))
154+ then throw("admin_only")
155+ else [IntegerEntry("saleCoefficient", val)]
118156
119157
120158
121159 @Callable(i)
122160 func startDuckHatching (refererAddress) = if ((isLocked() > 0))
123161 then throw("EGG operations are temporarily locked")
124162 else {
125163 let totalDucksAmount = tryGetInteger("ducks_amount")
126164 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
127165 let firstPayment = value(i.payments[0])
128166 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))]
129- if ((i.caller == Address(babyDucksAddress)))
167+ if ((i.caller == getBabyDuckAddress()))
130168 then (results ++ [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)])
131- else if ((firstPayment.assetId != eggsAssetId))
132- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
169+ else if ((firstPayment.assetId != getEggAssetId()))
170+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
133171 else if ((eggsNeeded > firstPayment.amount))
134172 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
135173 else {
136174 let refererReward = fraction(eggsNeeded, RefererReward, 100)
137- let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
175+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererReward)])
138176 if ((refCall == refCall))
139- then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)])
177+ then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), getEggAssetId())])
140178 else throw("Strict value is not equal to itself.")
141179 }
142180 }
143181
144182
145183
146184 @Callable(i)
147185 func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
148186 then throw("EGG operations are temporarily locked")
149- else if ((i.caller != Address(swopPromoAddress)))
187+ else if ((i.caller != getSwopPromoAddress()))
150188 then throw("Pernission denied")
151189 else {
152190 let totalDucksAmount = tryGetInteger("ducks_amount")
153191 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
154192 [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)]
155193 }
156194
157195
158196
159197 @Callable(i)
160198 func finishDuckHatching (txIdStr) = {
161199 let txId = fromBase58String(txIdStr)
162200 let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
163201 let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
164202 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
165203 let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
166204 case t: Boolean =>
167205 t
168206 case _ =>
169207 false
170208 }
171209 let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
172210 let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
173211 if ((hatchingTxStatus == HatchingFinished))
174212 then {
175213 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
176214 throw(("The duck was hatched and claimed already, here is the folowing: " + duckId))
177215 }
178216 else if ((hatchingFinishHeight > height))
179217 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
180218 else {
181- let $t067706836 = getRandomName(txId, hatchingFinishHeight)
182- let duckGen = $t067706836._1
183- let farmGen = $t067706836._2
219+ let $t081748240 = getRandomName(txId, hatchingFinishHeight)
220+ let duckGen = $t081748240._1
221+ let farmGen = $t081748240._2
184222 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
185223 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
186224 let assetId = calculateAssetId(asset)
187225 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
188226 [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)]
189227 }
190228 }
191229
192230
193231
194232 @Callable(i)
195-func issueFreeDuck (address,txIdStr) = if ((i.caller != Address(rebirthAddress)))
233+func issueFreeDuck (address,txIdStr) = if ((i.caller != getRebirthAddress()))
196234 then throw("rebirth only")
197235 else {
198236 let txId = fromBase58String(txIdStr)
199237 let hatchingStatusKey = getHatchingStatusKey(address, txId)
200238 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
201239 let totalDucksAmount = tryGetInteger("ducks_amount")
202240 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
203- let $t080758160 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
204- let duckGen = $t080758160._1
205- let farmGen = $t080758160._2
241+ let $t094759560 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
242+ let duckGen = $t094759560._1
243+ let farmGen = $t094759560._2
206244 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
207245 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
208246 let assetId = calculateAssetId(asset)
209247 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
210248 let duckIdKey = getDuckIdKey(address, txId)
211249 $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))
212250 }
213251
214252
215253
216254 @Callable(i)
217-func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != Address(rebirthAddress)))
255+func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != getRebirthAddress()))
218256 then (i.caller != this)
219257 else false)
220258 then throw("admin or rebirth only")
221259 else {
222260 let txId = fromBase58String(txIdStr)
223261 let hatchingStatusKey = getHatchingStatusKey(address, txId)
224262 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
225263 let totalDucksAmount = tryGetInteger("ducks_amount")
226264 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
227- let $t096139665 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
228- let duckGen = $t096139665._1
229- let farmGen = $t096139665._2
265+ let $t01100911061 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
266+ let duckGen = $t01100911061._1
267+ let farmGen = $t01100911061._2
230268 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
231269 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
232270 let assetId = calculateAssetId(asset)
233271 let duckIdKey = getDuckIdKey(address, txId)
234272 $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))
235273 }
236274
237275
238276
239277 @Callable(i)
240278 func reduceRarity (assetId,fGen) = {
241279 let asset = fromBase58String(assetId)
242- if (if ((i.caller != Address(rebirthAddress)))
280+ if (if ((i.caller != getRebirthAddress()))
243281 then (i.caller != this)
244282 else false)
245283 then throw("admin or rebirth only")
246284 else {
247285 let duckGen = value(assetInfo(asset)).name
248286 let letter = takeRight(take(duckGen, 6), 1)
249287 let farmGen = (("8" + letter) + "-G")
250288 [IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
251289 }
252290 }
253291
254292
255293 @Verifier(tx)
256294 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
257295

github/deemru/w8io/6500d08 
73.09 ms