tx · 6fVaqvvStosUw9oDXN6ACyBGwjNRBhQN4bhuqCDRX36m

3MovmZoJtqutkf49oGXHzABSMUQ7HU5Dcg7:  -0.01400000 Waves

2021.07.31 20:44 [1638127] smart account 3MovmZoJtqutkf49oGXHzABSMUQ7HU5Dcg7 > SELF 0.00000000 Waves

{ "type": 13, "id": "6fVaqvvStosUw9oDXN6ACyBGwjNRBhQN4bhuqCDRX36m", "fee": 1400000, "feeAssetId": null, "timestamp": 1627753444228, "version": 2, "chainId": 84, "sender": "3MovmZoJtqutkf49oGXHzABSMUQ7HU5Dcg7", "senderPublicKey": "3tp5fNYyPi4jMnkf6s1k4kBqvJ7nm57SxzvLyi8RkxT2", "proofs": [ "9Mne4kJ1T8wxRyXmLZSa6auDRS8bGbBioGhngHMVkJ9MUe57Xng6QzvcYoFcKwLjB4WdEpXjEfa9GFxYhE3eUmv" ], "script": "base64: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B2FjY291bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAASc3VwcGxpZXJCYWxhbmNlS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAF2dldFZhbHVlVXNlckl0ZW1Db3VudGVyAAAAAgAAAAR1c2VyAAAABGl0ZW0EAAAAEnVzZXJJdGVtQ291bnRlcktleQkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAABHVzZXIFAAAABGl0ZW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAASdXNlckl0ZW1Db3VudGVyS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAEWdldFZhbHVlSXRlbVByaWNlAAAAAQAAAARpdGVtBAAAAAxrZXlJdGVtUHJpY2UJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAAxrZXlJdGVtUHJpY2UBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQEAAAAWZ2V0VmFsdWVJdGVtRXhwaXJlVGltZQAAAAEAAAAEaXRlbQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAABRnZXRLZXlJdGVtRXhwaXJlRGF0ZQAAAAEFAAAABGl0ZW0BAAAADmdldFZhbHVlQ29tbWl0AAAAAgAAAARpdGVtAAAABHVzZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyAQAAABRnZXRWYWx1ZUNvbW1pdHNDb3VudAAAAAEAAAAEaXRlbQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAABJnZXRLZXlDb21taXRzQ291bnQAAAABBQAAAARpdGVtAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIAAAAEaXRlbQAAAAR1c2VyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgEAAAASZ2V0VmFsdWVJdGVtU3RhdHVzAAAAAQAAAARpdGVtCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0BAAAAEmdldFZhbHVlVm90ZXNDb3VudAAAAAIAAAAEaXRlbQAAAAR2b3RlCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAAEGdldEtleVZvdGVzQ291bnQAAAACBQAAAARpdGVtBQAAAAR2b3RlAAAABwAAAAFpAQAAABByZWdpc3RlclN1cHBsaWVyAAAAAQAAAARkYXRhBAAAAAhzdXBwbGllcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdhY2NvdW50CQEAAAASZ2V0U3VwcGxpZXJBY2NvdW50AAAAAQUAAAAIc3VwcGxpZXIDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAAROT05FCQAAAgAAAAECAAAALlRoaXMgYWRkcmVzcyBoYXMgYWxyZWFkeSByZWdpc3RyZWQgYXMgc3VwcGxpZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFWdldEtleVN1cHBsaWVyQWNjb3VudAAAAAEFAAAACHN1cHBsaWVyBQAAAARkYXRhBQAAAANuaWwAAAABaQEAAAAHYWRkSXRlbQAAAAQAAAAFdGl0bGUAAAAFcHJpY2UAAAAEZGF0YQAAAAZleHBpcmUEAAAACHN1cHBsaWVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAB2FjY291bnQJAQAAABJnZXRTdXBwbGllckFjY291bnQAAAABBQAAAAhzdXBwbGllcgQAAAAEaXRlbQkBAAAACmdldEtleUl0ZW0AAAACBQAAAAhzdXBwbGllcgUAAAAFdGl0bGUDCQAAAAAAAAIFAAAAB2FjY291bnQFAAAABE5PTkUJAAACAAAAAQIAAAAuWW91IHNob3VsZCByZWdp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ciB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAACHN1cHBsaWVyBQAAAAROT05FCQAAAgAAAAECAAAAGFN1cHBsaWVyIGRvZXMgbm90IGV4aXN0cwQAAAAPdXNlckl0ZW1Db3VudGVyCQEAAAAVZ2V0S2V5VXNlckl0ZW1Db3VudGVyAAAAAgUAAAALdXNlckFkZHJlc3MFAAAABGl0ZW0EAAAAF25ld1ZhbHVlVXNlckl0ZW1Db3VudGVyCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABBAAAABJzdXBwbGllckJhbGFuY2VLZXkJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAAhzdXBwbGllcgQAAAASbmV3U3VwcGxpZXJCYWxhbmNlCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAACHN1cHBsaWVyCAUAAAADcG10AAAABmFtb3VudAQAAAAFYXNzZXQJAARDAAAABwIAAAAFQXNzZXQCAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAYFAAAABHVuaXQAAAAAAAAAAAAEAAAAB2Fzc2V0SWQJAAQ4AAAAAQUAAAAFYXNzZXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD3VzZXJJdGVtQ291bnRlcgUAAAAXbmV3VmFsdWVVc2VySXRlbUNvdW50ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEnN1cHBsaWVyQmFsYW5jZUtleQUAAAASbmV3U3VwcGxpZXJCYWxhbmNlBQAAAANuaWwAAAABaQEAAAAKdm90ZUNvbW1pdAAAAAIAAAAEaXRlbQAAAARoYXNoBAAAAAR1c2VyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADGNvbW1pdHNDb3VudAkBAAAAFGdldFZhbHVlQ29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQQAAAAGc3RhdHVzCQEAAAASZ2V0VmFsdWVJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQMJAABnAAAAAgUAAAAMY29tbWl0c0Nv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", "height": 1638127, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BUGgRT9xfAthJ1syRHWy9tRPS3BVykAJjH7AZFGy2TgE Next: G9q5Pgx6bboREvJtPWaXwaspwajW3jNo6FN7WbiD8ncT Diff:
OldNewDifferences
196196 let userAddress = toBase58String(i.caller.bytes)
197197 let price = getValueItemPrice(item)
198198 let supplier = getValueItemSupplier(item)
199- if ((price > pmt.amount))
200- then throw("Purchase amount cannot be less than item price")
201- else if ((pmt.amount > price))
202- then throw("Purchase amount cannot be higher than item price")
203- else if ((supplier == NONE))
204- then throw("Supplier does not exists")
205- else {
206- let userItemCounter = getKeyUserItemCounter(userAddress, item)
207- let newValueUserItemCounter = (getValueUserItemCounter(userAddress, item) + 1)
208- let supplierBalanceKey = getKeyBalanceSupplier(supplier)
209- let newSupplierBalance = (getValueBalanceSupplier(supplier) + pmt.amount)
199+ let expire = getValueItemExpireTime(item)
200+ if ((lastBlock.timestamp >= expire))
201+ then throw("Coupon expired")
202+ else if ((price > pmt.amount))
203+ then throw("Purchase amount cannot be less than item price")
204+ else if ((pmt.amount > price))
205+ then throw("Purchase amount cannot be higher than item price")
206+ else if ((supplier == NONE))
207+ then throw("Supplier does not exists")
208+ else {
209+ let userItemCounter = getKeyUserItemCounter(userAddress, item)
210+ let newValueUserItemCounter = (getValueUserItemCounter(userAddress, item) + 1)
211+ let supplierBalanceKey = getKeyBalanceSupplier(supplier)
212+ let newSupplierBalance = (getValueBalanceSupplier(supplier) + pmt.amount)
213+ let asset = Issue("Asset", "", 1, 0, true, unit, 0)
214+ let assetId = calculateAssetId(asset)
210215 [IntegerEntry(userItemCounter, newValueUserItemCounter), IntegerEntry(supplierBalanceKey, newSupplierBalance)]
211- }
216+ }
212217 }
213218 }
214219
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "NONE"
55
66 let VOTERS = 3
77
88 let QUORUM = 2
99
1010 let FEATURED = "featured"
1111
1212 let DELISTED = "delisted"
1313
1414 let VOTING = "voting"
1515
1616 let REVEAL = "reveal"
1717
1818 func getStringByKey (key) = match getString(this, key) {
1919 case a: String =>
2020 a
2121 case _ =>
2222 NONE
2323 }
2424
2525
2626 func getIntegerByKey (key) = match getInteger(this, key) {
2727 case a: Int =>
2828 a
2929 case _ =>
3030 0
3131 }
3232
3333
3434 func getKeySupplierAccount (account) = (account + "_account")
3535
3636
3737 func getSupplierAccount (account) = getStringByKey(getKeySupplierAccount(account))
3838
3939
4040 func getKeyItem (supplier,title) = {
4141 let supplierTitle = (supplier + title)
4242 ("item_" + toBase58String(sha256(toBytes(supplierTitle))))
4343 }
4444
4545
4646 func getKeyItemSupplier (item) = (item + "_owner")
4747
4848
4949 func getKeyItemTitle (item) = (item + "_title")
5050
5151
5252 func getKeyItemPrice (item) = (item + "_price")
5353
5454
5555 func getKeyItemData (item) = (item + "_data")
5656
5757
5858 func getKeyItemExpireDate (item) = (item + "_expiredate")
5959
6060
6161 func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
6262
6363
6464 func getKeyCommitsCount (item) = (item + "_cmtcnt")
6565
6666
6767 func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
6868
6969
7070 func getKeyItemStatus (item) = (item + "_status")
7171
7272
7373 func getKeyVotesCount (item,vote) = ((item + "_res:") + vote)
7474
7575
7676 func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
7777
7878
7979 func getKeyBalanceSupplier (account) = (account + "_balance")
8080
8181
8282 func getValueBalanceSupplier (account) = {
8383 let supplierBalanceKey = getKeyBalanceSupplier(account)
8484 match getInteger(this, supplierBalanceKey) {
8585 case a: Int =>
8686 a
8787 case _ =>
8888 0
8989 }
9090 }
9191
9292
9393 func getValueUserItemCounter (user,item) = {
9494 let userItemCounterKey = getKeyUserItemCounter(user, item)
9595 match getInteger(this, userItemCounterKey) {
9696 case a: Int =>
9797 a
9898 case _ =>
9999 0
100100 }
101101 }
102102
103103
104104 func getValueItemPrice (item) = {
105105 let keyItemPrice = getKeyItemPrice(item)
106106 getIntegerValue(this, keyItemPrice)
107107 }
108108
109109
110110 func getValueItemSupplier (item) = getStringByKey(getKeyItemSupplier(item))
111111
112112
113113 func getValueItemExpireTime (item) = getIntegerByKey(getKeyItemExpireDate(item))
114114
115115
116116 func getValueCommit (item,user) = getStringByKey(getKeyCommit(item, user))
117117
118118
119119 func getValueCommitsCount (item) = getIntegerByKey(getKeyCommitsCount(item))
120120
121121
122122 func getValueReveal (item,user) = getStringByKey(getKeyReveal(item, user))
123123
124124
125125 func getValueItemStatus (item) = getStringByKey(getKeyItemStatus(item))
126126
127127
128128 func getValueVotesCount (item,vote) = getIntegerByKey(getKeyVotesCount(item, vote))
129129
130130
131131 @Callable(i)
132132 func registerSupplier (data) = {
133133 let supplier = toBase58String(i.caller.bytes)
134134 let account = getSupplierAccount(supplier)
135135 if ((account != NONE))
136136 then throw("This address has already registred as supplier")
137137 else [StringEntry(getKeySupplierAccount(supplier), data)]
138138 }
139139
140140
141141
142142 @Callable(i)
143143 func addItem (title,price,data,expire) = {
144144 let supplier = toBase58String(i.caller.bytes)
145145 let account = getSupplierAccount(supplier)
146146 let item = getKeyItem(supplier, title)
147147 if ((account == NONE))
148148 then throw("You should register as supplier to add an item")
149149 else if ((0 >= price))
150150 then throw("Purchase amount cannot be less than item price")
151151 else if ((getValueItemSupplier(item) != NONE))
152152 then throw("An item already exists")
153153 else [StringEntry(getKeyItemSupplier(item), supplier), StringEntry(getKeyItemTitle(item), title), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), IntegerEntry(getKeyItemExpireDate(item), expire)]
154154 }
155155
156156
157157
158158 @Callable(i)
159159 func updateItem (item,title,price,data,expire) = {
160160 let supplier = toBase58String(i.caller.bytes)
161161 let account = getSupplierAccount(supplier)
162162 let itemSupplier = getValueItemSupplier(item)
163163 if ((account == NONE))
164164 then throw("You should register as supplier to remove an item")
165165 else if (if ((item == NONE))
166166 then true
167167 else (supplier != itemSupplier))
168168 then throw(("You don't owned item " + item))
169169 else [StringEntry(getKeyItemTitle(item), title), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), IntegerEntry(getKeyItemExpireDate(item), expire)]
170170 }
171171
172172
173173
174174 @Callable(i)
175175 func removeItem (item) = {
176176 let supplier = toBase58String(i.caller.bytes)
177177 let account = getSupplierAccount(supplier)
178178 let itemSupplier = getValueItemSupplier(item)
179179 if ((account == NONE))
180180 then throw("You should register as supplier to remove an item")
181181 else if (if ((item == NONE))
182182 then true
183183 else (supplier != itemSupplier))
184184 then throw(("You don't owned item " + item))
185185 else [DeleteEntry(getKeyItemSupplier(item)), DeleteEntry(getKeyItemTitle(item)), DeleteEntry(getKeyItemPrice(item)), DeleteEntry(getKeyItemData(item)), DeleteEntry(getKeyItemExpireDate(item))]
186186 }
187187
188188
189189
190190 @Callable(i)
191191 func purchase (item) = {
192192 let pmt = i.payments[0]
193193 if (isDefined(pmt.assetId))
194194 then throw("You can buy tokens only with Waves tokens")
195195 else {
196196 let userAddress = toBase58String(i.caller.bytes)
197197 let price = getValueItemPrice(item)
198198 let supplier = getValueItemSupplier(item)
199- if ((price > pmt.amount))
200- then throw("Purchase amount cannot be less than item price")
201- else if ((pmt.amount > price))
202- then throw("Purchase amount cannot be higher than item price")
203- else if ((supplier == NONE))
204- then throw("Supplier does not exists")
205- else {
206- let userItemCounter = getKeyUserItemCounter(userAddress, item)
207- let newValueUserItemCounter = (getValueUserItemCounter(userAddress, item) + 1)
208- let supplierBalanceKey = getKeyBalanceSupplier(supplier)
209- let newSupplierBalance = (getValueBalanceSupplier(supplier) + pmt.amount)
199+ let expire = getValueItemExpireTime(item)
200+ if ((lastBlock.timestamp >= expire))
201+ then throw("Coupon expired")
202+ else if ((price > pmt.amount))
203+ then throw("Purchase amount cannot be less than item price")
204+ else if ((pmt.amount > price))
205+ then throw("Purchase amount cannot be higher than item price")
206+ else if ((supplier == NONE))
207+ then throw("Supplier does not exists")
208+ else {
209+ let userItemCounter = getKeyUserItemCounter(userAddress, item)
210+ let newValueUserItemCounter = (getValueUserItemCounter(userAddress, item) + 1)
211+ let supplierBalanceKey = getKeyBalanceSupplier(supplier)
212+ let newSupplierBalance = (getValueBalanceSupplier(supplier) + pmt.amount)
213+ let asset = Issue("Asset", "", 1, 0, true, unit, 0)
214+ let assetId = calculateAssetId(asset)
210215 [IntegerEntry(userItemCounter, newValueUserItemCounter), IntegerEntry(supplierBalanceKey, newSupplierBalance)]
211- }
216+ }
212217 }
213218 }
214219
215220
216221
217222 @Callable(i)
218223 func voteCommit (item,hash) = {
219224 let user = toBase58String(i.caller.bytes)
220225 let commitsCount = getValueCommitsCount(item)
221226 let status = getValueItemStatus(item)
222227 if ((commitsCount >= VOTERS))
223228 then throw("Reached max number of voters")
224229 else if ((getValueCommit(item, user) != NONE))
225230 then throw("You voted already")
226231 else if ((getKeyItemSupplier(item) == NONE))
227232 then throw("Item does not exists")
228233 else if (if ((status != NONE))
229234 then (status != VOTING)
230235 else false)
231236 then throw("Voting is not active for this item now")
232237 else {
233238 let newStatus = if ((commitsCount == VOTERS))
234239 then REVEAL
235240 else VOTING
236241 [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commitsCount + 1)), StringEntry(getKeyItemStatus(item), newStatus)]
237242 }
238243 }
239244
240245
241246
242247 @Callable(i)
243248 func voteReveal (item,vote,salt) = {
244249 let user = toBase58String(i.caller.bytes)
245250 let status = getValueItemStatus(item)
246251 let newVotesCount = (getValueVotesCount(item, vote) + 1)
247252 let saltedVote = toBase58String(sha256(toBytes(((item + vote) + salt))))
248253 if ((saltedVote != getValueCommit(item, user)))
249254 then throw("Reveal data is not valid")
250255 else if ((VOTERS > getValueCommitsCount(item)))
251256 then throw("Max number of voters not reached")
252257 else if ((getValueReveal(item, user) != NONE))
253258 then throw("You voted already")
254259 else if (if ((status != VOTING))
255260 then (status != REVEAL)
256261 else false)
257262 then throw("Voting is not active for this item now")
258263 else if (if ((vote != FEATURED))
259264 then (vote != DELISTED)
260265 else false)
261266 then throw("Provided voting option is incorrect")
262267 else {
263268 let newStatus = if ((newVotesCount >= QUORUM))
264269 then vote
265270 else REVEAL
266271 [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVotesCount(item, user), newVotesCount), StringEntry(getKeyItemStatus(item), newStatus)]
267272 }
268273 }
269274
270275
271276 @Verifier(tx)
272277 func verify () = match tx {
273278 case t: SetScriptTransaction =>
274279 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
275280 case _ =>
276281 false
277282 }
278283

github/deemru/w8io/026f985 
38.16 ms