tx · 9RN7yAfyy3mkY8sVBbFT1J8mW1qVoiTKRGjXYVQPt7aR

3Mze7XxHJtXw48uyWhjTJgMLcEzNBmi9tS9:  -0.01400000 Waves

2019.08.02 19:37 [613474] smart account 3Mze7XxHJtXw48uyWhjTJgMLcEzNBmi9tS9 > SELF 0.00000000 Waves

{ "type": 13, "id": "9RN7yAfyy3mkY8sVBbFT1J8mW1qVoiTKRGjXYVQPt7aR", "fee": 1400000, "feeAssetId": null, "timestamp": 1564763970428, "version": 1, "sender": "3Mze7XxHJtXw48uyWhjTJgMLcEzNBmi9tS9", "senderPublicKey": "BZri78A6CXpGPmAHZNwqQXoNfWamwRZiuaBas3VdDKZp", "proofs": [ "21YZVT7ucdnjm9JgYW5JKHgVLvHcidF2mST2MPKoSoyYjDd3ftjHhma1yzzQ3ZiRHmn3cbr3f4NYKrQGZXqytYMn" ], "script": "base64:AAIDAAAAAAAAAAAAAAAdAAAAAAROT05FAgAAAARub25lAAAAAAZWT1RFUlMAAAAAAAAAAAMAAAAABlFVT1JVTQAAAAAAAAAAAgAAAAAGVk9USU5HAgAAAAZ2b3RpbmcAAAAABlJFVkVBTAIAAAAGcmV2ZWFsAAAAAAhGRUFUVVJFRAIAAAAIZmVhdHVyZWQAAAAACERFTElTVEVEAgAAAAhkZWxpc3RlZAEAAAALZ2V0TnVtQnlLZXkAAAABAAAAA2tleQQAAAADbnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABQAAAANudW0BAAAAC2dldFN0ckJ5S2V5AAAAAQAAAANrZXkEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAETk9ORQUAAAADc3RyAQAAAAxnZXRLZXlDb21taXQAAAACAAAABGl0ZW0AAAAEdXNlcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEaXRlbQIAAAABXwUAAAAEdXNlcgIAAAAHX2NvbW1pdAEAAAASZ2V0S2V5Q29tbWl0Q291bnRzAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAAB19jb21jbnQBAAAADGdldEtleVJldmVhbAAAAAIAAAAEaXRlbQAAAAR1c2VyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARpdGVtAgAAAAFfBQAAAAR1c2VyAgAAAAdfcmV2ZWFsAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAAB19zdGF0dXMBAAAAD2dldEtleVZvdGVDb3VudAAAAAIAAAAEaXRlbQAAAAR2b3RlCQABLAAAAAIJAAEsAAAAAgUAAAAEaXRlbQIAAAAFX3JlczoFAAAABHZvdGUBAAAADmdldFZhbHVlQ29tbWl0AAAAAgAAAARpdGVtAAAABHVzZXIJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyAQAAABRnZXRWYWx1ZUNvbW1pdHNDb3VudAAAAAEAAAAEaXRlbQkBAAAAC2dldE51bUJ5S2V5AAAAAQkBAAAAEmdldEtleUNvbW1pdENvdW50cwAAAAEFAAAABGl0ZW0BAAAADmdldFZhbHVlUmV2ZWFsAAAAAgAAAARpdGVtAAAABHVzZXIJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAAAxnZXRLZXlSZXZlYWwAAAACBQAAAARpdGVtBQAAAAR1c2VyAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQEAAAARZ2V0VmFsdWVWb3RlQ291bnQAAAACAAAABGl0ZW0AAAAEdXNlcgkBAAAAC2dldE51bUJ5S2V5AAAAAQkBAAAAD2dldEtleVZvdGVDb3VudAAAAAIFAAAABGl0ZW0FAAAABHVzZXIBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIAAAAEdXNlcgAAAARpdGVtCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARpdGVtAgAAAAFfBQAAAAR1c2VyAgAAAARfY250AQAAAApnZXRLZXlJdGVtAAAAAgAAAAhzdXBwbGllcgAAAAV0aXRsZQkAASwAAAACAgAAAARpdGVtCQACWAAAAAEJAAH3AAAAAQkAAZsAAAABCQABLAAAAAIFAAAACHN1cHBsaWVyBQAAAAV0aXRsZQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABl9vd25lcgEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABl9wcmljZQEAAAAOZ2V0S2V5SXRlbURhdGEAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAFX2RhdGEBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQEAAAARZ2V0VmFsdWVJdGVtUHJpY2UAAAABAAAABGl0ZW0JAQAAAAtnZXROdW1CeUtleQAAAAEJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIAAAAEdXNlcgAAAARpdGVtCQEAAAALZ2V0TnVtQnlLZXkAAAABCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQAAAAdhY2NvdW50CQABLAAAAAIFAAAAB2FjY291bnQCAAAACF9iYWxhbmNlAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEAAAAHYWNjb3VudAkBAAAAC2dldE51bUJ5S2V5AAAAAQkBAAAAFWdldEtleUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAB2FjY291bnQAAAAEAAAAAWkBAAAACHB1cmNoYXNlAAAAAQAAAARpdGVtBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAhQ2FuIHVzZSBvbmx5IFdBVkVTIGF0IHRoZSBtb21lbnQuBAAAAA9jdXN0b21lckFkZHJlc3MJAAEwAAAAAgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAAAAAAAAAAAKBAAAAAVwcmljZQkBAAAAEWdldFZhbHVlSXRlbVByaWNlAAAAAQUAAAAEaXRlbQQAAAAPc3VwcGxpZXJBZGRyZXNzCQEAAAAUZ2V0VmFsdWVJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtAwkAAGYAAAACBQAAAAVwcmljZQgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA9QW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZS4gWW91IHNwZWNpZmllZCBhbW91bnQ6IAkAAaQAAAAB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", "chainId": 84, "height": 613474, "spentComplexity": 0 } View: original | compacted Prev: 5vjSZY22TGMSnNT25eu3t2P7kEvXTM5xbrAuF4ys6scc Next: BXoq9HPYdUTBdzkxg48CZzV35jXg784ytdQVzcHdenJb Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "none"
55
6-func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
6+let VOTERS = 3
77
8+let QUORUM = 2
89
9-func getKeyItem (supplier,title) = ("item" + toBase58String(sha256(toBytes((supplier + title)))))
10+let VOTING = "voting"
1011
12+let REVEAL = "reveal"
13+
14+let FEATURED = "featured"
15+
16+let DELISTED = "delisted"
1117
1218 func getNumByKey (key) = {
1319 let num = match getInteger(this, key) {
2935 }
3036 str
3137 }
38+
39+
40+func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
41+
42+
43+func getKeyCommitCounts (item) = (item + "_comcnt")
44+
45+
46+func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
47+
48+
49+func getKeyItemStatus (item) = (item + "_status")
50+
51+
52+func getKeyVoteCount (item,vote) = ((item + "_res:") + vote)
53+
54+
55+func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user))
56+
57+
58+func getValueCommitsCount (item) = getNumByKey(getKeyCommitCounts(item))
59+
60+
61+func getValueReveal (item,user) = getStrByKey(getKeyReveal(item, user))
62+
63+
64+func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
65+
66+
67+func getValueVoteCount (item,user) = getNumByKey(getKeyVoteCount(item, user))
68+
69+
70+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
71+
72+
73+func getKeyItem (supplier,title) = ("item" + toBase58String(sha256(toBytes((supplier + title)))))
3274
3375
3476 func getKeyItemSupplier (item) = (item + "_owner")
99141 }
100142
101143
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("Reached max n. of votes")
152+ else if ((getValueCommit(item, user) != NONE))
153+ then throw("User already voted for this item")
154+ else if ((getKeyItemSupplier(item) == NONE))
155+ then throw("Item does not exist")
156+ else if (if ((status != NONE))
157+ then (status != VOTING)
158+ else false)
159+ then throw("It is not possible to vote now.")
160+ else WriteSet([DataEntry(getKeyCommit(item, user), hash), DataEntry(getKeyCommitCounts(item), (commits + 1)), DataEntry(getKeyItemStatus(item), if ((commits == VOTERS))
161+ then REVEAL
162+ else VOTING)])
163+ }
164+
165+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "none"
55
6-func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
6+let VOTERS = 3
77
8+let QUORUM = 2
89
9-func getKeyItem (supplier,title) = ("item" + toBase58String(sha256(toBytes((supplier + title)))))
10+let VOTING = "voting"
1011
12+let REVEAL = "reveal"
13+
14+let FEATURED = "featured"
15+
16+let DELISTED = "delisted"
1117
1218 func getNumByKey (key) = {
1319 let num = match getInteger(this, key) {
1420 case a: Int =>
1521 a
1622 case _ =>
1723 0
1824 }
1925 num
2026 }
2127
2228
2329 func getStrByKey (key) = {
2430 let str = match getString(this, key) {
2531 case a: String =>
2632 a
2733 case _ =>
2834 NONE
2935 }
3036 str
3137 }
38+
39+
40+func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
41+
42+
43+func getKeyCommitCounts (item) = (item + "_comcnt")
44+
45+
46+func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
47+
48+
49+func getKeyItemStatus (item) = (item + "_status")
50+
51+
52+func getKeyVoteCount (item,vote) = ((item + "_res:") + vote)
53+
54+
55+func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user))
56+
57+
58+func getValueCommitsCount (item) = getNumByKey(getKeyCommitCounts(item))
59+
60+
61+func getValueReveal (item,user) = getStrByKey(getKeyReveal(item, user))
62+
63+
64+func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
65+
66+
67+func getValueVoteCount (item,user) = getNumByKey(getKeyVoteCount(item, user))
68+
69+
70+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
71+
72+
73+func getKeyItem (supplier,title) = ("item" + toBase58String(sha256(toBytes((supplier + title)))))
3274
3375
3476 func getKeyItemSupplier (item) = (item + "_owner")
3577
3678
3779 func getKeyItemPrice (item) = (item + "_price")
3880
3981
4082 func getKeyItemData (item) = (item + "_data")
4183
4284
4385 func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
4486
4587
4688 func getValueItemPrice (item) = getNumByKey(getKeyItemPrice(item))
4789
4890
4991 func getValueUserItemCounter (user,item) = getNumByKey(getKeyItemPrice(item))
5092
5193
5294 func getKeyBalanceSupplier (account) = (account + "_balance")
5395
5496
5597 func getValueBalanceSupplier (account) = getNumByKey(getKeyBalanceSupplier(account))
5698
5799
58100 @Callable(i)
59101 func purchase (item) = {
60102 let pmt = extract(i.payment)
61103 if (isDefined(pmt.assetId))
62104 then throw("Can use only WAVES at the moment.")
63105 else {
64106 let customerAddress = drop(toBase58String(i.caller.bytes), 10)
65107 let price = getValueItemPrice(item)
66108 let supplierAddress = getValueItemSupplier(item)
67109 if ((price > pmt.amount))
68110 then throw(((("Amount cannot be less than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price)))
69111 else if ((pmt.amount > price))
70112 then throw(((((("Amount cannot be greater than item price. You specified amount: " + toString(pmt.amount)) + " but price of item: ") + item) + " is ") + toString(price)))
71113 else if ((supplierAddress == NONE))
72114 then throw("Supplier not found.")
73115 else WriteSet([DataEntry(getKeyUserItemCounter(customerAddress, item), (getValueUserItemCounter(customerAddress, item) + 1)), DataEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))])
74116 }
75117 }
76118
77119
78120
79121 @Callable(i)
80122 func addItem (title,price,data) = {
81123 let supplierAddress = drop(toBase58String(i.caller.bytes), 10)
82124 let item = getKeyItem(supplierAddress, title)
83125 if ((0 >= price))
84126 then throw("Price must be positive.")
85127 else if ((getValueItemSupplier(item) != NONE))
86128 then throw("An item like this already exists.")
87129 else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)])
88130 }
89131
90132
91133
92134 @Callable(i)
93135 func withdraw () = {
94136 let supplierAddress = toBase58String(i.caller.bytes)
95137 let balance = getValueBalanceSupplier(supplierAddress)
96138 if ((0 >= balance))
97139 then throw("Insufficient Balance")
98140 else ScriptResult(WriteSet([DataEntry(getKeyBalanceSupplier(supplierAddress), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]))
99141 }
100142
101143
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("Reached max n. of votes")
152+ else if ((getValueCommit(item, user) != NONE))
153+ then throw("User already voted for this item")
154+ else if ((getKeyItemSupplier(item) == NONE))
155+ then throw("Item does not exist")
156+ else if (if ((status != NONE))
157+ then (status != VOTING)
158+ else false)
159+ then throw("It is not possible to vote now.")
160+ else WriteSet([DataEntry(getKeyCommit(item, user), hash), DataEntry(getKeyCommitCounts(item), (commits + 1)), DataEntry(getKeyItemStatus(item), if ((commits == VOTERS))
161+ then REVEAL
162+ else VOTING)])
163+ }
164+
165+

github/deemru/w8io/873ac7e 
59.80 ms