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