tx · 2ssJZx7bgsr5Wg6rt4pmbtPUSr1neP3ewfBQJpaR5Vnk

3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh:  -0.01400000 Waves

2021.05.06 16:59 [2578552] smart account 3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh > SELF 0.00000000 Waves

{ "type": 13, "id": "2ssJZx7bgsr5Wg6rt4pmbtPUSr1neP3ewfBQJpaR5Vnk", "fee": 1400000, "feeAssetId": null, "timestamp": 1620309592306, "version": 2, "chainId": 87, "sender": "3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh", "senderPublicKey": "2y6AczxE1vbz7NGP9N4eeTMDqhDgXT8Tc3xhM792K3GP", "proofs": [ "2upEbtvydotGoAG9Xo4QjVHzWCFQNzj9boeqFTWdqDXEH1bqCyVcT6RNVAB1k9ja2Hz4J8AozN94fyG8Eirf82gu" ], "script": "base64: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AAAGYW1vdW50BQAAABBlZ2dzTmVlZGVkQW1vdW50CQAAAgAAAAECAAAAKllvdSBjYW4gYXR0YWNoIG9ubHkgRVhBQ1RMWSAxMCBFR0cgdG9rZW5zIAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0SGF0Y2hpbmdTdGF0dXNLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAPSGF0Y2hpbmdTdGFydGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEGRlbGF5Rm9ySGF0Y2hpbmcFAAAAA25pbAAAAAFpAQAAABJmaW5pc2hEdWNrSGF0Y2hpbmcAAAABAAAAB3R4SWRTdHIEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAARaGF0Y2hpbmdTdGF0dXNLZXkJAQAAABRnZXRIYXRjaGluZ1N0YXR1c0tleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBAAAAA9maW5pc2hIZWlnaHRLZXkJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBAAAAAlkdWNrSWRLZXkJAQAAAAxnZXREdWNrSWRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAQAAAAQaGF0Y2hpbmdUeFN0YXR1cwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAARaGF0Y2hpbmdTdGF0dXNLZXkEAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA9maW5pc2hIZWlnaHRLZXkDCQAAAAAAAAIFAAAAEGhhdGNoaW5nVHhTdGF0dXMFAAAAEEhhdGNoaW5nRmluaXNoZWQEAAAABmR1Y2tJZAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAADGdldER1Y2tJZEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkCQAAAgAAAAEJAAEsAAAAAgIAAABAVGhlIGR1Y2sgd2FzIGhhdGNoZWQgYW5kIGNsYWltZWQgYWxyZWFkeSwgaGVyZSBpcyB0aGUgZm9sb3dpbmc6IAUAAAAGZHVja0lkAwkAAGYAAAACBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdSGF0Y2hpbmcgaXMgbm90IGZpbmlzaGVkIHlldCAJAAGkAAAAAQkAAGUAAAACBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAACcgYmxvY2tzIHJlbWFpbmluZywgaXQgd2lsbCB0YWtlIGFyb3VuZCAJAAGkAAAAAQkAAGUAAAACBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAAAggbWludXRlcwQAAAAHZHVja0dlbgkBAAAADWdldFJhbmRvbU5hbWUAAAACBQAAAAR0eElkBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAQAAAALZGVzY3JpcHRpb24JAAEsAAAAAgkAASwAAAACAgAAAA57Imdlbm90eXBlIjogIgUAAAAHZHVja0dlbgIAAAAZIiwgImNyb3NzYnJlZWRpbmciOiB0cnVlfQQAAAAFYXNzZXQJAARDAAAABwUAAAAHZHVja0dlbgUAAAALZGVzY3JpcHRpb24AAAAAAAAAAAEAAAAAAAAAAAAHBQAAAAR1bml0BQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAQAAAAHYXNzZXRJZAkABDgAAAABBQAAAAVhc3NldAQAAAAGYW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAD2dldER1Y2tTdGF0c0tleQAAAAEFAAAAB2R1Y2tHZW4AAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARaGF0Y2hpbmdTdGF0dXNLZXkFAAAAEEhhdGNoaW5nRmluaXNoZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJZHVja0lkS2V5CQACWAAAAAEFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAAlgAAAABBQAAAAdhc3NldElkBQAAAAlkdWNrSWRLZXkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9nZXREdWNrU3RhdHNLZXkAAAABBQAAAAdkdWNrR2VuBQAAAAZhbW91bnQJAARMAAAAAgUAAAAFYXNzZXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABBQAAAAdhc3NldElkBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tlecLOju8=", "height": 2578552, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FMJQ54gtHRGRePuU7zQCnWxV1dor1Ddwmeak86v4zQAw Next: 9ktVFdEhws4CY9TDH3gDB31CTxPDV2Zs9Kg3HeDZ8YYb Diff:
OldNewDifferences
55
66 let eggsNeededAmount = 1000
77
8-let delayForHatching = 0
8+let delayForHatching = 2
99
1010 let HatchingStarted = "HATCHING_STARTED"
1111
1818
1919
2020 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
21+
22+
23+func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
24+
25+
26+func tryGetInteger (key) = {
27+ let val = match getInteger(this, key) {
28+ case b: Int =>
29+ b
30+ case _ =>
31+ 0
32+ }
33+ val
34+ }
2135
2236
2337 func getRandomNumber (variants,txId,hatchingFinishHeight) = {
7084 else if ((hatchingFinishHeight > height))
7185 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
7286 else {
73- let duckName = getRandomName(txId, hatchingFinishHeight)
74- let description = (("{\"genotype\": \"" + duckName) + "\", \"crossbreeding\": true}")
75- let asset = Issue(duckName, description, 1, 0, false, unit, hatchingFinishHeight)
87+ let duckGen = getRandomName(txId, hatchingFinishHeight)
88+ let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
89+ let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
7690 let assetId = calculateAssetId(asset)
77-[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), asset, ScriptTransfer(i.caller, 1, assetId)]
91+ let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
92+[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), asset, ScriptTransfer(i.caller, 1, assetId)]
7893 }
7994 }
8095
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb'
55
66 let eggsNeededAmount = 1000
77
8-let delayForHatching = 0
8+let delayForHatching = 2
99
1010 let HatchingStarted = "HATCHING_STARTED"
1111
1212 let HatchingFinished = "HATCHING_FINISHED"
1313
1414 func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
1515
1616
1717 func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
1818
1919
2020 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
21+
22+
23+func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
24+
25+
26+func tryGetInteger (key) = {
27+ let val = match getInteger(this, key) {
28+ case b: Int =>
29+ b
30+ case _ =>
31+ 0
32+ }
33+ val
34+ }
2135
2236
2337 func getRandomNumber (variants,txId,hatchingFinishHeight) = {
2438 let randomSeedBlock = value(blockInfoByHeight(hatchingFinishHeight))
2539 (toInt((value(randomSeedBlock.vrf) + txId), 10) % variants)
2640 }
2741
2842
2943 func getRandomName (txId,hatchingFinishHeight) = {
3044 let typeRandom = getRandomNumber(2, txId, hatchingFinishHeight)
3145 let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight)
3246 let color = if ((colorRandom == 0))
3347 then "Y"
3448 else if ((colorRandom == 1))
3549 then "G"
3650 else if ((colorRandom == 2))
3751 then "B"
3852 else "R"
3953 if ((typeRandom == 0))
4054 then ("DUCK-AAAAAAAA-G" + color)
4155 else ("DUCK-BBBBBBBB-G" + color)
4256 }
4357
4458
4559 @Callable(i)
4660 func startDuckHatching () = {
4761 let firstPayment = value(i.payments[0])
4862 if ((firstPayment.assetId != eggsAssetId))
4963 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
5064 else if ((firstPayment.amount != eggsNeededAmount))
5165 then throw("You can attach only EXACTLY 10 EGG tokens ")
5266 else [StringEntry(getHatchingStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching))]
5367 }
5468
5569
5670
5771 @Callable(i)
5872 func finishDuckHatching (txIdStr) = {
5973 let txId = fromBase58String(txIdStr)
6074 let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId)
6175 let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId)
6276 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
6377 let hatchingTxStatus = getStringValue(this, hatchingStatusKey)
6478 let hatchingFinishHeight = getIntegerValue(this, finishHeightKey)
6579 if ((hatchingTxStatus == HatchingFinished))
6680 then {
6781 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
6882 throw(("The duck was hatched and claimed already, here is the folowing: " + duckId))
6983 }
7084 else if ((hatchingFinishHeight > height))
7185 then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes"))
7286 else {
73- let duckName = getRandomName(txId, hatchingFinishHeight)
74- let description = (("{\"genotype\": \"" + duckName) + "\", \"crossbreeding\": true}")
75- let asset = Issue(duckName, description, 1, 0, false, unit, hatchingFinishHeight)
87+ let duckGen = getRandomName(txId, hatchingFinishHeight)
88+ let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
89+ let asset = Issue(duckGen, description, 1, 0, false, unit, hatchingFinishHeight)
7690 let assetId = calculateAssetId(asset)
77-[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), asset, ScriptTransfer(i.caller, 1, assetId)]
91+ let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
92+[StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), asset, ScriptTransfer(i.caller, 1, assetId)]
7893 }
7994 }
8095
8196
8297 @Verifier(tx)
8398 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
8499

github/deemru/w8io/3ef1775 
163.94 ms