tx · HbiHUske5tU1k2Lvr3hBomZ8JYodoipHFJEb42EN2j9G 3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh: -0.01400000 Waves 2021.05.06 13:04 [2578327] smart account 3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh > SELF 0.00000000 Waves
{ "type": 13, "id": "HbiHUske5tU1k2Lvr3hBomZ8JYodoipHFJEb42EN2j9G", "fee": 1400000, "feeAssetId": null, "timestamp": 1620295519943, "version": 2, "chainId": 87, "sender": "3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh", "senderPublicKey": "2y6AczxE1vbz7NGP9N4eeTMDqhDgXT8Tc3xhM792K3GP", "proofs": [ "48xgfSHprBj3fNHwcp3qyJfBmKykEyBLEA8QWj3afBVMdUU3oLXYZakTHUWoU4Etwt3pGd8wxZDQEBbAPPQJ91L" ], "script": "base64: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RW50cnkAAAACCQEAAAAaZ2V0SGF0Y2hpbmdGaW5pc2hIZWlnaHRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEGRlbGF5Rm9ySGF0Y2hpbmcFAAAAA25pbAAAAAFpAQAAABJmaW5pc2hEdWNrSGF0Y2hpbmcAAAABAAAAB3R4SWRTdHIEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAARaGF0Y2hpbmdTdGF0dXNLZXkJAQAAABRnZXRIYXRjaGluZ1N0YXR1c0tleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBAAAAA9maW5pc2hIZWlnaHRLZXkJAQAAABpnZXRIYXRjaGluZ0ZpbmlzaEhlaWdodEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBAAAAAlkdWNrSWRLZXkJAQAAAAxnZXREdWNrSWRLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAQAAAAQaGF0Y2hpbmdUeFN0YXR1cwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAARaGF0Y2hpbmdTdGF0dXNLZXkEAAAAFGhhdGNoaW5nRmluaXNoSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA9maW5pc2hIZWlnaHRLZXkDCQAAAAAAAAIFAAAAEGhhdGNoaW5nVHhTdGF0dXMFAAAAEEhhdGNoaW5nRmluaXNoZWQEAAAABmR1Y2tJZAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAADGdldER1Y2tJZEtleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkCQAAAgAAAAEJAAEsAAAAAgIAAABAVGhlIGR1Y2sgd2FzIGhhdGNoZWQgYW5kIGNsYWltZWQgYWxyZWFkeSwgaGVyZSBpcyB0aGUgZm9sb3dpbmc6IAUAAAAGZHVja0lkAwkAAGYAAAACBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdSGF0Y2hpbmcgaXMgbm90IGZpbmlzaGVkIHlldCAJAAGkAAAAAQkAAGUAAAACBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAACcgYmxvY2tzIHJlbWFpbmluZywgaXQgd2lsbCB0YWtlIGFyb3VuZCAJAAGkAAAAAQkAAGUAAAACBQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0AgAAAAggbWludXRlcwQAAAAIZHVja05hbWUJAQAAAA1nZXRSYW5kb21OYW1lAAAAAgUAAAAEdHhJZAUAAAAUaGF0Y2hpbmdGaW5pc2hIZWlnaHQEAAAAC2Rlc2NyaXB0aW9uCQABLAAAAAIJAAEsAAAAAgIAAAAOeyJnZW5vdHlwZSI6ICIFAAAACGR1Y2tOYW1lAgAAABkiLCAiY3Jvc3NicmVlZGluZyI6IHRydWV9BAAAAAVhc3NldAkABEMAAAAHBQAAAAhkdWNrTmFtZQUAAAALZGVzY3JpcHRpb24AAAAAAAAAAAEAAAAAAAAAAAAHBQAAAAR1bml0BQAAABRoYXRjaGluZ0ZpbmlzaEhlaWdodAQAAAAHYXNzZXRJZAkABDgAAAABBQAAAAVhc3NldAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABFoYXRjaGluZ1N0YXR1c0tleQUAAAAQSGF0Y2hpbmdGaW5pc2hlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlkdWNrSWRLZXkJAAJYAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAACWR1Y2tJZEtleQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5msYoSw==", "height": 2578327, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HLr2MQEaKAgAagddwYBWcqsLWCtmodNjzp2Yum6LYaRS Next: 9VnH59yztc9D9enk7TvrXiggNHhBkk65FtzoJ2XL8FNh Diff:
Old | New | Differences | |
---|---|---|---|
55 | 55 | ||
56 | 56 | ||
57 | 57 | @Callable(i) | |
58 | - | func finishDuckHatching (txId) = { | |
58 | + | func finishDuckHatching (txIdStr) = { | |
59 | + | let txId = fromBase58String(txIdStr) | |
59 | 60 | let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId) | |
60 | 61 | let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId) | |
61 | 62 | let duckIdKey = getDuckIdKey(toString(i.caller), txId) | |
73 | 74 | let description = (("{\"genotype\": \"" + duckName) + "\", \"crossbreeding\": true}") | |
74 | 75 | let asset = Issue(duckName, description, 1, 0, false, unit, hatchingFinishHeight) | |
75 | 76 | let assetId = calculateAssetId(asset) | |
76 | - | [StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey)] | |
77 | + | [StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), ScriptTransfer(i.caller, 1, assetId)] | |
77 | 78 | } | |
78 | 79 | } | |
79 | 80 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb' | |
5 | 5 | ||
6 | 6 | let eggsNeededAmount = 1000 | |
7 | 7 | ||
8 | 8 | let delayForHatching = 0 | |
9 | 9 | ||
10 | 10 | let HatchingStarted = "HATCHING_STARTED" | |
11 | 11 | ||
12 | 12 | let HatchingFinished = "HATCHING_FINISHED" | |
13 | 13 | ||
14 | 14 | func getHatchingStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status") | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func getHatchingFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh") | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di") | |
21 | 21 | ||
22 | 22 | ||
23 | 23 | func getRandomNumber (variants,txId,hatchingFinishHeight) = { | |
24 | 24 | let randomSeedBlock = value(blockInfoByHeight(hatchingFinishHeight)) | |
25 | 25 | (toInt((value(randomSeedBlock.vrf) + txId), 10) % variants) | |
26 | 26 | } | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func getRandomName (txId,hatchingFinishHeight) = { | |
30 | 30 | let typeRandom = getRandomNumber(2, txId, hatchingFinishHeight) | |
31 | 31 | let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight) | |
32 | 32 | let color = if ((colorRandom == 0)) | |
33 | 33 | then "Y" | |
34 | 34 | else if ((colorRandom == 1)) | |
35 | 35 | then "G" | |
36 | 36 | else if ((colorRandom == 2)) | |
37 | 37 | then "B" | |
38 | 38 | else "R" | |
39 | 39 | if ((typeRandom == 0)) | |
40 | 40 | then ("DUCK-AAAAAAAA-G" + color) | |
41 | 41 | else ("DUCK-BBBBBBBB-G" + color) | |
42 | 42 | } | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | @Callable(i) | |
46 | 46 | func startDuckHatching () = { | |
47 | 47 | let firstPayment = value(i.payments[0]) | |
48 | 48 | if ((firstPayment.assetId != eggsAssetId)) | |
49 | 49 | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId))) | |
50 | 50 | else if ((firstPayment.amount != eggsNeededAmount)) | |
51 | 51 | then throw("You can attach only EXACTLY 10 EGG tokens ") | |
52 | 52 | else [StringEntry(getHatchingStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getHatchingFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching))] | |
53 | 53 | } | |
54 | 54 | ||
55 | 55 | ||
56 | 56 | ||
57 | 57 | @Callable(i) | |
58 | - | func finishDuckHatching (txId) = { | |
58 | + | func finishDuckHatching (txIdStr) = { | |
59 | + | let txId = fromBase58String(txIdStr) | |
59 | 60 | let hatchingStatusKey = getHatchingStatusKey(toString(i.caller), txId) | |
60 | 61 | let finishHeightKey = getHatchingFinishHeightKey(toString(i.caller), txId) | |
61 | 62 | let duckIdKey = getDuckIdKey(toString(i.caller), txId) | |
62 | 63 | let hatchingTxStatus = getStringValue(this, hatchingStatusKey) | |
63 | 64 | let hatchingFinishHeight = getIntegerValue(this, finishHeightKey) | |
64 | 65 | if ((hatchingTxStatus == HatchingFinished)) | |
65 | 66 | then { | |
66 | 67 | let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId)) | |
67 | 68 | throw(("The duck was hatched and claimed already, here is the folowing: " + duckId)) | |
68 | 69 | } | |
69 | 70 | else if ((hatchingFinishHeight > height)) | |
70 | 71 | then throw((((("Hatching is not finished yet " + toString((hatchingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((hatchingFinishHeight - height))) + " minutes")) | |
71 | 72 | else { | |
72 | 73 | let duckName = getRandomName(txId, hatchingFinishHeight) | |
73 | 74 | let description = (("{\"genotype\": \"" + duckName) + "\", \"crossbreeding\": true}") | |
74 | 75 | let asset = Issue(duckName, description, 1, 0, false, unit, hatchingFinishHeight) | |
75 | 76 | let assetId = calculateAssetId(asset) | |
76 | - | [StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey)] | |
77 | + | [StringEntry(hatchingStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), ScriptTransfer(i.caller, 1, assetId)] | |
77 | 78 | } | |
78 | 79 | } | |
79 | 80 | ||
80 | 81 | ||
81 | 82 | @Verifier(tx) | |
82 | 83 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
83 | 84 |
github/deemru/w8io/3ef1775 39.71 ms ◑