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