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