tx · AfgZTcG7VN4kfTrbFus2J6yms7uP1kaUvPspGSEqu5P4

3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks:  -0.01400000 Waves

2021.11.23 14:04 [2868630] smart account 3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks > SELF 0.00000000 Waves

{ "type": 13, "id": "AfgZTcG7VN4kfTrbFus2J6yms7uP1kaUvPspGSEqu5P4", "fee": 1400000, "feeAssetId": null, "timestamp": 1637665532608, "version": 2, "chainId": 87, "sender": "3PAi1ePLQrYrY3jj9omBtT6isMkZsapbmks", "senderPublicKey": "XrNmTusDFaLSz3wAjmdfcyC5h6uYyVbpdh18758UpFv", "proofs": [ "5zVdPULcErmCLasXNuXiTeEKMGsFNypES6mT3SRycQ3sZkGMDwyLHSvxKfk7q4c7U52QTfzfvJFVqAqe51oL5ehu" ], "script": "base64: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", "height": 2868630, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ba3JoG1WYmpTLfNWfX3ZUWu6EV7ND9i2UbEFQWVghNQ8 Next: 99ppYCHxjqRReYPy9kaGcNwCNpiywPTiaY2rySCUcCG6 Diff:
OldNewDifferences
55
66 let eggsNeeded = (2 * 100000000)
77
8-let artefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-CUSTOMDUCK"]
8+let artefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"]
99
1010 func tryGetString (key) = match getString(this, key) {
1111 case a: String =>
2323 }
2424
2525
26-func getRandomArtefact (bosId,h) = "ART-LAKE"
26+func getRandomNumber (variants,txId,finishHeight,offset) = {
27+ let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
28+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
29+ (toInt(randomHash, (offset * 8)) % variants)
30+ }
31+
32+
33+func getRandomArtefact (boxId,h) = {
34+ let randomNumber = getRandomNumber(100, boxId, h, 0)
35+ if ((98 >= randomNumber))
36+ then {
37+ let artefactNum = (randomNumber / 11)
38+artefacts[artefactNum]
39+ }
40+ else artefacts[99]
41+ }
2742
2843
2944 @Callable(i)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let eggsAssetId = base58'3v7zGkeHS6KrsvmTRzEzvCxm5cdzkCtM7z5cM6efcjCB'
55
66 let eggsNeeded = (2 * 100000000)
77
8-let artefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-CUSTOMDUCK"]
8+let artefacts = ["ART-LAKE", "ART-HOUSE", "ART-BIGHOUSE", "ART-FIXGENE", "ART-FREEGENE", "ART-MIRROR", "ART-POMP", "ART-CAPE", "ART-HAT", "ART-CUSTOMDUCK"]
99
1010 func tryGetString (key) = match getString(this, key) {
1111 case a: String =>
1212 a
1313 case _ =>
1414 ""
1515 }
1616
1717
1818 func tryGetInteger (key) = match getInteger(this, key) {
1919 case a: Int =>
2020 a
2121 case _ =>
2222 0
2323 }
2424
2525
26-func getRandomArtefact (bosId,h) = "ART-LAKE"
26+func getRandomNumber (variants,txId,finishHeight,offset) = {
27+ let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
28+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
29+ (toInt(randomHash, (offset * 8)) % variants)
30+ }
31+
32+
33+func getRandomArtefact (boxId,h) = {
34+ let randomNumber = getRandomNumber(100, boxId, h, 0)
35+ if ((98 >= randomNumber))
36+ then {
37+ let artefactNum = (randomNumber / 11)
38+artefacts[artefactNum]
39+ }
40+ else artefacts[99]
41+ }
2742
2843
2944 @Callable(i)
3045 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)]
3146
3247
3348
3449 @Callable(i)
3550 func issueArtefact (type,receiver) = {
3651 let txIdStr = toBase58String(i.transactionId)
3752 let address = Address(fromBase58String(receiver))
3853 let artefact = Issue(type, "NFT artefact of Waves Ducks game. Drop #1.", 1, 0, false, unit, 0)
3954 let artefactId = calculateAssetId(artefact)
4055 [artefact, StringEntry((("artefact_" + toBase58String(artefactId)) + "_type"), type), ScriptTransfer(address, 1, artefactId)]
4156 }
4257
4358
4459
4560 @Callable(i)
4661 func setLock (n) = if ((i.caller == this))
4762 then [IntegerEntry("global_locked", n)]
4863 else throw("admin only")
4964
5065
5166
5267 @Callable(i)
5368 func buyArtefact (refererAddress) = if ((tryGetInteger("global_locked") > 0))
5469 then throw("contract is temporarily locked")
5570 else {
5671 let artefactsAmount = tryGetInteger("artefacts_amount")
5772 let firstPayment = value(i.payments[0])
5873 if ((firstPayment.assetId != eggsAssetId))
5974 then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId)))
6075 else if ((eggsNeeded > firstPayment.amount))
6176 then throw(("To hatch a duck you currently need the following amount of EGGlets: " + toString(eggsNeeded)))
6277 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))]
6378 }
6479
6580
6681
6782 @Callable(i)
6883 func claimArtefact (boxIdStr) = {
6984 let txId = fromBase58String(boxIdStr)
7085 let statusKey = (((toString(i.caller) + "_") + boxIdStr) + "_status")
7186 let heightKey = (((toString(i.caller) + "_") + boxIdStr) + "_finishHeight")
7287 if ((getStringValue(statusKey) != "started"))
7388 then throw("claimed already")
7489 else if ((getIntegerValue(heightKey) > height))
7590 then throw("you cannot claim yet")
7691 else {
7792 let artType = getRandomArtefact(txId, getIntegerValue(heightKey))
7893 let asset = Issue(artType, "Artefact of Waves Ducks metaverse.", 1, 0, false, unit, getIntegerValue(heightKey))
7994 let assetId = calculateAssetId(asset)
8095 [StringEntry(statusKey, artType), StringEntry((((toString(i.caller) + "_") + boxIdStr) + "_artefactId"), toBase58String(assetId)), asset, ScriptTransfer(i.caller, 1, assetId)]
8196 }
8297 }
8398
8499
85100 @Verifier(tx)
86101 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
87102

github/deemru/w8io/3ef1775 
33.20 ms