tx · jY236k8pjnvDVTjnVMmo2Qq37Jwc4MVptdMNqAH8ios 3PQT3vDXg5tvZaeeS58X2onVvxwBoHn85Mc: -0.01400000 Waves 2019.10.04 10:21 [1734868] smart account 3PQT3vDXg5tvZaeeS58X2onVvxwBoHn85Mc > SELF 0.00000000 Waves
{ "type": 13, "id": "jY236k8pjnvDVTjnVMmo2Qq37Jwc4MVptdMNqAH8ios", "fee": 1400000, "feeAssetId": null, "timestamp": 1570173902120, "version": 1, "sender": "3PQT3vDXg5tvZaeeS58X2onVvxwBoHn85Mc", "senderPublicKey": "G4Ywi2Ua6APjE691ynx8kGLQauzNcNZ1us1AnbgWSXTA", "proofs": [ "4GVMM7K5LToQfvT7NpycpkxWEmebM9NtUetqkEFu5yYN4EnWd65dqhAeCpL8mTqYEKBqVqLgizTkSJQXeKhFWqSx" ], "script": "base64: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", "chainId": 87, "height": 1734868, "spentComplexity": 0 } View: original | compacted Prev: 8CQv6aXwE223Z11GdHmCUtfQ6RZs8dj1ZD4kMmBcrut1 Next: C2mB2YmKEQv9q8L9u7Nsg4UxWdUyavS1HBJJQJnqg8Qt Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let adminPublicKey = base58'REPLACEADMNKEY' | |
5 | + | ||
6 | + | let thanksTokenId = base58'HERESASSETHASH' | |
7 | + | ||
8 | + | @Callable(i) | |
9 | + | func addToWhiteList (address) = { | |
10 | + | let userInTheList = getBoolean(this, address) | |
11 | + | let newValue = match userInTheList { | |
12 | + | case b: Boolean => | |
13 | + | if (b) | |
14 | + | then throw("User is already in the list and enabled") | |
15 | + | else throw("User is in the list, but disabled") | |
16 | + | case _ => | |
17 | + | true | |
18 | + | } | |
19 | + | if ((i.callerPublicKey != adminPublicKey)) | |
20 | + | then throw("Only admin can call this function") | |
21 | + | else match i.payment { | |
22 | + | case pmt: AttachedPayment => | |
23 | + | ScriptResult(WriteSet([DataEntry(address, newValue)]), TransferSet([ScriptTransfer(addressFromStringValue(address), 1000000, unit)])) | |
24 | + | case _ => | |
25 | + | throw("Payment is needed to transfer to an account") | |
26 | + | } | |
27 | + | } | |
28 | + | ||
29 | + | ||
30 | + | ||
31 | + | @Callable(i) | |
32 | + | func removeFromWhiteList (address) = if ((i.callerPublicKey != adminPublicKey)) | |
33 | + | then throw("Only admin can call this function") | |
34 | + | else WriteSet([DataEntry(address, false)]) | |
35 | + | ||
36 | + | ||
37 | + | ||
38 | + | @Callable(i) | |
39 | + | func buyItem (itemId) = { | |
40 | + | let callerAddress = toBase58String(i.caller.bytes) | |
41 | + | let inWhiteListUnit = getBoolean(this, callerAddress) | |
42 | + | let inWhiteList = match inWhiteListUnit { | |
43 | + | case w: Boolean => | |
44 | + | if (w) | |
45 | + | then true | |
46 | + | else throw("Buyer is not in the white-list[removed]") | |
47 | + | case _ => | |
48 | + | throw(("Buyer is not in the white-list: " + callerAddress)) | |
49 | + | } | |
50 | + | let pmt = match i.payment { | |
51 | + | case pmt: AttachedPayment => | |
52 | + | if (if (!(isDefined(pmt.assetId))) | |
53 | + | then true | |
54 | + | else (pmt.assetId != thanksTokenId)) | |
55 | + | then throw("can accept thanks tokens only") | |
56 | + | else pmt | |
57 | + | case _ => | |
58 | + | throw("Payment is required") | |
59 | + | } | |
60 | + | let price = getInteger(this, (("item_" + itemId) + "_price")) | |
61 | + | let priceReal = match price { | |
62 | + | case in: Int => | |
63 | + | if ((pmt.amount >= in)) | |
64 | + | then in | |
65 | + | else throw(("Price is too low, you have to pay: " + toString(in))) | |
66 | + | case _ => | |
67 | + | throw(("The price is not defined: " + itemId)) | |
68 | + | } | |
69 | + | let buyer = getString(this, (("item_" + itemId) + "_buyer")) | |
70 | + | let buyerAddressString = match buyer { | |
71 | + | case b: String => | |
72 | + | if ((b == callerAddress)) | |
73 | + | then b | |
74 | + | else throw("You are not the buyer of it!") | |
75 | + | case _ => | |
76 | + | throw("buyerAddress not found") | |
77 | + | } | |
78 | + | if ((assetBalance(this, fromBase58String(itemId)) == 0)) | |
79 | + | then throw(("There is no such item: " + itemId)) | |
80 | + | else if (if (if (inWhiteList) | |
81 | + | then (callerAddress == buyerAddressString) | |
82 | + | else false) | |
83 | + | then (pmt.amount >= priceReal) | |
84 | + | else false) | |
85 | + | then { | |
86 | + | let callerPubKey = toBase58String(i.callerPublicKey) | |
87 | + | let buyKey = (("item_" + itemId) + "_bought") | |
88 | + | WriteSet([DataEntry(buyKey, "pending")]) | |
89 | + | } | |
90 | + | else throw("Unknown error") | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | ||
95 | + | @Callable(i) | |
96 | + | func approve (itemId) = { | |
97 | + | let buyerKey = (("item_" + itemId) + "_buyer") | |
98 | + | let buyer = getString(this, buyerKey) | |
99 | + | let buyerAddress = match buyer { | |
100 | + | case b: String => | |
101 | + | addressFromString(b) | |
102 | + | case _ => | |
103 | + | throw("buyerAddress not found") | |
104 | + | } | |
105 | + | let buyerAddressReal = match buyerAddress { | |
106 | + | case a: Address => | |
107 | + | a | |
108 | + | case _ => | |
109 | + | throw("Bad address of buyer") | |
110 | + | } | |
111 | + | if ((i.callerPublicKey != adminPublicKey)) | |
112 | + | then throw("Only admin can call this function") | |
113 | + | else { | |
114 | + | let buyKey = (("item_" + itemId) + "_bought") | |
115 | + | let itemIdBytes = fromBase58String(itemId) | |
116 | + | ScriptResult(WriteSet([DataEntry(buyKey, "approved")]), TransferSet([ScriptTransfer(buyerAddressReal, 1, itemIdBytes)])) | |
117 | + | } | |
118 | + | } | |
119 | + | ||
120 | + | ||
121 | + | ||
122 | + | @Callable(i) | |
123 | + | func reject (itemId) = if ((i.callerPublicKey != adminPublicKey)) | |
124 | + | then throw("Only admin can call this function") | |
125 | + | else { | |
126 | + | let buyKey = (("item_" + itemId) + "_bought") | |
127 | + | let buyerKey = (("item_" + itemId) + "_buyer") | |
128 | + | let priceKey = (("item_" + itemId) + "_price") | |
129 | + | let buyerAddress = addressFromStringValue(getStringValue(this, buyerKey)) | |
130 | + | let price = getIntegerValue(this, priceKey) | |
131 | + | ScriptResult(WriteSet([DataEntry(buyKey, "rejected")]), TransferSet([ScriptTransfer(buyerAddress, price, thanksTokenId)])) | |
132 | + | } | |
133 | + | ||
134 | + | ||
135 | + | ||
136 | + | @Callable(i) | |
137 | + | func addItem (buyerAddress,price) = { | |
138 | + | let inWhiteListUnit = getBoolean(this, buyerAddress) | |
139 | + | let inWhiteList = match inWhiteListUnit { | |
140 | + | case w: Boolean => | |
141 | + | if (w) | |
142 | + | then true | |
143 | + | else throw("Buyer is not in the white-list[removed]") | |
144 | + | case _ => | |
145 | + | throw(("Buyer is not in the white-list: " + buyerAddress)) | |
146 | + | } | |
147 | + | if (if ((i.callerPublicKey != adminPublicKey)) | |
148 | + | then true | |
149 | + | else (inWhiteList == false)) | |
150 | + | then throw("Only admin can call this function") | |
151 | + | else { | |
152 | + | let pmt = match i.payment { | |
153 | + | case pmt: AttachedPayment => | |
154 | + | pmt | |
155 | + | case _ => | |
156 | + | throw("Payment is required") | |
157 | + | } | |
158 | + | let paymentAssetId = match pmt.assetId { | |
159 | + | case d: ByteVector => | |
160 | + | d | |
161 | + | case _ => | |
162 | + | throw("You have attached waves to the payment *facepalm*") | |
163 | + | } | |
164 | + | let nftAssetInfo = assetInfo(paymentAssetId) | |
165 | + | let nftAssetInfoReal = match nftAssetInfo { | |
166 | + | case ai: Asset => | |
167 | + | ai | |
168 | + | case _ => | |
169 | + | throw("Cant get asset info") | |
170 | + | } | |
171 | + | if (if (if ((nftAssetInfoReal.quantity != 1)) | |
172 | + | then true | |
173 | + | else (nftAssetInfoReal.decimals != 0)) | |
174 | + | then true | |
175 | + | else (nftAssetInfoReal.issuerPublicKey != adminPublicKey)) | |
176 | + | then throw("Token should be an NFT and from admin user") | |
177 | + | else { | |
178 | + | let buyerKey = (("item_" + toBase58String(nftAssetInfoReal.id)) + "_buyer") | |
179 | + | let priceKey = (("item_" + toBase58String(nftAssetInfoReal.id)) + "_price") | |
180 | + | WriteSet([DataEntry(buyerKey, buyerAddress), DataEntry(priceKey, price)]) | |
181 | + | } | |
182 | + | } | |
183 | + | } | |
184 | + | ||
185 | + |
github/deemru/w8io/6500d08 64.67 ms ◑