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