tx · WAAF3x3TowXsBNhZZ6NAbkAuGKWUS3bF4vhqWrtxWA2

3N5aN5RqVqtb8HbNghuNb1NygjYPFRKfE7E:  -0.01000000 Waves

2021.11.15 13:19 [1792015] smart account 3N5aN5RqVqtb8HbNghuNb1NygjYPFRKfE7E > SELF 0.00000000 Waves

{ "type": 13, "id": "WAAF3x3TowXsBNhZZ6NAbkAuGKWUS3bF4vhqWrtxWA2", "fee": 1000000, "feeAssetId": null, "timestamp": 1636971584689, "version": 2, "chainId": 84, "sender": "3N5aN5RqVqtb8HbNghuNb1NygjYPFRKfE7E", "senderPublicKey": "4DHBTeCqcUJauCSakNBJVKKXVwtq3h5jBHMmZm8iiQHB", "proofs": [ "AS3wR1YjaqkEgDHzbvyZktUEcwY9ZE5dtXZstNvWrcNt5xRaGptw8gFGF6x8u28ZAURrPbiR8UY3e2WXH5xJKQj" ], "script": "base64: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", "height": 1792015, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 36vZzcm38CrfoVMTHrre1moHUVgYbB3cBN5vYjrKm9yd Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let maxSupply = 1000
5+
6+let waves = 100000000
7+
8+func getPunkIDKey (id) = ("punk_" + id)
9+
10+
11+func tryGetInteger (key) = {
12+ let val = match getInteger(this, key) {
13+ case b: Int =>
14+ b
15+ case _ =>
16+ 0
17+ }
18+ val
19+ }
20+
21+
22+func tryGetString (key) = {
23+ let val = match getString(this, key) {
24+ case b: String =>
25+ b
26+ case _ =>
27+ ""
28+ }
29+ val
30+ }
31+
32+
33+func tryGetAddress (addr) = {
34+ let val = match addressFromString(addr) {
35+ case a: Address =>
36+ a
37+ case a: Unit =>
38+ Address(base58'3Msrw9Kxa6RgHYQ63sSib9uESmaBU9gH6Gy')
39+ case _ =>
40+ throw("Match error")
41+ }
42+ val
43+ }
44+
45+
46+func getTypePunk (id) = if ((id != "0"))
47+ then "unique"
48+ else "rare"
49+
50+
51+func getURL (id) = (("https://wavespunks.com/punks/" + id) + ".png")
52+
53+
54+func getRandomNumber (variants,txId,heightBlock,offset) = {
55+ let randomSeedBlock = value(blockInfoByHeight((heightBlock - 1)))
56+ let randomHash = sha256_16Kb((txId + value(randomSeedBlock.vrf)))
57+ (toInt(randomHash, offset) % variants)
58+ }
59+
60+
61+func calcWavesNeeded (totalPunksSupply) = if ((totalPunksSupply == 0))
62+ then waves
63+ else (((totalPunksSupply / 100) + 1) * waves)
64+
65+
66+@Callable(i)
67+func mint (ref) = {
68+ let totalPunksSupply = tryGetInteger("punks_supply")
69+ let availablePunks = tryGetString("available_punks")
70+ let wavesNeeded = calcWavesNeeded(totalPunksSupply)
71+ let firstPayment = value(i.payments[0])
72+ let firstPaymentBool = match firstPayment.assetId {
73+ case t: ByteVector =>
74+ true
75+ case w: Unit =>
76+ false
77+ case _ =>
78+ throw("Match error")
79+ }
80+ if ((totalPunksSupply == maxSupply))
81+ then throw("All punks are minted")
82+ else if ((availablePunks == ""))
83+ then throw("No punks available")
84+ else if (firstPaymentBool)
85+ then throw("Payment must be in Waves tokens only")
86+ else if ((wavesNeeded > firstPayment.amount))
87+ then throw("Insufficient funds")
88+ else {
89+ let listAvailablePunks = split(availablePunks, ",")
90+ let rand = getRandomNumber((maxSupply - totalPunksSupply), i.transactionId, height, 0)
91+ let punkId = listAvailablePunks[rand]
92+ let name = ("WavesPunk #" + punkId)
93+ let meta = (((((("{\"id\": " + punkId) + ", \"type\": \"") + getTypePunk(punkId)) + "\", \"url\": \"") + getURL(punkId)) + "\"}")
94+ let asset = Issue(name, meta, 1, 0, false, unit, height)
95+ let assetId = calculateAssetId(asset)
96+ let referalAddress = tryGetAddress(ref)
97+[IntegerEntry("punks_supply", (totalPunksSupply + 1)), StringEntry("available_punks", makeString(removeByIndex(listAvailablePunks, rand), ",")), asset, StringEntry(getPunkIDKey(punkId), toBase58String(assetId)), StringEntry(toBase58String(assetId), getPunkIDKey(punkId)), ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(referalAddress, (firstPayment.amount / 10), unit)]
98+ }
99+ }
100+
101+
102+@Verifier(tx)
103+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
104+

github/deemru/w8io/169f3d6 
21.53 ms