tx · 6kwW4cUXabAtA7GqjRCKXhw5oNj9ek7HdginDmLHsqMB

3N81Dk1WuUv7UKt3inqWVYN81J8VHjoV3MC:  -0.01400000 Waves

2022.02.21 04:16 [1932747] smart account 3N81Dk1WuUv7UKt3inqWVYN81J8VHjoV3MC > SELF 0.00000000 Waves

{ "type": 13, "id": "6kwW4cUXabAtA7GqjRCKXhw5oNj9ek7HdginDmLHsqMB", "fee": 1400000, "feeAssetId": null, "timestamp": 1645406236808, "version": 2, "chainId": 84, "sender": "3N81Dk1WuUv7UKt3inqWVYN81J8VHjoV3MC", "senderPublicKey": "5vXdNgZ1TR8AAzcnLumQTQYzcU3AwHj91bZTtiE3roBE", "proofs": [ "5qPRzEdZNVavRSVdQGTnR2ZsznbPCf6eseMT8cyjAPgQ4TkJzgQFRHX2zptGjEiYQRkPNkbwvbGRu34N7Pe2aEV9" ], "script": "base64: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YQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAQZ2V0VXNlckl0ZW1QcmljZQAAAAEAAAAEaXRlbQQAAAAMa2V5SXRlbVByaWNlCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQkABBoAAAACBQAAAAR0aGlzBQAAAAxrZXlJdGVtUHJpY2UBAAAADmdldFZhbHVlQ29tbWl0AAAAAgAAAARpdGVtAAAABHVzZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyAQAAABRnZXRWYWx1ZUNvbW1pdHNDb3VudAAAAAEAAAAEaXRlbQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAABJnZXRLZXlDb21taXRzQ291bnQAAAABBQAAAARpdGVtAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIAAAAEaXRlbQAAAAR1c2VyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgEAAAASZ2V0VmFsdWVJdGVtU3RhdHVzAAAAAQAAAARpdGVtCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0BAAAAEmdldFZhbHVlVm90ZXNDb3VudAAAAAIAAAAEaXRlbQAAAAR2b3RlCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAAEGdldEtleVZvdGVzQ291bnQAAAACBQAAAARpdGVtBQAAAAR2b3RlAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEAAAAEaXRlbQQAAAAMa2V5SXRlbVByaWNlCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAMa2V5SXRlbVByaWNlAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEAAAAHYWNjb3VudAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1TdXBwbGllcgAAAAEFAAAAB2FjY291bnQAAAAEAAAAAWkBAAAAB2FkZEl0ZW0AAAADAAAABXRpdGxlAAAABXByaWNlAAAABGRhdGEEAAAAD3N1cHBsaWVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAARpdGVtCQEAAAAKZ2V0S2V5SXRlbQAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAFdGl0bGUDCQAAZwAAAAIAAAAAAAAAAAAFAAAABXByaWNlCQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQEAAAACIT0AAAACCQEAAAAUZ2V0VmFsdWVJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAAROT05FCQAAAgAAAAECAAAAGUFuIGl0ZW0gaXMgYWxyZWFkeSBleGlzdHMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAA9zdXBwbGllckFkZHJlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtBQAAAAVwcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQUAAAADbmlsAAAAAWkBAAAACHB1cmNoYXNlAAAAAQAAAARpdGVtBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAoeW91IGNhbiBidSB0b2tlbnMgb25seSB3aXRoIFdhdmVzIHRva2VucwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAZgAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAAAVwcmljZQkAAAIAAAABAgAAADBQdXJjaGFzZSBhbW91bnQgY2Fubm90IGJlIGhpZ2hlciB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAQAAAAPdXNlckl0ZW1Db3VudGVyCQEAAAAVZ2V0S2V5VXNlckl0ZW1Db3VudGVyAAAAAgUAAAALdXNlckFkZHJlc3MFAAAABGl0ZW0EAAAAF25ld1ZhbHVlVXNlckl0ZW1Db3VudGVyCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABBAAAABJzdXBwbGllckJhbGFuY2VLZXkJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAA9zdXBwbGllckFkZHJlc3MEAAAAEm5ld1N1cHBsaWVyQmFsYW5jZQkAAGQAAAACCQEAAAAXZ2V0VmFsdWVCYWxhbmNlU3VwcGxpZXIAAAABBQAAAA9zdXBwbGllckFkZHJlc3MIBQAAAANwbXQAAAAGYW1vdW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA91c2VySXRlbUNvdW50ZXIFAAAAF25ld1ZhbHVlVXNlckl0ZW1Db3VudGVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJzdXBwbGllckJhbGFuY2VLZXkFAAAAEm5ld1N1cHBsaWVyQmFsYW5jZQUAAAADbmlsAAAAAWkBAAAACnZvdGVDb21taXQAAAACAAAABGl0ZW0AAAAEaGFzaAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAA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", "height": 1932747, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BQKY1HM1xunmPXFtQXhz8CiMJf3LwVrLoyBorfEvfcHv Next: none Diff:
OldNewDifferences
1919 case a: String =>
2020 a
2121 case _ =>
22- "NONE"
22+ NONE
2323 }
2424
2525
6767 func getKeyBalanceSupplier (account) = (account + "_balance")
6868
6969
70+func getValueBalanceSupplier (account) = {
71+ let supplierBalanceKey = getKeyBalanceSupplier(account)
72+ match getInteger(this, supplierBalanceKey) {
73+ case a: Int =>
74+ a
75+ case _ =>
76+ 0
77+ }
78+ }
79+
80+
7081 func getValueUserItemCounter (user,item) = {
7182 let userItemCounterKey = getKeyUserItemCounter(user, item)
7283 match getInteger(this, userItemCounterKey) {
99110 func getValueVotesCount (item,vote) = getIntegerByKey(getKeyVotesCount(item, vote))
100111
101112
102-func getValueItemSupplier (account) = match getString(this, account) {
103- case a: String =>
104- a
105- case _ =>
106- "NONE"
107-}
113+func getValueItemPrice (item) = {
114+ let keyItemPrice = getKeyItemPrice(item)
115+ getIntegerValue(this, keyItemPrice)
116+ }
117+
118+
119+func getValueItemSupplier (account) = getStringByKey(getKeyItemSupplier(account))
108120
109121
110122 @Callable(i)
121133
122134
123135 @Callable(i)
136+func purchase (item) = {
137+ let pmt = extract(i.payment)
138+ if (isDefined(pmt.assetId))
139+ then throw("you can bu tokens only with Waves tokens")
140+ else {
141+ let userAddress = toBase58String(i.caller.bytes)
142+ let price = getValueItemPrice(item)
143+ let supplierAddress = getValueItemSupplier(item)
144+ if ((price > pmt.amount))
145+ then throw("Purchase amount cannot be less than item price")
146+ else if ((pmt.amount > price))
147+ then throw("Purchase amount cannot be higher than item price")
148+ else if ((supplierAddress == NONE))
149+ then throw("Supplier does not exist")
150+ else {
151+ let userItemCounter = getKeyUserItemCounter(userAddress, item)
152+ let newValueUserItemCounter = (getValueUserItemCounter(userAddress, item) + 1)
153+ let supplierBalanceKey = getKeyBalanceSupplier(supplierAddress)
154+ let newSupplierBalance = (getValueBalanceSupplier(supplierAddress) + pmt.amount)
155+ WriteSet([DataEntry(userItemCounter, newValueUserItemCounter), DataEntry(supplierBalanceKey, newSupplierBalance)])
156+ }
157+ }
158+ }
159+
160+
161+
162+@Callable(i)
124163 func voteCommit (item,hash) = {
125164 let user = toBase58String(i.caller.bytes)
126165 let commitsCount = getValueCommitsCount(item)
127166 let status = getValueItemStatus(item)
128167 if ((commitsCount >= VOTERS))
129- then throw("Reached max numer of voters")
168+ then throw(("Reached max numer of voters: " + toString(VOTERS)))
130169 else if ((getValueCommit(item, user) != NONE))
131170 then throw("You voted already")
132171 else if ((getKeyItemSupplier(item) == NONE))
134173 else if (if ((status != NONE))
135174 then (status != VOTING)
136175 else false)
137- then throw("Voting is not active for this item noew")
176+ then throw("Voting is not active for this item now")
138177 else {
139178 let newStatus = if ((commitsCount == VOTERS))
140179 then REVEAL
154193 if ((toBase58String(sha256(toBytes(saltedVote))) != getValueCommit(item, user)))
155194 then throw("Reveal data is not valid")
156195 else if ((VOTERS > getValueCommitsCount(item)))
157- then throw(("Max number of voters not reached: " + toString(VOTERS)))
196+ then throw("Max number of voters not reached")
158197 else if ((getValueReveal(item, user) != NONE))
159198 then throw("You voted already")
160199 else if (if ((status != VOTING))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
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 _ =>
22- "NONE"
22+ 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 getKeyItem (supplier,title) = {
3535 let supplierTitle = (supplier + title)
3636 ("item_" + toBase58String(sha256(toBytes(supplierTitle))))
3737 }
3838
3939
4040 func getKeyItemSupplier (item) = (item + "_owner")
4141
4242
4343 func getKeyItemPrice (item) = (item + "_price")
4444
4545
4646 func getKeyItemData (item) = (item + "_data")
4747
4848
4949 func getKeyCommit (item,user) = (((item + "_") + user) + "_commmit")
5050
5151
5252 func getKeyCommitsCount (item) = (item + "_cmtcnt")
5353
5454
5555 func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
5656
5757
5858 func getKeyItemStatus (item) = (item + "_status")
5959
6060
6161 func getKeyVotesCount (item,vote) = ((item + "_res:") + vote)
6262
6363
6464 func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
6565
6666
6767 func getKeyBalanceSupplier (account) = (account + "_balance")
6868
6969
70+func getValueBalanceSupplier (account) = {
71+ let supplierBalanceKey = getKeyBalanceSupplier(account)
72+ match getInteger(this, supplierBalanceKey) {
73+ case a: Int =>
74+ a
75+ case _ =>
76+ 0
77+ }
78+ }
79+
80+
7081 func getValueUserItemCounter (user,item) = {
7182 let userItemCounterKey = getKeyUserItemCounter(user, item)
7283 match getInteger(this, userItemCounterKey) {
7384 case a: Int =>
7485 a
7586 case _ =>
7687 0
7788 }
7889 }
7990
8091
8192 func getUserItemPrice (item) = {
8293 let keyItemPrice = getKeyItemPrice(item)
8394 getInteger(this, keyItemPrice)
8495 }
8596
8697
8798 func getValueCommit (item,user) = getStringByKey(getKeyCommit(item, user))
8899
89100
90101 func getValueCommitsCount (item) = getIntegerByKey(getKeyCommitsCount(item))
91102
92103
93104 func getValueReveal (item,user) = getStringByKey(getKeyReveal(item, user))
94105
95106
96107 func getValueItemStatus (item) = getStringByKey(getKeyItemStatus(item))
97108
98109
99110 func getValueVotesCount (item,vote) = getIntegerByKey(getKeyVotesCount(item, vote))
100111
101112
102-func getValueItemSupplier (account) = match getString(this, account) {
103- case a: String =>
104- a
105- case _ =>
106- "NONE"
107-}
113+func getValueItemPrice (item) = {
114+ let keyItemPrice = getKeyItemPrice(item)
115+ getIntegerValue(this, keyItemPrice)
116+ }
117+
118+
119+func getValueItemSupplier (account) = getStringByKey(getKeyItemSupplier(account))
108120
109121
110122 @Callable(i)
111123 func addItem (title,price,data) = {
112124 let supplierAddress = toBase58String(i.caller.bytes)
113125 let item = getKeyItem(supplierAddress, title)
114126 if ((0 >= price))
115127 then throw("Purchase amount cannot be less than item price")
116128 else if ((getValueItemSupplier(item) != NONE))
117129 then throw("An item is already exists")
118130 else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)])
119131 }
120132
121133
122134
123135 @Callable(i)
136+func purchase (item) = {
137+ let pmt = extract(i.payment)
138+ if (isDefined(pmt.assetId))
139+ then throw("you can bu tokens only with Waves tokens")
140+ else {
141+ let userAddress = toBase58String(i.caller.bytes)
142+ let price = getValueItemPrice(item)
143+ let supplierAddress = getValueItemSupplier(item)
144+ if ((price > pmt.amount))
145+ then throw("Purchase amount cannot be less than item price")
146+ else if ((pmt.amount > price))
147+ then throw("Purchase amount cannot be higher than item price")
148+ else if ((supplierAddress == NONE))
149+ then throw("Supplier does not exist")
150+ else {
151+ let userItemCounter = getKeyUserItemCounter(userAddress, item)
152+ let newValueUserItemCounter = (getValueUserItemCounter(userAddress, item) + 1)
153+ let supplierBalanceKey = getKeyBalanceSupplier(supplierAddress)
154+ let newSupplierBalance = (getValueBalanceSupplier(supplierAddress) + pmt.amount)
155+ WriteSet([DataEntry(userItemCounter, newValueUserItemCounter), DataEntry(supplierBalanceKey, newSupplierBalance)])
156+ }
157+ }
158+ }
159+
160+
161+
162+@Callable(i)
124163 func voteCommit (item,hash) = {
125164 let user = toBase58String(i.caller.bytes)
126165 let commitsCount = getValueCommitsCount(item)
127166 let status = getValueItemStatus(item)
128167 if ((commitsCount >= VOTERS))
129- then throw("Reached max numer of voters")
168+ then throw(("Reached max numer of voters: " + toString(VOTERS)))
130169 else if ((getValueCommit(item, user) != NONE))
131170 then throw("You voted already")
132171 else if ((getKeyItemSupplier(item) == NONE))
133172 then throw("Item does not exist")
134173 else if (if ((status != NONE))
135174 then (status != VOTING)
136175 else false)
137- then throw("Voting is not active for this item noew")
176+ then throw("Voting is not active for this item now")
138177 else {
139178 let newStatus = if ((commitsCount == VOTERS))
140179 then REVEAL
141180 else VOTING
142181 WriteSet([DataEntry(getKeyCommit(item, user), hash), DataEntry(getKeyCommitsCount(item), (commitsCount + 1)), DataEntry(getKeyItemStatus(item), newStatus)])
143182 }
144183 }
145184
146185
147186
148187 @Callable(i)
149188 func voteReveal (item,vote,salt) = {
150189 let user = toBase58String(i.caller.bytes)
151190 let status = getValueItemStatus(item)
152191 let newVotesCount = (getValueVotesCount(item, vote) + 1)
153192 let saltedVote = ((item + vote) + salt)
154193 if ((toBase58String(sha256(toBytes(saltedVote))) != getValueCommit(item, user)))
155194 then throw("Reveal data is not valid")
156195 else if ((VOTERS > getValueCommitsCount(item)))
157- then throw(("Max number of voters not reached: " + toString(VOTERS)))
196+ then throw("Max number of voters not reached")
158197 else if ((getValueReveal(item, user) != NONE))
159198 then throw("You voted already")
160199 else if (if ((status != VOTING))
161200 then (status != REVEAL)
162201 else false)
163202 then throw("Voting is not active of this item now")
164203 else if (if ((vote != FEATURED))
165204 then (vote != DELISTED)
166205 else false)
167206 then throw("Provided voting option is incorrect")
168207 else {
169208 let newStatus = if ((newVotesCount >= QUORUM))
170209 then vote
171210 else REVEAL
172211 WriteSet([DataEntry(getKeyCommit(item, user), vote), DataEntry(getKeyVotesCount(item, user), newVotesCount), DataEntry(getKeyItemStatus(item), newStatus)])
173212 }
174213 }
175214
176215

github/deemru/w8io/03bedc9 
32.91 ms