tx · AyBz2yRxPtmeC6CtQ3YV7Mq35JXe4YEqm9nNZS8ArPzj 3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks: -0.01400000 Waves 2021.11.23 16:44 [2868790] smart account 3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks > SELF 0.00000000 Waves
{ "type": 13, "id": "AyBz2yRxPtmeC6CtQ3YV7Mq35JXe4YEqm9nNZS8ArPzj", "fee": 1400000, "feeAssetId": null, "timestamp": 1637675097571, "version": 2, "chainId": 87, "sender": "3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks", "senderPublicKey": "XrNmTusDFaLSz3wAjmdfcyC5h6uYyVbpdh18758UpFv", "proofs": [ "XCiNS2Ahr9hq144guDNHkX8FHW6Hyduq7SKZdGTuMFCeVFHzN5fWdvuTTKTtxeCyNiEu5YDXA2LYgpdgg9vJn7V" ], "script": "base64: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", "height": 2868790, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6GLTj1pyKvXJPfNuMPjSJ3gc9cVQNHVrFPbhNxmBakvU Next: 8jDN5UuSTFW391zpgc5WXELpQ8xZpQQdzE5LfHMc4fd2 Diff:
Old | New | Differences | |
---|---|---|---|
74 | 74 | else if ((tryGetInteger("global_artAmount") > artefactsLimit)) | |
75 | 75 | then throw("SOLDOUT!!! Hurray!") | |
76 | 76 | else { | |
77 | - | let artefactsAmount = tryGetInteger("global_artAmount") | |
78 | 77 | let firstPayment = value(i.payments[0]) | |
79 | 78 | if ((firstPayment.assetId != eggsAssetId)) | |
80 | 79 | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId))) | |
81 | 80 | else if ((eggsNeeded > firstPayment.amount)) | |
82 | 81 | then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded))) | |
83 | - | else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", ( | |
82 | + | else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", (tryGetInteger("global_artAmount") + 1))] | |
84 | 83 | } | |
85 | 84 | ||
86 | 85 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let eggsAssetId = base58'3v7zGkeHS6KrsvmTRzEzvCxm5cdzkCtM7z5cM6efcjCB' | |
5 | 5 | ||
6 | 6 | let eggsNeeded = (2 * 100000000) | |
7 | 7 | ||
8 | 8 | let artefactsLimit = 300 | |
9 | 9 | ||
10 | 10 | let artefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"] | |
11 | 11 | ||
12 | 12 | func tryGetString (key) = match getString(this, key) { | |
13 | 13 | case a: String => | |
14 | 14 | a | |
15 | 15 | case _ => | |
16 | 16 | "" | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func tryGetInteger (key) = match getInteger(this, key) { | |
21 | 21 | case a: Int => | |
22 | 22 | a | |
23 | 23 | case _ => | |
24 | 24 | 0 | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func getRandomNumber (variants,txId,finishHeight,offset) = { | |
29 | 29 | let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1))) | |
30 | 30 | let randomHash = sha256((txId + value(randomSeedBlock.vrf))) | |
31 | 31 | (toInt(randomHash, (offset * 8)) % variants) | |
32 | 32 | } | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func getRandomArtefact (boxId,h) = { | |
36 | 36 | let randomNumber = getRandomNumber(100, boxId, h, 0) | |
37 | 37 | if ((98 >= randomNumber)) | |
38 | 38 | then { | |
39 | 39 | let artefactNum = (randomNumber / 11) | |
40 | 40 | artefacts[artefactNum] | |
41 | 41 | } | |
42 | 42 | else artefacts[99] | |
43 | 43 | } | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | @Callable(i) | |
47 | 47 | func preInit () = [IntegerEntry("static_ART-LAKE_farmingSlots", 200), IntegerEntry("static_ART-LAKE_farmingBoost", 2), IntegerEntry("static_ART-HOUSE_farmingSlots", 4), IntegerEntry("static_ART-HOUSE_farmingBoost", 30), IntegerEntry("static_ART-BIGHOUSE_farmingSlots", 10), IntegerEntry("static_ART-BIGHOUSE_farmingBoost", 15)] | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | ||
51 | 51 | @Callable(i) | |
52 | 52 | func issueArtefact (type,receiver) = if ((i.caller == this)) | |
53 | 53 | then { | |
54 | 54 | let txIdStr = toBase58String(i.transactionId) | |
55 | 55 | let address = Address(fromBase58String(receiver)) | |
56 | 56 | let artefact = Issue(type, "NFT artefact of Waves Ducks game. Drop #1.", 1, 0, false, unit, 0) | |
57 | 57 | let artefactId = calculateAssetId(artefact) | |
58 | 58 | [artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), type), ScriptTransfer(address, 1, artefactId)] | |
59 | 59 | } | |
60 | 60 | else throw("admin only") | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | ||
64 | 64 | @Callable(i) | |
65 | 65 | func setLock (n) = if ((i.caller == this)) | |
66 | 66 | then [IntegerEntry("global_locked", n)] | |
67 | 67 | else throw("admin only") | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | ||
71 | 71 | @Callable(i) | |
72 | 72 | func buyArtefact () = if ((tryGetInteger("global_locked") > 0)) | |
73 | 73 | then throw("contract is temporarily locked") | |
74 | 74 | else if ((tryGetInteger("global_artAmount") > artefactsLimit)) | |
75 | 75 | then throw("SOLDOUT!!! Hurray!") | |
76 | 76 | else { | |
77 | - | let artefactsAmount = tryGetInteger("global_artAmount") | |
78 | 77 | let firstPayment = value(i.payments[0]) | |
79 | 78 | if ((firstPayment.assetId != eggsAssetId)) | |
80 | 79 | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId))) | |
81 | 80 | else if ((eggsNeeded > firstPayment.amount)) | |
82 | 81 | then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded))) | |
83 | - | else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", ( | |
82 | + | else [StringEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_status"), "started"), IntegerEntry((((toString(i.caller) + "_") + toBase58String(i.transactionId)) + "_finishHeight"), (height + 2)), IntegerEntry("global_artAmount", (tryGetInteger("global_artAmount") + 1))] | |
84 | 83 | } | |
85 | 84 | ||
86 | 85 | ||
87 | 86 | ||
88 | 87 | @Callable(i) | |
89 | 88 | func claimArtefact (boxIdStr) = { | |
90 | 89 | let txId = fromBase58String(boxIdStr) | |
91 | 90 | let statusKey = (((toString(i.caller) + "_") + boxIdStr) + "_status") | |
92 | 91 | let heightKey = (((toString(i.caller) + "_") + boxIdStr) + "_finishHeight") | |
93 | 92 | if ((getStringValue(statusKey) != "started")) | |
94 | 93 | then throw("claimed already") | |
95 | 94 | else if ((getIntegerValue(heightKey) > height)) | |
96 | 95 | then throw("you cannot claim yet") | |
97 | 96 | else { | |
98 | 97 | let artType = getRandomArtefact(txId, getIntegerValue(heightKey)) | |
99 | 98 | let asset = Issue(artType, "Artefact of Waves Ducks metaverse.", 1, 0, false, unit, getIntegerValue(heightKey)) | |
100 | 99 | let assetId = calculateAssetId(asset) | |
101 | 100 | [StringEntry(statusKey, artType), StringEntry((((toString(i.caller) + "_") + boxIdStr) + "_artefactId"), toBase58String(assetId)), StringEntry((toBase58String(assetId) + "_type"), artType), asset, ScriptTransfer(i.caller, 1, assetId)] | |
102 | 101 | } | |
103 | 102 | } | |
104 | 103 | ||
105 | 104 | ||
106 | 105 | @Verifier(tx) | |
107 | 106 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
108 | 107 |
github/deemru/w8io/3ef1775 51.78 ms ◑