tx · 41NK9egTzof6m5BsFvEVECqs9KRbPtrxZ4dziR3G18uA

3Mr6LNXTo2cMvNMrka9pV1pwHZFXVHULoue:  -0.01000000 Waves

2021.11.30 09:56 [1813450] smart account 3Mr6LNXTo2cMvNMrka9pV1pwHZFXVHULoue > SELF 0.00000000 Waves

{ "type": 13, "id": "41NK9egTzof6m5BsFvEVECqs9KRbPtrxZ4dziR3G18uA", "fee": 1000000, "feeAssetId": null, "timestamp": 1638255465197, "version": 2, "chainId": 84, "sender": "3Mr6LNXTo2cMvNMrka9pV1pwHZFXVHULoue", "senderPublicKey": "9tHFZ3PMkyXBYPkjU77RdMPEGBzfm7BWxfuHvGjgdrv5", "proofs": [ "25XMXAUTcCyw23W2hZYZPj8wgXoyfw1yiuWiT3erHFfLCdncWBWFTJVKKcA4sztmy5fNCnBQC2vjus37zMbovWaR" ], "script": "base64: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", "height": 1813450, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: Dq3yM1iJ9TYCWftAZCCw7yhh38B1iNB6DBK5smJiTXWs Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func priceKey (asset) = (asset + "_price")
5+
6+
7+func ownerKey (asset) = (asset + "_owner")
8+
9+
10+func tryGetInteger (key) = {
11+ let val = match getInteger(this, key) {
12+ case b: Int =>
13+ b
14+ case _ =>
15+ 0
16+ }
17+ val
18+ }
19+
20+
21+func tryGetString (key) = {
22+ let val = match getString(this, key) {
23+ case b: String =>
24+ b
25+ case _ =>
26+ ""
27+ }
28+ val
29+ }
30+
31+
32+@Callable(i)
33+func offerForSale (price) = {
34+ let firstPayment = value(i.payments[0])
35+ let assetId = match firstPayment.assetId {
36+ case id: ByteVector =>
37+ id
38+ case w: Unit =>
39+ throw("Asset is not NFT")
40+ case _ =>
41+ throw("Match error")
42+ }
43+ let assetIdStr = toBase58String(assetId)
44+ let asset = match assetInfo(assetId) {
45+ case a: Asset =>
46+ a
47+ case _ =>
48+ throw("Error getting information about asset")
49+ }
50+ if (if (if ((asset.quantity != 1))
51+ then (asset.decimals != 0)
52+ else false)
53+ then asset.reissuable
54+ else false)
55+ then throw("Asset is not NFT")
56+ else [IntegerEntry(priceKey(assetIdStr), price), StringEntry(ownerKey(assetIdStr), toBase58String(i.caller.bytes))]
57+ }
58+
59+
60+
61+@Callable(i)
62+func buy (assetStr) = {
63+ let price = tryGetInteger(priceKey(assetStr))
64+ let ownerStr = tryGetString(ownerKey(assetStr))
65+ let owner = match addressFromString(ownerStr) {
66+ case a: Address =>
67+ a
68+ case _ =>
69+ throw("Address parsing error")
70+ }
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 ((price == 0))
81+ then throw("This NFT is not for sale")
82+ else if (firstPaymentBool)
83+ then throw("Payment must be in Waves tokens only")
84+ else if ((price > firstPayment.amount))
85+ then throw("Insufficient funds")
86+ else [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), ScriptTransfer(owner, price, unit), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr))]
87+ }
88+
89+
90+
91+@Callable(i)
92+func nftNoLongerForSale (assetStr) = {
93+ let ownerStr = tryGetString(ownerKey(assetStr))
94+ let owner = match addressFromString(ownerStr) {
95+ case a: Address =>
96+ a
97+ case _ =>
98+ throw("Address parsing error")
99+ }
100+ if ((ownerStr != toBase58String(i.caller.bytes)))
101+ then throw("The calling address is not the owner of the NFT token")
102+ else [ScriptTransfer(i.caller, 1, fromBase58String(assetStr)), DeleteEntry(priceKey(assetStr)), DeleteEntry(ownerKey(assetStr))]
103+ }
104+
105+
106+@Verifier(tx)
107+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
108+

github/deemru/w8io/873ac7e 
16.39 ms