tx · 3oUVa3Pdogy5SqQ7JQ7zFxy6MsYisWk2XzoZQf5MbyrY

3MuwmoHDxZZP9bGwExfL3L8JpMU5r95oBr8:  -0.01400000 Waves

2022.01.20 16:34 [1887315] smart account 3MuwmoHDxZZP9bGwExfL3L8JpMU5r95oBr8 > SELF 0.00000000 Waves

{ "type": 13, "id": "3oUVa3Pdogy5SqQ7JQ7zFxy6MsYisWk2XzoZQf5MbyrY", "fee": 1400000, "feeAssetId": null, "timestamp": 1642685717403, "version": 2, "chainId": 84, "sender": "3MuwmoHDxZZP9bGwExfL3L8JpMU5r95oBr8", "senderPublicKey": "B8mXne2bErXPSLJvpntKVoudEBjypi3Ag6RfxqTr5pEg", "proofs": [ "G8jq6X5coNUGVufjsmzMvbbgrp3sgotagSo94o6WAdr6gbPocD72Sy8ua4kPv8hzfwSxJRXTsniW7fyvbpGcJnm" ], "script": "base64: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", "height": 1887315, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 32dbm9fiYv3C1jPFwGeMfTGsWZmCRhTE3nk8bHdKAeEz Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func nameKey (nameUrl) = (nameUrl + "_name")
4+let artefactsLimit = 750
5+
6+let statusDrop = "DROPED"
7+
8+let timeStart = "Time Start Drop"
9+
10+let timeEnd = "Time End Drop"
11+
12+let artefacts = ["SALE-DISCOUNT", "MERCH-TSHIRT", "MERCH-HOODIE", "MERCH-CAP", "VAC-ASTROZOMBIKA", "VAC-ZOMBIKV", "VAC-ZOMBERNA", "ART-RESPIRATORS", "ART-GASMASK", "ART-HAZMATSUIT", "ART-CROWBAR", "ART-MACHETE", "ART-FLAMETHROWER", "ART-SHOTGUN", "ART-PICKLEDBRAIN"]
13+
14+func tryGetInteger (key) = {
15+ let val = match getInteger(this, key) {
16+ case a: Int =>
17+ a
18+ case _ =>
19+ 0
20+ }
21+ val
22+ }
523
624
7-func descriptionKey (nameUrl) = (nameUrl + "_description")
25+func tryGetString (key) = {
26+ let val = match getString(key) {
27+ case t: String =>
28+ t
29+ case _ =>
30+ ""
31+ }
32+ val
33+ }
834
935
10-func ipfsHashKey (nameUrl) = (nameUrl + "_hash")
36+func keyStatus (address) = (address + "_status")
1137
1238
13-func addressKey (nameUrl) = (nameUrl + "_address")
39+func keyFinishHeight (address) = (address + "_finishHeight")
1440
1541
16-func statusKey (nameUrl) = (nameUrl + "_status")
42+func keyTransaction (address) = (address + "_idTransaction")
1743
1844
19-func voteKey (nameUrl) = (nameUrl + "_vote")
45+func getRandomNumber (variants,txId,finishHeight,offset) = {
46+ let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
47+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
48+ (toInt(randomHash, (offset * 8)) % variants)
49+ }
2050
2151
22-func checkVote (numberVote,voices) = if ((voices > (numberVote / 2)))
23- then "VERIFY"
24- else "VOTING"
52+func getRandomArtefact (boxId,h) = {
53+ let randomNumber = getRandomNumber(15, boxId, h, 0)
54+artefacts[randomNumber]
55+ }
2556
2657
27-@Callable(inv)
28-func verifyCollection (nameUrl,name,description,hash) = if (isDefined(getString(nameKey(nameUrl))))
29- then throw("This collection was create")
30- else [StringEntry(nameKey(nameUrl), name), StringEntry(descriptionKey(nameUrl), description), StringEntry(addressKey(nameUrl), toBase58String(inv.caller.bytes)), StringEntry(ipfsHashKey(nameUrl), hash), StringEntry(statusKey(nameUrl), "VOTING"), StringEntry(voteKey(nameUrl), "")]
58+@Callable(i)
59+func initTime (start,end) = if ((i.caller == this))
60+ then [IntegerEntry(timeStart, start), IntegerEntry(timeEnd, end)]
61+ else throw("Only Admin")
3162
3263
3364
34-@Callable(inv)
35-func vote (nameUrl) = {
36- let votingMember = split(getStringValue("voting_member"), ",")
37- let listVoted = split(getStringValue(voteKey(nameUrl)), ",")
38- if (!(containsElement(votingMember, toBase58String(inv.caller.bytes))))
39- then throw("You can't vote")
40- else if (containsElement(listVoted, toBase58String(inv.caller.bytes)))
41- then throw("You voted already")
42- else if ((statusKey(nameUrl) == "VERIFY"))
43- then throw("Voting was ended")
44- else {
45- let list = toBase58String(inv.caller.bytes) :: listVoted
46- let voices = size(listVoted)
47-[StringEntry(voteKey(nameUrl), makeString(list, ",")), StringEntry(statusKey(nameUrl), checkVote(size(votingMember), voices))]
48- }
65+@Callable(i)
66+func dropLootbox (address) = {
67+ let userStatusKey = keyStatus(address)
68+ if ((lastBlock.timestamp > getIntegerValue(timeEnd)))
69+ then throw("Drop ended...")
70+ else if ((getIntegerValue(timeStart) > lastBlock.timestamp))
71+ then throw("Drop wasn`t start...")
72+ else if ((i.caller != this))
73+ then throw("Only admin")
74+ else if ((tryGetInteger("count_lootbox") >= artefactsLimit))
75+ then throw("Lootboxs were ended")
76+ else if ((tryGetString(userStatusKey) != ""))
77+ then throw("Only one lootbox for user")
78+ else [StringEntry(userStatusKey, statusDrop), StringEntry(keyTransaction(address), toBase58String(i.transactionId)), IntegerEntry(keyFinishHeight(address), (height + 2)), IntegerEntry("count_lootbox", (tryGetInteger("count_lootbox") + 1))]
4979 }
5080
5181
5282
53-@Callable(inv)
54-func addVoting (address) = {
55- let listVoting = split(getStringValue("voting_member"), ",")
56- if ((toBase58String(inv.caller.bytes) != toBase58String(this.bytes)))
57- then throw("You don't owner")
58- else if (containsElement(listVoting, address))
59- then throw("This address was added")
60- else {
61- let list = address :: listVoting
62-[StringEntry("voting_member", makeString(list, ","))]
63- }
64- }
83+@Callable(i)
84+func setGlobalArtAmount (newAmount) = if ((i.caller == this))
85+ then [IntegerEntry("count_lootbox", newAmount)]
86+ else throw("Only admin")
6587
6688
6789
68-@Callable(inv)
69-func removeVoting (address) = {
70- let listVoting = split(getStringValue("voting_member"), ",")
71- if ((toBase58String(inv.caller.bytes) != toBase58String(this.bytes)))
72- then throw("You don't owner")
73- else if (!(containsElement(listVoting, address)))
74- then throw("This address wasn't added")
75- else {
76- let index = match indexOf(listVoting, address) {
77- case t: Int =>
78- t
79- case _ =>
80- 0
81- }
82- let list = removeByIndex(listVoting, index)
83-[StringEntry("voting_member", makeString(list, ","))]
84- }
90+@Callable(i)
91+func claimLootbox () = {
92+ let txId = tryGetString(keyTransaction(toString(i.caller)))
93+ let statusKey = keyStatus(toString(i.caller))
94+ let heightKey = keyFinishHeight(toString(i.caller))
95+ if ((getIntegerValue(timeEnd) > lastBlock.timestamp))
96+ then throw("You cannot claim yet")
97+ else if ((tryGetString(statusKey) != statusDrop))
98+ then throw("You dont have lootbox")
99+ else if ((getIntegerValue(heightKey) > height))
100+ then throw("You cannot claim yet")
101+ else {
102+ let artType = getRandomArtefact(fromBase58String(txId), getIntegerValue(heightKey))
103+ let asset = Issue(artType, "Waves Punk metaverse", 1, 0, false, unit, getIntegerValue(heightKey))
104+ let assetId = calculateAssetId(asset)
105+[asset, StringEntry(statusKey, artType), StringEntry((toString(i.caller) + "_assetId"), toBase58String(assetId)), StringEntry((toBase58String(assetId) + "_type"), artType), ScriptTransfer(i.caller, 1, assetId)]
106+ }
85107 }
86108
87109
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func nameKey (nameUrl) = (nameUrl + "_name")
4+let artefactsLimit = 750
5+
6+let statusDrop = "DROPED"
7+
8+let timeStart = "Time Start Drop"
9+
10+let timeEnd = "Time End Drop"
11+
12+let artefacts = ["SALE-DISCOUNT", "MERCH-TSHIRT", "MERCH-HOODIE", "MERCH-CAP", "VAC-ASTROZOMBIKA", "VAC-ZOMBIKV", "VAC-ZOMBERNA", "ART-RESPIRATORS", "ART-GASMASK", "ART-HAZMATSUIT", "ART-CROWBAR", "ART-MACHETE", "ART-FLAMETHROWER", "ART-SHOTGUN", "ART-PICKLEDBRAIN"]
13+
14+func tryGetInteger (key) = {
15+ let val = match getInteger(this, key) {
16+ case a: Int =>
17+ a
18+ case _ =>
19+ 0
20+ }
21+ val
22+ }
523
624
7-func descriptionKey (nameUrl) = (nameUrl + "_description")
25+func tryGetString (key) = {
26+ let val = match getString(key) {
27+ case t: String =>
28+ t
29+ case _ =>
30+ ""
31+ }
32+ val
33+ }
834
935
10-func ipfsHashKey (nameUrl) = (nameUrl + "_hash")
36+func keyStatus (address) = (address + "_status")
1137
1238
13-func addressKey (nameUrl) = (nameUrl + "_address")
39+func keyFinishHeight (address) = (address + "_finishHeight")
1440
1541
16-func statusKey (nameUrl) = (nameUrl + "_status")
42+func keyTransaction (address) = (address + "_idTransaction")
1743
1844
19-func voteKey (nameUrl) = (nameUrl + "_vote")
45+func getRandomNumber (variants,txId,finishHeight,offset) = {
46+ let randomSeedBlock = value(blockInfoByHeight((finishHeight - 1)))
47+ let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
48+ (toInt(randomHash, (offset * 8)) % variants)
49+ }
2050
2151
22-func checkVote (numberVote,voices) = if ((voices > (numberVote / 2)))
23- then "VERIFY"
24- else "VOTING"
52+func getRandomArtefact (boxId,h) = {
53+ let randomNumber = getRandomNumber(15, boxId, h, 0)
54+artefacts[randomNumber]
55+ }
2556
2657
27-@Callable(inv)
28-func verifyCollection (nameUrl,name,description,hash) = if (isDefined(getString(nameKey(nameUrl))))
29- then throw("This collection was create")
30- else [StringEntry(nameKey(nameUrl), name), StringEntry(descriptionKey(nameUrl), description), StringEntry(addressKey(nameUrl), toBase58String(inv.caller.bytes)), StringEntry(ipfsHashKey(nameUrl), hash), StringEntry(statusKey(nameUrl), "VOTING"), StringEntry(voteKey(nameUrl), "")]
58+@Callable(i)
59+func initTime (start,end) = if ((i.caller == this))
60+ then [IntegerEntry(timeStart, start), IntegerEntry(timeEnd, end)]
61+ else throw("Only Admin")
3162
3263
3364
34-@Callable(inv)
35-func vote (nameUrl) = {
36- let votingMember = split(getStringValue("voting_member"), ",")
37- let listVoted = split(getStringValue(voteKey(nameUrl)), ",")
38- if (!(containsElement(votingMember, toBase58String(inv.caller.bytes))))
39- then throw("You can't vote")
40- else if (containsElement(listVoted, toBase58String(inv.caller.bytes)))
41- then throw("You voted already")
42- else if ((statusKey(nameUrl) == "VERIFY"))
43- then throw("Voting was ended")
44- else {
45- let list = toBase58String(inv.caller.bytes) :: listVoted
46- let voices = size(listVoted)
47-[StringEntry(voteKey(nameUrl), makeString(list, ",")), StringEntry(statusKey(nameUrl), checkVote(size(votingMember), voices))]
48- }
65+@Callable(i)
66+func dropLootbox (address) = {
67+ let userStatusKey = keyStatus(address)
68+ if ((lastBlock.timestamp > getIntegerValue(timeEnd)))
69+ then throw("Drop ended...")
70+ else if ((getIntegerValue(timeStart) > lastBlock.timestamp))
71+ then throw("Drop wasn`t start...")
72+ else if ((i.caller != this))
73+ then throw("Only admin")
74+ else if ((tryGetInteger("count_lootbox") >= artefactsLimit))
75+ then throw("Lootboxs were ended")
76+ else if ((tryGetString(userStatusKey) != ""))
77+ then throw("Only one lootbox for user")
78+ else [StringEntry(userStatusKey, statusDrop), StringEntry(keyTransaction(address), toBase58String(i.transactionId)), IntegerEntry(keyFinishHeight(address), (height + 2)), IntegerEntry("count_lootbox", (tryGetInteger("count_lootbox") + 1))]
4979 }
5080
5181
5282
53-@Callable(inv)
54-func addVoting (address) = {
55- let listVoting = split(getStringValue("voting_member"), ",")
56- if ((toBase58String(inv.caller.bytes) != toBase58String(this.bytes)))
57- then throw("You don't owner")
58- else if (containsElement(listVoting, address))
59- then throw("This address was added")
60- else {
61- let list = address :: listVoting
62-[StringEntry("voting_member", makeString(list, ","))]
63- }
64- }
83+@Callable(i)
84+func setGlobalArtAmount (newAmount) = if ((i.caller == this))
85+ then [IntegerEntry("count_lootbox", newAmount)]
86+ else throw("Only admin")
6587
6688
6789
68-@Callable(inv)
69-func removeVoting (address) = {
70- let listVoting = split(getStringValue("voting_member"), ",")
71- if ((toBase58String(inv.caller.bytes) != toBase58String(this.bytes)))
72- then throw("You don't owner")
73- else if (!(containsElement(listVoting, address)))
74- then throw("This address wasn't added")
75- else {
76- let index = match indexOf(listVoting, address) {
77- case t: Int =>
78- t
79- case _ =>
80- 0
81- }
82- let list = removeByIndex(listVoting, index)
83-[StringEntry("voting_member", makeString(list, ","))]
84- }
90+@Callable(i)
91+func claimLootbox () = {
92+ let txId = tryGetString(keyTransaction(toString(i.caller)))
93+ let statusKey = keyStatus(toString(i.caller))
94+ let heightKey = keyFinishHeight(toString(i.caller))
95+ if ((getIntegerValue(timeEnd) > lastBlock.timestamp))
96+ then throw("You cannot claim yet")
97+ else if ((tryGetString(statusKey) != statusDrop))
98+ then throw("You dont have lootbox")
99+ else if ((getIntegerValue(heightKey) > height))
100+ then throw("You cannot claim yet")
101+ else {
102+ let artType = getRandomArtefact(fromBase58String(txId), getIntegerValue(heightKey))
103+ let asset = Issue(artType, "Waves Punk metaverse", 1, 0, false, unit, getIntegerValue(heightKey))
104+ let assetId = calculateAssetId(asset)
105+[asset, StringEntry(statusKey, artType), StringEntry((toString(i.caller) + "_assetId"), toBase58String(assetId)), StringEntry((toBase58String(assetId) + "_type"), artType), ScriptTransfer(i.caller, 1, assetId)]
106+ }
85107 }
86108
87109
88110 @Verifier(tx)
89111 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
90112

github/deemru/w8io/169f3d6 
39.77 ms