tx · 5mCugnz48ak5KoYDvafYLY1yBdV4GA9y9Vg2h5kbw7Gf

3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv:  -0.01400000 Waves

2021.07.23 14:04 [2690940] smart account 3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv > SELF 0.00000000 Waves

{ "type": 13, "id": "5mCugnz48ak5KoYDvafYLY1yBdV4GA9y9Vg2h5kbw7Gf", "fee": 1400000, "feeAssetId": null, "timestamp": 1627038251289, "version": 2, "chainId": 87, "sender": "3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv", "senderPublicKey": "EBHsV7TQYm4qS2V7iZXEXwcbUdEYQyCSLEdY2AMvLPns", "proofs": [ "4MFLEcoG7Zav3uUXSteqRaLMYbBWZnPoB8DRoRSL6MYEqk2Mi9sGCicUnNhhUpvKNaz8PiGYXTppPXyUviRuGfBE" ], "script": "base64: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ckVudHJ5AAAAAgkBAAAAGmdldEhhdGNoaW5nRmluaXNoSGVpZ2h0S2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABBkZWxheUZvckhhdGNoaW5nCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAxkdWNrc19hbW91bnQJAABkAAAAAgUAAAAQdG90YWxEdWNrc0Ftb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQZHVja3NfbGFzdF9wcmljZQUAAAAKZWdnc05lZWRlZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABlAAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQFAAAACmVnZ3NOZWVkZWQFAAAAC2VnZ3NBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEmZpbmlzaER1Y2tIYXRjaGluZwAAAAEAAAAHdHhJZFN0cgQAAAAEdHhJZAkAAlkAAAABBQAAAAd0eElkU3RyBAAAABFoYXRjaGluZ1N0YXR1c0tleQkBAAAAFGdldEhhdGNoaW5nU3RhdHVzS2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABHR4SWQEAAAAD2ZpbmlzaEhlaWdodEtleQkBAAAAGmdldEhhdGNoaW5nRmluaXNoSGVpZ2h0S2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABHR4SWQEAAAACWR1Y2tJZEtleQkBAAAADGdldER1Y2tJZEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBAAAABBoYXRjaGluZ1R4U3RhdHVzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAABFoYXRjaGluZ1N0YXR1c0tleQQAAAAUaGF0Y2hpbmdGaW5pc2hIZWlnaHQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAD2ZpbmlzaEhlaWdodEtleQMJAAAAAAAAAgUAAAAQaGF0Y2hpbmdUeFN0YXR1cwUAAAAQSGF0Y2hpbmdGaW5pc2hlZAQAAAAGZHVja0lkCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQEAAAAMZ2V0RHVja0lkS2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABHR4SWQJAAACAAAAAQkAASwAAAACAgAAAEBUaGUgZHVjayB3YXMgaGF0Y2hlZCBhbmQgY2xhaW1lZCBhbHJlYWR5LCBoZXJlIGlzIHRoZSBmb2xvd2luZzogBQAAAAZkdWNrSWQDCQAAZgAAAAIFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1IYXRjaGluZyBpcyBub3QgZmluaXNoZWQgeWV0IAkAAaQAAAABCQAAZQAAAAIFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQCAAAAJyBibG9ja3MgcmVtYWluaW5nLCBpdCB3aWxsIHRha2UgYXJvdW5kIAkAAaQAAAABCQAAZQAAAAIFAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQCAAAACCBtaW51dGVzBAAAAAskdDA0NjkxNDc1NwkBAAAADWdldFJhbmRvbU5hbWUAAAACBQAAAAR0eElkBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAQAAAAHZHVja0dlbggFAAAACyR0MDQ2OTE0NzU3AAAAAl8xBAAAAAdmYXJtR2VuCAUAAAALJHQwNDY5MTQ3NTcAAAACXzIEAAAAC2Rlc2NyaXB0aW9uCQABLAAAAAIJAAEsAAAAAgIAAAAOeyJnZW5vdHlwZSI6ICIFAAAAB2R1Y2tHZW4CAAAAGSIsICJjcm9zc2JyZWVkaW5nIjogdHJ1ZX0EAAAABWFzc2V0CQAEQwAAAAcFAAAAB2R1Y2tHZW4FAAAAC2Rlc2NyaXB0aW9uAAAAAAAAAAABAAAAAAAAAAAABwUAAAAEdW5pdAUAAAAUaGF0Y2hpbmdGaW5pc2hIZWlnaHQEAAAAB2Fzc2V0SWQJAAQ4AAAAAQUAAAAFYXNzZXQEAAAABmFtb3VudAkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAAA9nZXREdWNrU3RhdHNLZXkAAAABBQAAAAdkdWNrR2VuAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEWhhdGNoaW5nU3RhdHVzS2V5BQAAABBIYXRjaGluZ0ZpbmlzaGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWR1Y2tJZEtleQkAAlgAAAABBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAJYAAAAAQUAAAAHYXNzZXRJZAUAAAAJZHVja0lkS2V5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0RHVja1N0YXRzS2V5AAAAAQUAAAAHZHVja0dlbgUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGc3RhdHNfBQAAAAdmYXJtR2VuAgAAAAlfcXVhbnRpdHkJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGc3RhdHNfBQAAAAdmYXJtR2VuAgAAAAlfcXVhbnRpdHkAAAAAAAAAAAEJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABBQAAAAdhc3NldElkBQAAAANuaWwAAAABaQEAAAAMcmVkdWNlUmFyaXR5AAAAAgAAAAdhc3NldElkAAAABGZHZW4EAAAABWFzc2V0CQACWQAAAAEFAAAAB2Fzc2V0SWQDAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyCQEAAAAHQWRkcmVzcwAAAAEFAAAADnJlYmlydGhBZGRyZXNzCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMHCQAAAgAAAAECAAAAFWFkbWluIG9yIHJlYmlydGggb25seQQAAAAHZHVja0dlbggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAFYXNzZXQAAAAEbmFtZQQAAAAGbGV0dGVyCQEAAAAJdGFrZVJpZ2h0AAAAAgkAAS8AAAACBQAAAAdkdWNrR2VuAAAAAAAAAAAGAAAAAAAAAAABBAAAAAdmYXJtR2VuCQABLAAAAAIJAAEsAAAAAgIAAAABOAUAAAAGbGV0dGVyAgAAAAItRwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2dldER1Y2tTdGF0c0tleQAAAAEFAAAAB2R1Y2tHZW4JAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAPZ2V0RHVja1N0YXRzS2V5AAAAAQUAAAAHZHVja0dlbgAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABnN0YXRzXwUAAAAHZmFybUdlbgIAAAAJX3F1YW50aXR5CQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAABnN0YXRzXwUAAAAHZmFybUdlbgIAAAAJX3F1YW50aXR5AAAAAAAAAAABBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleYlVhxk=", "height": 2690940, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ADakz32FmbRV8AwejC9KNZrP2sY69rLPbGkv8SmMVY53 Next: Db75nV3abnLDp2peq6Hm1cAYrMqQYSYzFGvtq7xRh9Er Diff:
OldNewDifferences
1616 let HatchingStarted = "HATCHING_STARTED"
1717
1818 let HatchingFinished = "HATCHING_FINISHED"
19+
20+let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ'
1921
2022 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
2123
122124 else if ((hatchingFinishHeight > height))
123125 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
124126 else {
125- let $t046254691 = getRandomName(txId, hatchingFinishHeight)
126- let duckGen = $t046254691._1
127- let farmGen = $t046254691._2
127+ let $t046914757 = getRandomName(txId, hatchingFinishHeight)
128+ let duckGen = $t046914757._1
129+ let farmGen = $t046914757._2
128130 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
129131 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
130132 let assetId = calculateAssetId(asset)
131133 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
132134 [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)]
133135 }
136+ }
137+
138+
139+
140+@Callable(i)
141+func reduceRarity (assetId,fGen) = {
142+ let asset = fromBase58String(assetId)
143+ if (if ((i.caller != Address(rebirthAddress)))
144+ then (i.caller != this)
145+ else false)
146+ then throw("admin or rebirth only")
147+ else {
148+ let duckGen = value(assetInfo(asset)).name
149+ let letter = takeRight(take(duckGen, 6), 1)
150+ let farmGen = (("8" + letter) + "-G")
151+[IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
152+ }
134153 }
135154
136155
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let eggsAssetId = base58'JCGDtrVy64cCJ1wCKfCaiNQMnyYwii71TbE5QeAHfxgF'
55
66 let delayForHatching = 2
77
88 let discountCoefficient = 10
99
1010 let typesAmount = 6
1111
1212 let refContractAddress = base58'3P8ejTkfRpz9WqCwCuihesNXU5k3zmFFfVe'
1313
1414 let RefererReward = 5
1515
1616 let HatchingStarted = "HATCHING_STARTED"
1717
1818 let HatchingFinished = "HATCHING_FINISHED"
19+
20+let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ'
1921
2022 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
2123
2224
2325 func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
2426
2527
2628 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
2729
2830
2931 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
3032
3133
3234 func tryGetInteger (key) = {
3335 let val = match getInteger(this, key) {
3436 case b: Int =>
3537 b
3638 case _ =>
3739 0
3840 }
3941 val
4042 }
4143
4244
4345 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
4446 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
4547 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
4648 (toInt(randomHash, (offset * 8)) % variants)
4749 }
4850
4951
5052 func wasUniqueBorn (gen) = tryGetInteger(getDuckStatsKey(gen))
5153
5254
5355 func getRandomName (txId,hatchingFinishHeight) = {
5456 let jackpotRandom = getRandomNumber(500, txId, hatchingFinishHeight, 0)
5557 if (if ((jackpotRandom == 1))
5658 then (wasUniqueBorn("DUCK-WWWWWWWW-JU") == 0)
5759 else false)
5860 then $Tuple2("DUCK-WWWWWWWW-JU", "8W-J")
5961 else {
6062 let typeRandom = getRandomNumber(4, txId, hatchingFinishHeight, 0)
6163 let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 1)
6264 let color = if ((colorRandom == 0))
6365 then "Y"
6466 else if ((colorRandom == 1))
6567 then "G"
6668 else if ((colorRandom == 2))
6769 then "B"
6870 else "R"
6971 if ((typeRandom == 0))
7072 then $Tuple2(("DUCK-FFFFFFFF-G" + color), "8F-G")
7173 else if ((typeRandom == 1))
7274 then $Tuple2(("DUCK-DDDDDDDD-G" + color), "8D-G")
7375 else if ((typeRandom == 2))
7476 then $Tuple2(("DUCK-CCCCCCCC-G" + color), "8C-G")
7577 else $Tuple2(("DUCK-EEEEEEEE-G" + color), "8E-G")
7678 }
7779 }
7880
7981
8082 func countEggsNeededAmount (totalDucksAmount) = {
8183 let n = totalDucksAmount
8284 let g = discountCoefficient
8385 let t = typesAmount
8486 let price = pow((100 + ((n * g) / (10 * t))), 2, 5, 1, 2, DOWN)
8587 price
8688 }
8789
8890
8991 @Callable(i)
9092 func startDuckHatching (refererAddress) = {
9193 let totalDucksAmount = tryGetInteger("ducks_amount")
9294 let eggsNeeded = countEggsNeededAmount(totalDucksAmount)
9395 let firstPayment = value(i.payments[0])
9496 if ((firstPayment.assetId != eggsAssetId))
9597 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
9698 else if ((eggsNeeded > firstPayment.amount))
9799 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
98100 else {
99101 let refererReward = ((firstPayment.amount / 100) * RefererReward)
100102 let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererReward)])
101103 if ((refCall == refCall))
102104 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), ScriptTransfer(i.caller, (firstPayment.amount - eggsNeeded), eggsAssetId)]
103105 else throw("Strict value is not equal to itself.")
104106 }
105107 }
106108
107109
108110
109111 @Callable(i)
110112 func finishDuckHatching (txIdStr) = {
111113 let txId = fromBase58String(txIdStr)
112114 let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
113115 let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
114116 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
115117 let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
116118 let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
117119 if ((hatchingTxStatus == HatchingFinished))
118120 then {
119121 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
120122 throw(("The duck was hatched and claimed already, here is the folowing: " + duckId))
121123 }
122124 else if ((hatchingFinishHeight > height))
123125 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
124126 else {
125- let $t046254691 = getRandomName(txId, hatchingFinishHeight)
126- let duckGen = $t046254691._1
127- let farmGen = $t046254691._2
127+ let $t046914757 = getRandomName(txId, hatchingFinishHeight)
128+ let duckGen = $t046914757._1
129+ let farmGen = $t046914757._2
128130 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
129131 let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
130132 let assetId = calculateAssetId(asset)
131133 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
132134 [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)]
133135 }
136+ }
137+
138+
139+
140+@Callable(i)
141+func reduceRarity (assetId,fGen) = {
142+ let asset = fromBase58String(assetId)
143+ if (if ((i.caller != Address(rebirthAddress)))
144+ then (i.caller != this)
145+ else false)
146+ then throw("admin or rebirth only")
147+ else {
148+ let duckGen = value(assetInfo(asset)).name
149+ let letter = takeRight(take(duckGen, 6), 1)
150+ let farmGen = (("8" + letter) + "-G")
151+[IntegerEntry(getDuckStatsKey(duckGen), (tryGetInteger(getDuckStatsKey(duckGen)) - 1)), IntegerEntry((("stats_" + farmGen) + "_quantity"), (tryGetInteger((("stats_" + farmGen) + "_quantity")) - 1))]
152+ }
134153 }
135154
136155
137156 @Verifier(tx)
138157 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
139158

github/deemru/w8io/6500d08 
53.01 ms