tx · 8U52z4b6U2VPdBERpdMWGQt9rmTkBve2RZrEDJK2SLBf

3MrrWZRXFipBPwYy79PVBEVrR7oYW62jf8m:  -0.01000000 Waves

2022.05.11 20:08 [2047284] smart account 3MrrWZRXFipBPwYy79PVBEVrR7oYW62jf8m > SELF 0.00000000 Waves

{ "type": 13, "id": "8U52z4b6U2VPdBERpdMWGQt9rmTkBve2RZrEDJK2SLBf", "fee": 1000000, "feeAssetId": null, "timestamp": 1652288894021, "version": 2, "chainId": 84, "sender": "3MrrWZRXFipBPwYy79PVBEVrR7oYW62jf8m", "senderPublicKey": "AaHNopvbKHuDBasQJKhbMwM4d2XpUNjcJRJtfjEDbXQx", "proofs": [ "4m6LBND2HfMv7GUFYqcsABfGv7NwbRTtEdnSA95sXHFM9v6ere3UoJU3PeF2Gz9V7UiepAUdX91XEq6Xv5ga3xGj" ], "script": "base64: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ZnRMaXN0CQAEtQAAAAIJAQAAABBnZXRSZW1haW5pbmdOZnRzAAAAAAIAAAABXwQAAAAUcmVtYWluaW5nTmZ0TGlzdFNpemUJAQAAABRnZXRSZW1haW5pbmdOZnRDb3VudAAAAAAEAAAABHJhbmQJAASxAAAAAQkBAAAAD2dldFJhbmRvbU51bWJlcgAAAAEFAAAAAWkEAAAACHBvc2l0aW9uCQAAagAAAAIFAAAABHJhbmQFAAAAFHJlbWFpbmluZ05mdExpc3RTaXplBAAAABFzZWxlY3RlZE5mdE51bWJlcgkAAZEAAAACBQAAABByZW1haW5pbmdOZnRMaXN0BQAAAAhwb3NpdGlvbgQAAAAOc2VsZWN0ZWROZnRTdHIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAAEXNlbGVjdGVkTmZ0TnVtYmVyBAAAABd1cGRhdGVkUmVtYWluaW5nTmZ0TGlzdAkABFEAAAACBQAAABByZW1haW5pbmdOZnRMaXN0BQAAAAhwb3NpdGlvbgQAAAAfdXBkYXRlZFJlbWFpbmluZ05mdExpc3RBc1N0cmluZwkABLkAAAACBQAAABd1cGRhdGVkUmVtYWluaW5nTmZ0TGlzdAIAAAABXwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAFdmFsdWUAAAABCQAEJgAAAAEFAAAADWNhbGxlckFkZHJlc3MAAAAAAAAAAAEJAAJZAAAAAQUAAAAOc2VsZWN0ZWROZnRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAA5zZWxlY3RlZE5mdFN0cgIAAAAKX293bmVyQWRkcgUAAAANY2FsbGVyQWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARcmVtYWluaW5nTmZ0Q291bnQJAABlAAAAAgkBAAAAFGdldFJlbWFpbmluZ05mdENvdW50AAAAAAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA1yZW1haW5pbmdOZnRzBQAAAB91cGRhdGVkUmVtYWluaW5nTmZ0TGlzdEFzU3RyaW5nCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIFAAAADnNlbGVjdGVkTmZ0U3RyAgAAAAhfc29sZE91dAYFAAAAA25pbAAAAAFpAQAAAAtzdG9wUHJlc2FsZQAAAAADCQEAAAACIT0AAAACCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzCAUAAAAEdGhpcwAAAAVieXRlcwkAAAIAAAABAgAAAB9Pbmx5IE93bmVyIENhbiBTdG9wIHRoZSBQcmVzYWxlCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACAgAAAA1wcmVzYWxlU3RhdHVzBwUAAAADbmlsAAAAAWkBAAAADXJlT3BlblByZXNhbGUAAAAAAwkBAAAAAiE9AAAAAggIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwgFAAAABHRoaXMAAAAFYnl0ZXMJAAACAAAAAQIAAAAiT25seSBPd25lciBDYW4gUmUtT3BlbiB0aGUgUHJlc2FsZQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgIAAAANcHJlc2FsZVN0YXR1cwYFAAAAA25pbAAAAAFpAQAAAAVjbGFpbQAAAAEAAAAGYW1vdW50AwkBAAAAAiE9AAAAAggIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwgFAAAABHRoaXMAAAAFYnl0ZXMJAAACAAAAAQIAAAAUT25seSBPd25lciBDYW4gQ2xhaW0JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABBQAAAAljbGFpbUFkZHIJAABoAAAAAgUAAAAGYW1vdW50BQAAAAN3dnMFAAAABHVuaXQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5WDinDA==", "height": 2047284, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: VAAjUJzmudDhdHHhxxTYksgqHMB6a3nUvk3MPqLBZxo Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let maxTokenAmountForPresale = 10000000
5+
6+let tokenId = base58'DJxQ2KqhzD9KyfvCAgbTnGAgDEqCHkkYYz9bZcRmatGa'
7+
8+let claimAddr = base58'3N3fEf4mmVyYcbeuHYmZvXuJjoXjH5WRuEV'
9+
10+let wvs = 100000000
11+
12+let tokenUnitPrice = 5
13+
14+let denominator = 10000000
15+
16+let decimalsInToken = 100
17+
18+func tryGetInteger (key) = {
19+ let val = match getInteger(this, key) {
20+ case b: Int =>
21+ b
22+ case _ =>
23+ 0
24+ }
25+ val
26+ }
27+
28+
29+func tryGetString (key) = {
30+ let val = match getString(this, key) {
31+ case b: String =>
32+ b
33+ case _ =>
34+ ""
35+ }
36+ val
37+ }
38+
39+
40+func tryGetBoolean (key) = match getBoolean(this, key) {
41+ case b: Boolean =>
42+ b
43+ case _ =>
44+ false
45+}
46+
47+
48+func getCurrentTokenAmountBoughtFromPresale (addr) = {
49+ let val = tryGetInteger((addr + "_tokenPresale"))
50+ val
51+ }
52+
53+
54+func getRemainingPresaleTokenAmount () = {
55+ let val = match getInteger(this, "remainingPresaleTokenAmount") {
56+ case b: Int =>
57+ b
58+ case _ =>
59+ maxTokenAmountForPresale
60+ }
61+ val
62+ }
63+
64+
65+func getPresaleStatus () = match getBoolean(this, "presaleStatus") {
66+ case b: Boolean =>
67+ b
68+ case _ =>
69+ true
70+}
71+
72+
73+func getTotalNftCount () = {
74+ let val = match getInteger(this, "totalNftCount") {
75+ case b: Int =>
76+ b
77+ case _ =>
78+ 0
79+ }
80+ val
81+ }
82+
83+
84+func getRemainingNftCount () = {
85+ let val = match getInteger(this, "remainingNftCount") {
86+ case b: Int =>
87+ b
88+ case _ =>
89+ 0
90+ }
91+ val
92+ }
93+
94+
95+func getRemainingNfts () = {
96+ let val = match getString(this, "remainingNfts") {
97+ case b: String =>
98+ b
99+ case _ =>
100+ ""
101+ }
102+ val
103+ }
104+
105+
106+func getNftSoldOutOrNot (nftId) = match getBoolean(this, (nftId + "_soldOut")) {
107+ case b: Boolean =>
108+ b
109+ case _ =>
110+ false
111+}
112+
113+
114+func getRandomNumber (i) = {
115+ let rand = ((((i.transactionId + i.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
116+ sha256(rand)
117+ }
118+
119+
120+@Callable(i)
121+func buyTokensFromPresale (buyAmount) = {
122+ let callerAddress = toBase58String(i.caller.bytes)
123+ let pmt = value(i.payments[0])
124+ let amount = pmt.amount
125+ if (!(getPresaleStatus()))
126+ then throw("Presale Stopped by the Owner")
127+ else if ((buyAmount > getRemainingPresaleTokenAmount()))
128+ then throw("Exceeded Remaining Token Amount Dedicated for Presale")
129+ else if (((fraction(buyAmount, tokenUnitPrice, denominator) * wvs) > amount))
130+ then throw("Not enough payments in waves")
131+ else [IntegerEntry((callerAddress + "_tokenPresale"), (buyAmount + getCurrentTokenAmountBoughtFromPresale(callerAddress))), IntegerEntry("remainingPresaleTokenAmount", (getRemainingPresaleTokenAmount() - buyAmount)), StringEntry((callerAddress + "_presaleAddresses"), callerAddress), ScriptTransfer(value(addressFromString(callerAddress)), (buyAmount * decimalsInToken), tokenId)]
132+ }
133+
134+
135+
136+@Callable(i)
137+func mintNftByOwner (name,collectionId,metadata) = {
138+ let callerAddress = toBase58String(i.caller.bytes)
139+ if ((i.caller != this))
140+ then throw("Only Dapp Owner Can Mint")
141+ else {
142+ let nft = Issue(name, metadata, 1, 0, false)
143+ let nftId = calculateAssetId(nft)
144+ let nftIdStr = toBase58String(nftId)
145+[nft, StringEntry((nftIdStr + "_metadata"), metadata), StringEntry((nftIdStr + "_assetId"), nftIdStr), StringEntry((nftIdStr + "_ownerAddr"), callerAddress), StringEntry(((nftIdStr + "_collectionId_") + collectionId), nftIdStr), IntegerEntry("totalNftCount", (getTotalNftCount() + 1)), IntegerEntry("remainingNftCount", (getRemainingNftCount() + 1)), StringEntry(toString((getTotalNftCount() + 1)), nftIdStr), StringEntry("remainingNfts", ((getRemainingNfts() + toString((getTotalNftCount() + 1))) + "_")), BooleanEntry((nftIdStr + "_soldOut"), false)]
146+ }
147+ }
148+
149+
150+
151+@Callable(i)
152+func buyNftsFromPresale () = {
153+ let callerAddress = toBase58String(i.caller.bytes)
154+ if (!(getPresaleStatus()))
155+ then throw("Presale Stopped by the Owner")
156+ else if ((getRemainingNftCount() == 0))
157+ then throw("Nfts are not available for buying - all are sold")
158+ else {
159+ let remainingNftList = split(getRemainingNfts(), "_")
160+ let remainingNftListSize = getRemainingNftCount()
161+ let rand = toInt(getRandomNumber(i))
162+ let position = (rand % remainingNftListSize)
163+ let selectedNftNumber = remainingNftList[position]
164+ let selectedNftStr = getStringValue(this, selectedNftNumber)
165+ let updatedRemainingNftList = removeByIndex(remainingNftList, position)
166+ let updatedRemainingNftListAsString = makeString(updatedRemainingNftList, "_")
167+[ScriptTransfer(value(addressFromString(callerAddress)), 1, fromBase58String(selectedNftStr)), StringEntry((selectedNftStr + "_ownerAddr"), callerAddress), IntegerEntry("remainingNftCount", (getRemainingNftCount() - 1)), StringEntry("remainingNfts", updatedRemainingNftListAsString), BooleanEntry((selectedNftStr + "_soldOut"), true)]
168+ }
169+ }
170+
171+
172+
173+@Callable(i)
174+func stopPresale () = if ((i.caller.bytes != this.bytes))
175+ then throw("Only Owner Can Stop the Presale")
176+ else [BooleanEntry("presaleStatus", false)]
177+
178+
179+
180+@Callable(i)
181+func reOpenPresale () = if ((i.caller.bytes != this.bytes))
182+ then throw("Only Owner Can Re-Open the Presale")
183+ else [BooleanEntry("presaleStatus", true)]
184+
185+
186+
187+@Callable(i)
188+func claim (amount) = if ((i.caller.bytes != this.bytes))
189+ then throw("Only Owner Can Claim")
190+ else [ScriptTransfer(Address(claimAddr), (amount * wvs), unit)]
191+
192+
193+@Verifier(tx)
194+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
195+

github/deemru/w8io/169f3d6 
18.81 ms