tx · 6hNa5jwUcwmHbkepprsQ2xcJoF13jw9fvHMeC13tHudt

3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb:  -0.01000010 Waves

2021.07.21 14:24 [1623313] smart account 3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb > SELF 0.00000000 Waves

{ "type": 13, "id": "6hNa5jwUcwmHbkepprsQ2xcJoF13jw9fvHMeC13tHudt", "fee": 1000010, "feeAssetId": null, "timestamp": 1626866705231, "version": 2, "chainId": 84, "sender": "3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb", "senderPublicKey": "J5UWSH8o2ZgSCRmahKoyq3Zzf9CSXEJtFQjoxuiqw8jN", "proofs": [ "2rFoyf9eP1Tk5nLobfdEJvJVkhCq296zp6DWbKDkhi4JrSpjWWWn2uyjRdz7YJ8wM7YG52iTAcpCLbmvYP94p4YA" ], "script": "base64:AAIFAAAAAAAAAB0IAhIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICAAAAB0AAAAABlZPVEVSUwAAAAAAAAAAAwAAAAAGUVVPUlVNAAAAAAAAAAACAAAAAAZWT1RJTkcCAAAABnZvdGluZwAAAAAGUkVWRUFMAgAAAAZyZXZlYWwAAAAACEZFQVRVUkVEAgAAAAhmZWF0dXJlZAAAAAAIREVMSVNURUQCAAAACGRlbGlzdGVkAAAAAAROT05FAgAAAARub25lAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAANudW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAFAAAAA251bQEAAAALZ2V0U3RyQnlLZXkAAAABAAAAA2tleQQAAAADc3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAAROT05FBQAAAANzdHIBAAAAD2dldEtleUl0ZW1QcmljZQAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAZfcHJpY2UBAAAAEWdldFZhbHVlSXRlbVByaWNlAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQEAAAAVZ2V0S2V5VXNlckl0ZW1Db3VudGVyAAAAAgAAAAR1c2VyAAAABGl0ZW0JAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABGl0ZW0CAAAAAV8FAAAABHVzZXICAAAABF9jbnQBAAAAF2dldFZhbHVlVXNlckl0ZW1Db3VudGVyAAAAAgAAAAR1c2VyAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlVc2VySXRlbUNvdW50ZXIAAAACBQAAAAR1c2VyBQAAAARpdGVtAQAAAApnZXRLZXlJdGVtAAAAAgAAAAhzdXBwbGllcgAAAAV0aXRsZQkAASwAAAACAgAAAAVpdGVtXwkAAlgAAAABCQAB9wAAAAEJAAGbAAAAAQkAASwAAAACBQAAAAhzdXBwbGllcgUAAAAFdGl0bGUBAAAADmdldEtleUl0ZW1EYXRhAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABV9kYXRhAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAFX2RhdGEBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQAAAAdhY2NvdW50CQABLAAAAAIFAAAAB2FjY291bnQCAAAACF9iYWxhbmNlAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEAAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldEtleUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAB2FjY291bnQBAAAADGdldEtleUNvbW1pdAAAAAIAAAAEaXRlbQAAAAR1c2VyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARpdGVtAgAAAAFfBQAAAAR1c2VyAgAAAAdfY29tbWl0AQAAAA5nZXRWYWx1ZUNvbW1pdAAAAAIAAAAEaXRlbQAAAAR1c2VyCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAMZ2V0S2V5Q29tbWl0AAAAAgUAAAAEaXRlbQUAAAAEdXNlcgEAAAASZ2V0S2V5Q29tbWl0c0NvdW50AAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAAB19jb21jbnQBAAAAFGdldFZhbHVlQ29tbWl0c0NvdW50AAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0S2V5Q29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgAAAARpdGVtAAAABHVzZXIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAA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", "height": 1623313, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6ynNC7JB7PKWXPkj63SNYSsY7yfnb2B4jvuhC4qsp5fJ Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VOTERS = 3
5+
6+let QUORUM = 2
7+
8+let VOTING = "voting"
9+
10+let REVEAL = "reveal"
11+
12+let FEATURED = "featured"
13+
14+let DELISTED = "delisted"
15+
416 let NONE = "none"
17+
18+func getNumberByKey (key) = {
19+ let num = match getInteger(this, key) {
20+ case a: Int =>
21+ a
22+ case _ =>
23+ 0
24+ }
25+ num
26+ }
27+
528
629 func getStrByKey (key) = {
730 let str = match getString(this, key) {
1740 func getKeyItemPrice (item) = (item + "_price")
1841
1942
43+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
44+
45+
46+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
47+
48+
49+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
50+
51+
2052 func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
2153
2254
2961 func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
3062
3163
32-let verifier = "3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb"
33-
34-let VERIFIED = "verified"
35-
36-let BLACKLISTED = "blacklist"
37-
38-func getExtAddressOracle () = value(addressFromString("3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb"))
64+func getKeyBalanceSupplier (account) = (account + "_balance")
3965
4066
41-func getExtKeyItemWhiteListStatus (account) = (account + "_verifier_status")
67+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
4268
4369
44-func getExtValueItemWhiteListStatus (oracle,account) = {
45- let str = match getString(oracle, getExtKeyItemWhiteListStatus(account)) {
46- case a: String =>
47- a
48- case _ =>
49- NONE
50- }
51- str
52- }
70+func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
71+
72+
73+func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user))
74+
75+
76+func getKeyCommitsCount (item) = (item + "_comcnt")
77+
78+
79+func getValueCommitsCount (item) = getNumberByKey(getKeyCommitsCount(item))
80+
81+
82+func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
83+
84+
85+func getValueReveal (item,user) = getStrByKey(getKeyReveal(item, user))
86+
87+
88+func getKeyItemStatus (item) = (item + "_status")
89+
90+
91+func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
92+
93+
94+func getKeyVoteCount (item,vote) = ((item + "_res:") + vote)
95+
96+
97+func getValueVoteCount (item,vote) = getNumberByKey(getKeyVoteCount(item, vote))
5398
5499
55100 @Callable(i)
56101 func addItem (title,price,data) = {
57102 let supplierAddress = toBase58String(i.caller.bytes)
58103 let item = getKeyItem(supplierAddress, title)
59- let supplierwhitelist = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
60104 if ((0 >= price))
61105 then throw("purchase amount cannot be less than item price")
62106 else if ((getValueItemSupplier(item) != NONE))
63- then throw("an item is already exit")
64- else if ((supplierwhitelist == BLACKLISTED))
65- then throw("supplier's account has been blacklisted")
66- else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierwhitelist)]
107+ then throw("an item is already exist")
108+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
67109 }
68110
69111
70112
71113 @Callable(i)
72-func setstatus (supplier,status) = {
73- let account = toBase58String(i.caller.bytes)
74- if ((account != verifier))
75- then throw("only oracle veryfier are able to manage whilelist")
76- else if (if ((status != VERIFIED))
77- then (status != BLACKLISTED)
78- else false)
79- then throw("waiting status")
80- else [StringEntry(getExtKeyItemWhiteListStatus(supplier), status)]
114+func purchase (item) = {
115+ let pmt = i.payments[0]
116+ if (isDefined(pmt.assetId))
117+ then throw("WAVES token only at the moment")
118+ else {
119+ let userAddress = toBase58String(i.caller.bytes)
120+ let price = getValueItemPrice(item)
121+ let supplierAddres = getValueItemSupplier(item)
122+ if ((price > pmt.amount))
123+ then throw("purchase amunt cannot be less than item price")
124+ else if ((pmt.amount > price))
125+ then throw("purchase amount cannot be higher than item price")
126+ else if ((supplierAddres == NONE))
127+ then throw("Supplier address doesn't exist")
128+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddres), (getValueBalanceSupplier(supplierAddres) + pmt.amount))]
129+ }
130+ }
131+
132+
133+
134+@Callable(i)
135+func withdraw () = {
136+ let supplierAddress = toBase58String(i.caller.bytes)
137+ let balance = getValueBalanceSupplier(supplierAddress)
138+ if ((0 >= balance))
139+ then throw("za mało środków")
140+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
141+ }
142+
143+
144+
145+@Callable(i)
146+func voteCommit (item,hash) = {
147+ let user = toBase58String(i.caller.bytes)
148+ let commits = getValueCommitsCount(item)
149+ let status = getValueItemStatus(item)
150+ if ((commits >= VOTERS))
151+ then throw("osiągnięto maksymaną liczbę głosujących")
152+ else if ((getValueCommit(item, user) != NONE))
153+ then throw("użtykownik już głosuje")
154+ else if ((getKeyItemSupplier(item) == NONE))
155+ then throw("nie istnieje taki przedmiot")
156+ else if (if ((status != NONE))
157+ then (status != VOTING)
158+ else false)
159+ then throw("głosowanie nie jest możliwe")
160+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
161+ then REVEAL
162+ else VOTING)]
163+ }
164+
165+
166+
167+@Callable(i)
168+func voteReveal (item,vote,salt) = {
169+ let user = toBase58String(i.caller.bytes)
170+ let status = getValueItemStatus(item)
171+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
172+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
173+ then throw("reveal data is not valid")
174+ else if ((VOTERS > getValueCommitsCount(item)))
175+ then throw("max number of voters hasn't reached yet")
176+ else if ((getValueReveal(item, user) != NONE))
177+ then throw("user has already participated")
178+ else if (if ((status != VOTING))
179+ then (status != REVEAL)
180+ else false)
181+ then throw("wrong status")
182+ else if (if ((vote != FEATURED))
183+ then (vote != DELISTED)
184+ else false)
185+ then throw("vote has finished")
186+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
187+ then vote
188+ else REVEAL)]
81189 }
82190
83191
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VOTERS = 3
5+
6+let QUORUM = 2
7+
8+let VOTING = "voting"
9+
10+let REVEAL = "reveal"
11+
12+let FEATURED = "featured"
13+
14+let DELISTED = "delisted"
15+
416 let NONE = "none"
17+
18+func getNumberByKey (key) = {
19+ let num = match getInteger(this, key) {
20+ case a: Int =>
21+ a
22+ case _ =>
23+ 0
24+ }
25+ num
26+ }
27+
528
629 func getStrByKey (key) = {
730 let str = match getString(this, key) {
831 case a: String =>
932 a
1033 case _ =>
1134 NONE
1235 }
1336 str
1437 }
1538
1639
1740 func getKeyItemPrice (item) = (item + "_price")
1841
1942
43+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
44+
45+
46+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
47+
48+
49+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
50+
51+
2052 func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
2153
2254
2355 func getKeyItemData (item) = (item + "_data")
2456
2557
2658 func getKeyItemSupplier (item) = (item + "_data")
2759
2860
2961 func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
3062
3163
32-let verifier = "3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb"
33-
34-let VERIFIED = "verified"
35-
36-let BLACKLISTED = "blacklist"
37-
38-func getExtAddressOracle () = value(addressFromString("3N86zk6P6pyxFnu5o1U62pZeiRQ6Q1b3Lgb"))
64+func getKeyBalanceSupplier (account) = (account + "_balance")
3965
4066
41-func getExtKeyItemWhiteListStatus (account) = (account + "_verifier_status")
67+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
4268
4369
44-func getExtValueItemWhiteListStatus (oracle,account) = {
45- let str = match getString(oracle, getExtKeyItemWhiteListStatus(account)) {
46- case a: String =>
47- a
48- case _ =>
49- NONE
50- }
51- str
52- }
70+func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
71+
72+
73+func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user))
74+
75+
76+func getKeyCommitsCount (item) = (item + "_comcnt")
77+
78+
79+func getValueCommitsCount (item) = getNumberByKey(getKeyCommitsCount(item))
80+
81+
82+func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
83+
84+
85+func getValueReveal (item,user) = getStrByKey(getKeyReveal(item, user))
86+
87+
88+func getKeyItemStatus (item) = (item + "_status")
89+
90+
91+func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
92+
93+
94+func getKeyVoteCount (item,vote) = ((item + "_res:") + vote)
95+
96+
97+func getValueVoteCount (item,vote) = getNumberByKey(getKeyVoteCount(item, vote))
5398
5499
55100 @Callable(i)
56101 func addItem (title,price,data) = {
57102 let supplierAddress = toBase58String(i.caller.bytes)
58103 let item = getKeyItem(supplierAddress, title)
59- let supplierwhitelist = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
60104 if ((0 >= price))
61105 then throw("purchase amount cannot be less than item price")
62106 else if ((getValueItemSupplier(item) != NONE))
63- then throw("an item is already exit")
64- else if ((supplierwhitelist == BLACKLISTED))
65- then throw("supplier's account has been blacklisted")
66- else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierwhitelist)]
107+ then throw("an item is already exist")
108+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
67109 }
68110
69111
70112
71113 @Callable(i)
72-func setstatus (supplier,status) = {
73- let account = toBase58String(i.caller.bytes)
74- if ((account != verifier))
75- then throw("only oracle veryfier are able to manage whilelist")
76- else if (if ((status != VERIFIED))
77- then (status != BLACKLISTED)
78- else false)
79- then throw("waiting status")
80- else [StringEntry(getExtKeyItemWhiteListStatus(supplier), status)]
114+func purchase (item) = {
115+ let pmt = i.payments[0]
116+ if (isDefined(pmt.assetId))
117+ then throw("WAVES token only at the moment")
118+ else {
119+ let userAddress = toBase58String(i.caller.bytes)
120+ let price = getValueItemPrice(item)
121+ let supplierAddres = getValueItemSupplier(item)
122+ if ((price > pmt.amount))
123+ then throw("purchase amunt cannot be less than item price")
124+ else if ((pmt.amount > price))
125+ then throw("purchase amount cannot be higher than item price")
126+ else if ((supplierAddres == NONE))
127+ then throw("Supplier address doesn't exist")
128+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddres), (getValueBalanceSupplier(supplierAddres) + pmt.amount))]
129+ }
130+ }
131+
132+
133+
134+@Callable(i)
135+func withdraw () = {
136+ let supplierAddress = toBase58String(i.caller.bytes)
137+ let balance = getValueBalanceSupplier(supplierAddress)
138+ if ((0 >= balance))
139+ then throw("za mało środków")
140+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
141+ }
142+
143+
144+
145+@Callable(i)
146+func voteCommit (item,hash) = {
147+ let user = toBase58String(i.caller.bytes)
148+ let commits = getValueCommitsCount(item)
149+ let status = getValueItemStatus(item)
150+ if ((commits >= VOTERS))
151+ then throw("osiągnięto maksymaną liczbę głosujących")
152+ else if ((getValueCommit(item, user) != NONE))
153+ then throw("użtykownik już głosuje")
154+ else if ((getKeyItemSupplier(item) == NONE))
155+ then throw("nie istnieje taki przedmiot")
156+ else if (if ((status != NONE))
157+ then (status != VOTING)
158+ else false)
159+ then throw("głosowanie nie jest możliwe")
160+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
161+ then REVEAL
162+ else VOTING)]
163+ }
164+
165+
166+
167+@Callable(i)
168+func voteReveal (item,vote,salt) = {
169+ let user = toBase58String(i.caller.bytes)
170+ let status = getValueItemStatus(item)
171+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
172+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
173+ then throw("reveal data is not valid")
174+ else if ((VOTERS > getValueCommitsCount(item)))
175+ then throw("max number of voters hasn't reached yet")
176+ else if ((getValueReveal(item, user) != NONE))
177+ then throw("user has already participated")
178+ else if (if ((status != VOTING))
179+ then (status != REVEAL)
180+ else false)
181+ then throw("wrong status")
182+ else if (if ((vote != FEATURED))
183+ then (vote != DELISTED)
184+ else false)
185+ then throw("vote has finished")
186+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
187+ then vote
188+ else REVEAL)]
81189 }
82190
83191

github/deemru/w8io/c3f4982 
29.83 ms