tx · 9Fyf73kPMZEAu4mmf8GXuU8gFR1aoaLgDuPN61QzMxBy

3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv:  -0.01400000 Waves

2022.01.25 22:16 [2959880] smart account 3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv > SELF 0.00000000 Waves

{ "type": 13, "id": "9Fyf73kPMZEAu4mmf8GXuU8gFR1aoaLgDuPN61QzMxBy", "fee": 1400000, "feeAssetId": null, "timestamp": 1643138238033, "version": 2, "chainId": 87, "sender": "3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv", "senderPublicKey": "EBHsV7TQYm4qS2V7iZXEXwcbUdEYQyCSLEdY2AMvLPns", "proofs": [ "27BX4hUBePGGsedzX6DWdnFLjQfgpoTxy1Vq6jyUdcrxDePVnqJLavQ8hKrWW6WKiMk4MEdm8e6wR4HUP3avMso3" ], "script": "base64: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UmVmZXJlclJld2FyZAAAAAAAAAAAZAQAAAAHcmVmQ2FsbAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAEnJlZkNvbnRyYWN0QWRkcmVzcwIAAAAKcmVmUGF5bWVudAkABEwAAAACBQAAAA5yZWZlcmVyQWRkcmVzcwUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAtlZ2dzQXNzZXRJZAUAAAANcmVmZXJlclJld2FyZAUAAAADbmlsAwkAAAAAAAACBQAAAAdyZWZDYWxsBQAAAAdyZWZDYWxsCQAETgAAAAIFAAAAB3Jlc3VsdHMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQAAZQAAAAIIBQAAAAxmaXJzdFBheW1lbnQAAAAGYW1vdW50BQAAAAplZ2dzTmVlZGVkBQAAAAtlZ2dzQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABtzdGFydER1Y2tIYXRjaGluZ0ZvckFkZHJlc3MAAAABAAAAB2FkZHJlc3MDCQAAZgAAAAIJAQAAAAhpc0xvY2tlZAAAAAAAAAAAAAAAAAAJAAACAAAAAQIAAAAlRUdHIG9wZXJhdGlvbnMgYXJlIHRlbXBvcmFyaWx5IGxvY2tlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAB0FkZHJlc3MAAAABBQAAABBzd29wUHJvbW9BZGRyZXNzCQAAAgAAAAECAAAAEVBlcm5pc3Npb24gZGVuaWVkBAAAABB0b3RhbER1Y2tzQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADGR1Y2tzX2Ftb3VudAQAAAAKZWdnc05lZWRlZAkBAAAAFWNvdW50RWdnc05lZWRlZEFtb3VudAAAAAEFAAAAEHRvdGFsRHVja3NBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGdldEhhdGNoaW5nU3RhdHVzS2V5AAAAAgUAAAAHYWRkcmVzcwgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAPSGF0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AAFpAQAAAA1pc3N1ZUZyZWVEdWNrAAAAAgAAAAdhZGRyZXNzAAAAB3R4SWRTdHIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIJAQAAAAdBZGRyZXNzAAAAAQUAAAAOcmViaXJ0aEFkZHJlc3MJAAACAAAAAQIAAAAMcmViaXJ0aCBvbmx5BAAAAAR0eElkCQACWQAAAAEFAAAAB3R4SWRTdHIEAAAAEWhhdGNoaW5nU3RhdHVzS2V5CQEAAAAUZ2V0SGF0Y2hpbmdTdGF0dXNLZXkAAAACBQAAAAdhZGRyZXNzBQAAAAR0eElkBAAAAA9maW5pc2hIZWlnaHRLZXkJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIFAAAAB2FkZHJlc3MFAAAABHR4SWQEAAAAEHRvdGFsRHVja3NBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAMZHVja3NfYW1vdW50BAAAAAplZ2dzTmVlZGVkCQEAAAAVY291bnRFZ2dzTmVlZGVkQW1vdW50AAAAAQUAAAAQdG90YWxEdWNrc0Ftb3VudAQAAAALJHQwNzgxMTc4OTYJAQAAAA1nZXRSYW5kb21OYW1lAAAAAgUAAAAEdHhJZAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQAD6QAAAAEFAAAABHR4SWQAAAAAAAAAAAEEAAAAB2R1Y2tHZW4IBQAAAAskdDA3ODExNzg5NgAAAAJfMQQAAAAHZmFybUdlbggFAAAACyR0MDc4MTE3ODk2AAAAAl8yBAAAAAtkZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAICAAAADnsiZ2Vub3R5cGUiOiAiBQAAAAdkdWNrR2VuAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAHBQAAAAdkdWNrR2VuBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAQAAAAAAAAAAAAcFAAAABHVuaXQFAAAABmhlaWdodAQAAAAHYXNzZXRJZAkABDgAAAABBQAAAAVhc3NldAQAAAAGYW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAD2dldER1Y2tTdGF0c0tleQAAAAEFAAAAB2R1Y2tHZW4A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", "height": 2959880, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DU8hJFge7bBTMRSKEzdxaL6LVZHMmHdDeFdAD8iLas7V Next: EMeZmrwXLmbB895xC1rqpfP9z1rhRuBGnbjKYBcGRLgA Diff:
OldNewDifferences
1616 let HatchingFinished = "HATCHING_FINISHED"
1717
1818 let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ'
19+
20+let babyDucksAddress = base58'3PKmLiGEfqLWMC1H9xhzqvAZKUXfFm8uoeg'
21+
22+let swopPromoAddress = base58'3P6s9C39Ak5FAQ3F5VapYJ3ULxgbsAReXWD'
1923
2024 func isLocked () = {
2125 let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
6569
6670 func getRandomName (txId,hatchingFinishHeight) = {
6771 let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 0)
68- if (if (if ((jackpotRandom > 100))
69- then (110 >= jackpotRandom)
72+ if (if ((jackpotRandom == 111))
73+ then (wasUniqueBorn("DUCK-WWWWWWWM-JU") == 0)
7074 else false)
71- then (wasUniqueBorn("DUCK-WWWWVOVA-JU") == 0)
72- else false)
73- then $Tuple2("DUCK-WWWWVOVA-JU", "8W-J")
74- else if (if (if ((jackpotRandom > 210))
75- then (220 >= jackpotRandom)
76- else false)
77- then (wasUniqueBorn("DUCK-WWWWRIKY-JU") == 0)
78- else false)
79- then $Tuple2("DUCK-WWWWRIKY-JU", "8W-J")
80- else if (if (if ((jackpotRandom > 320))
81- then (331 > jackpotRandom)
82- else false)
83- then (wasUniqueBorn("DUCK-WWTURTLE-JU") == 0)
84- else false)
85- then $Tuple2("DUCK-WWTURTLE-JU", "8W-J")
86- else {
87- let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
88- let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
89- let color = if ((colorRandom == 0))
90- then "Y"
91- else if ((colorRandom == 1))
92- then "G"
93- else if ((colorRandom == 2))
94- then "B"
95- else "R"
96- if ((typeRandom == 0))
97- then $Tuple2(("DUCK-FFFFFFFF-G" + color), "8F-G")
98- else if ((typeRandom == 1))
99- then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
100- else if ((typeRandom == 2))
101- then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
102- else $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
103- }
75+ then $Tuple2("DUCK-WWWWWWWM-JU", "8W-J")
76+ else {
77+ let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
78+ let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
79+ let color = if ((colorRandom == 0))
80+ then "Y"
81+ else if ((colorRandom == 1))
82+ then "G"
83+ else if ((colorRandom == 2))
84+ then "B"
85+ else "R"
86+ if ((typeRandom == 0))
87+ then $Tuple2(("DUCK-FFFFFFFF-G" + color), "8F-G")
88+ else if ((typeRandom == 1))
89+ then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
90+ else if ((typeRandom == 2))
91+ then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
92+ else $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
93+ }
10494 }
10595
10696
127117 let totalDucksAmount = tryGetInteger("ducks_amount")
128118 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
129119 let firstPayment = value(i.payments[0])
130- if ((firstPayment.assetId != eggsAssetId))
131- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
132- else if ((eggsNeeded > firstPayment.amount))
133- then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
134- else {
135- let refererReward = fraction(eggsNeeded, RefererReward, 100)
136- let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
137- if ((refCall == refCall))
138- then [StringEntry(getHatchingStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching)), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)]
139- else throw("Strict value is not equal to itself.")
140- }
120+ 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))]
121+ if ((i.caller == Address(babyDucksAddress)))
122+ then (results ++ [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)])
123+ else if ((firstPayment.assetId != eggsAssetId))
124+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
125+ else if ((eggsNeeded > firstPayment.amount))
126+ then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
127+ else {
128+ let refererReward = fraction(eggsNeeded, RefererReward, 100)
129+ let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
130+ if ((refCall == refCall))
131+ then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)])
132+ else throw("Strict value is not equal to itself.")
133+ }
141134 }
135+
136+
137+
138+@Callable(i)
139+func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
140+ then throw("EGG operations are temporarily locked")
141+ else if ((i.caller != Address(swopPromoAddress)))
142+ then throw("Pernission denied")
143+ else {
144+ let totalDucksAmount = tryGetInteger("ducks_amount")
145+ let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
146+[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)]
147+ }
142148
143149
144150
148154 let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
149155 let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
150156 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
157+ let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
158+ case t: Boolean =>
159+ t
160+ case _ =>
161+ false
162+ }
151163 let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
152164 let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
153165 if ((hatchingTxStatus == HatchingFinished))
158170 else if ((hatchingFinishHeight > height))
159171 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
160172 else {
161- let $t055295595 = getRandomName(txId, hatchingFinishHeight)
162- let duckGen = $t055295595._1
163- let farmGen = $t055295595._2
173+ let $t065066572 = getRandomName(txId, hatchingFinishHeight)
174+ let duckGen = $t065066572._1
175+ let farmGen = $t065066572._2
164176 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
165177 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
166178 let assetId = calculateAssetId(asset)
167179 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
168-[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(i.caller, 1, assetId)]
180+[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)]
169181 }
170182 }
171183
180192 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
181193 let totalDucksAmount = tryGetInteger("ducks_amount")
182194 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
183- let $t067516836 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
184- let duckGen = $t067516836._1
185- let farmGen = $t067516836._2
195+ let $t078117896 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
196+ let duckGen = $t078117896._1
197+ let farmGen = $t078117896._2
186198 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
187199 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
188200 let assetId = calculateAssetId(asset)
204216 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
205217 let totalDucksAmount = tryGetInteger("ducks_amount")
206218 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
207- let $t082898341 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
208- let duckGen = $t082898341._1
209- let farmGen = $t082898341._2
219+ let $t093499401 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
220+ let duckGen = $t093499401._1
221+ let farmGen = $t093499401._2
210222 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
211223 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
212224 let assetId = calculateAssetId(asset)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let eggsAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'
55
66 let delayForHatching = 2
77
88 let typesAmount = 9
99
1010 let refContractAddress = base58'3P8ejTkfRpz9WqCwCuihesNXU5k3zmFFfVe'
1111
1212 let RefererReward = 5
1313
1414 let HatchingStarted = "HATCHING_STARTED"
1515
1616 let HatchingFinished = "HATCHING_FINISHED"
1717
1818 let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ'
19+
20+let babyDucksAddress = base58'3PKmLiGEfqLWMC1H9xhzqvAZKUXfFm8uoeg'
21+
22+let swopPromoAddress = base58'3P6s9C39Ak5FAQ3F5VapYJ3ULxgbsAReXWD'
1923
2024 func isLocked () = {
2125 let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
2226 match getInteger(masterAddress, "egglock") {
2327 case b: Int =>
2428 b
2529 case _ =>
2630 0
2731 }
2832 }
2933
3034
3135 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
3236
3337
3438 func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
3539
3640
3741 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
3842
3943
4044 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
4145
4246
4347 func tryGetInteger (key) = {
4448 let val = match getInteger(this, key) {
4549 case b: Int =>
4650 b
4751 case _ =>
4852 0
4953 }
5054 val
5155 }
5256
5357
5458 let discountCoefficient = tryGetInteger("discountCoefficient")
5559
5660 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
5761 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
5862 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
5963 (toInt(randomHash, (offset * 8)) % variants)
6064 }
6165
6266
6367 func wasUniqueBorn (gen) = tryGetInteger(getDuckStatsKey(gen))
6468
6569
6670 func getRandomName (txId,hatchingFinishHeight) = {
6771 let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 0)
68- if (if (if ((jackpotRandom > 100))
69- then (110 >= jackpotRandom)
72+ if (if ((jackpotRandom == 111))
73+ then (wasUniqueBorn("DUCK-WWWWWWWM-JU") == 0)
7074 else false)
71- then (wasUniqueBorn("DUCK-WWWWVOVA-JU") == 0)
72- else false)
73- then $Tuple2("DUCK-WWWWVOVA-JU", "8W-J")
74- else if (if (if ((jackpotRandom > 210))
75- then (220 >= jackpotRandom)
76- else false)
77- then (wasUniqueBorn("DUCK-WWWWRIKY-JU") == 0)
78- else false)
79- then $Tuple2("DUCK-WWWWRIKY-JU", "8W-J")
80- else if (if (if ((jackpotRandom > 320))
81- then (331 > jackpotRandom)
82- else false)
83- then (wasUniqueBorn("DUCK-WWTURTLE-JU") == 0)
84- else false)
85- then $Tuple2("DUCK-WWTURTLE-JU", "8W-J")
86- else {
87- let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
88- let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
89- let color = if ((colorRandom == 0))
90- then "Y"
91- else if ((colorRandom == 1))
92- then "G"
93- else if ((colorRandom == 2))
94- then "B"
95- else "R"
96- if ((typeRandom == 0))
97- then $Tuple2(("DUCK-FFFFFFFF-G" + color), "8F-G")
98- else if ((typeRandom == 1))
99- then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
100- else if ((typeRandom == 2))
101- then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
102- else $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
103- }
75+ then $Tuple2("DUCK-WWWWWWWM-JU", "8W-J")
76+ else {
77+ let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
78+ let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
79+ let color = if ((colorRandom == 0))
80+ then "Y"
81+ else if ((colorRandom == 1))
82+ then "G"
83+ else if ((colorRandom == 2))
84+ then "B"
85+ else "R"
86+ if ((typeRandom == 0))
87+ then $Tuple2(("DUCK-FFFFFFFF-G" + color), "8F-G")
88+ else if ((typeRandom == 1))
89+ then $Tuple2(("DUCK-HHHHHHHH-G" + color), "8H-G")
90+ else if ((typeRandom == 2))
91+ then $Tuple2(("DUCK-GGGGGGGG-G" + color), "8G-G")
92+ else $Tuple2(("DUCK-IIIIIIII-G" + color), "8I-G")
93+ }
10494 }
10595
10696
10797 func countEggsNeededAmount (totalDucksAmount) = {
10898 let n = totalDucksAmount
10999 let g = discountCoefficient
110100 let t = typesAmount
111101 let price = pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN)
112102 (price * 1000000)
113103 }
114104
115105
116106 @Callable(i)
117107 func setDiscount (val) = if ((i.caller != this))
118108 then throw("admin_only")
119109 else [IntegerEntry("discountCoefficient", val)]
120110
121111
122112
123113 @Callable(i)
124114 func startDuckHatching (refererAddress) = if ((isLocked() > 0))
125115 then throw("EGG operations are temporarily locked")
126116 else {
127117 let totalDucksAmount = tryGetInteger("ducks_amount")
128118 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
129119 let firstPayment = value(i.payments[0])
130- if ((firstPayment.assetId != eggsAssetId))
131- then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
132- else if ((eggsNeeded > firstPayment.amount))
133- then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
134- else {
135- let refererReward = fraction(eggsNeeded, RefererReward, 100)
136- let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
137- if ((refCall == refCall))
138- then [StringEntry(getHatchingStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching)), IntegerEntry("ducks_amount", (totalDucksAmount + 1)), IntegerEntry("ducks_last_price", (eggsNeeded / 1000000)), ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)]
139- else throw("Strict value is not equal to itself.")
140- }
120+ 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))]
121+ if ((i.caller == Address(babyDucksAddress)))
122+ then (results ++ [BooleanEntry((("hatching_" + toBase58String(i.transactionId)) + "_babyDuck"), true)])
123+ else if ((firstPayment.assetId != eggsAssetId))
124+ then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
125+ else if ((eggsNeeded > firstPayment.amount))
126+ then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
127+ else {
128+ let refererReward = fraction(eggsNeeded, RefererReward, 100)
129+ let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
130+ if ((refCall == refCall))
131+ then (results ++ [ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)])
132+ else throw("Strict value is not equal to itself.")
133+ }
141134 }
135+
136+
137+
138+@Callable(i)
139+func startDuckHatchingForAddress (address) = if ((isLocked() > 0))
140+ then throw("EGG operations are temporarily locked")
141+ else if ((i.caller != Address(swopPromoAddress)))
142+ then throw("Pernission denied")
143+ else {
144+ let totalDucksAmount = tryGetInteger("ducks_amount")
145+ let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
146+[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)]
147+ }
142148
143149
144150
145151 @Callable(i)
146152 func finishDuckHatching (txIdStr) = {
147153 let txId = fromBase58String(txIdStr)
148154 let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
149155 let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
150156 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
157+ let duckFromBaby = match getBoolean((("hatching_" + txIdStr) + "_babyDuck")) {
158+ case t: Boolean =>
159+ t
160+ case _ =>
161+ false
162+ }
151163 let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
152164 let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
153165 if ((hatchingTxStatus == HatchingFinished))
154166 then {
155167 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
156168 throw(("The duck was hatched and claimed already, here is the folowing: " + duckId))
157169 }
158170 else if ((hatchingFinishHeight > height))
159171 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
160172 else {
161- let $t055295595 = getRandomName(txId, hatchingFinishHeight)
162- let duckGen = $t055295595._1
163- let farmGen = $t055295595._2
173+ let $t065066572 = getRandomName(txId, hatchingFinishHeight)
174+ let duckGen = $t065066572._1
175+ let farmGen = $t065066572._2
164176 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
165177 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
166178 let assetId = calculateAssetId(asset)
167179 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
168-[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(i.caller, 1, assetId)]
180+[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)]
169181 }
170182 }
171183
172184
173185
174186 @Callable(i)
175187 func issueFreeDuck (address,txIdStr) = if ((i.caller != Address(rebirthAddress)))
176188 then throw("rebirth only")
177189 else {
178190 let txId = fromBase58String(txIdStr)
179191 let hatchingStatusKey = getHatchingStatusKey(address, txId)
180192 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
181193 let totalDucksAmount = tryGetInteger("ducks_amount")
182194 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
183- let $t067516836 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
184- let duckGen = $t067516836._1
185- let farmGen = $t067516836._2
195+ let $t078117896 = getRandomName(txId, (value(transactionHeightById(txId)) + 1))
196+ let duckGen = $t078117896._1
197+ let farmGen = $t078117896._2
186198 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
187199 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
188200 let assetId = calculateAssetId(asset)
189201 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
190202 let duckIdKey = getDuckIdKey(address, txId)
191203 $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))
192204 }
193205
194206
195207
196208 @Callable(i)
197209 func issueJackpot (address,txIdStr,gen) = if (if ((i.caller != Address(rebirthAddress)))
198210 then (i.caller != this)
199211 else false)
200212 then throw("admin or rebirth only")
201213 else {
202214 let txId = fromBase58String(txIdStr)
203215 let hatchingStatusKey = getHatchingStatusKey(address, txId)
204216 let finishHeightKey = getHatchingFinishHeightKey(address, txId)
205217 let totalDucksAmount = tryGetInteger("ducks_amount")
206218 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
207- let $t082898341 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
208- let duckGen = $t082898341._1
209- let farmGen = $t082898341._2
219+ let $t093499401 = $Tuple2((("DUCK-" + gen) + "-JU"), "8W-J")
220+ let duckGen = $t093499401._1
221+ let farmGen = $t093499401._2
210222 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
211223 let asset = Issue(duckGen, description, 1, 0, false, unit, height)
212224 let assetId = calculateAssetId(asset)
213225 let duckIdKey = getDuckIdKey(address, txId)
214226 $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))
215227 }
216228
217229
218230
219231 @Callable(i)
220232 func reduceRarity (assetId,fGen) = {
221233 let asset = fromBase58String(assetId)
222234 if (if ((i.caller != Address(rebirthAddress)))
223235 then (i.caller != this)
224236 else false)
225237 then throw("admin or rebirth only")
226238 else {
227239 let duckGen = value(assetInfo(asset)).name
228240 let letter = takeRight(take(duckGen, 6), 1)
229241 let farmGen = (("8" + letter) + "-G")
230242 [IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
231243 }
232244 }
233245
234246
235247 @Verifier(tx)
236248 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
237249

github/deemru/w8io/6500d08 
58.82 ms