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:
OldNewDifferences
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