tx · FFVQqBRnyius94iHvAyn5YJWq91giYULtt5BmKexKhVV

3Mxc1WtkzRarwxjRG1VSTgoPPynuS3q196Y:  -0.01000000 Waves

2021.07.07 13:21 [1603061] smart account 3Mxc1WtkzRarwxjRG1VSTgoPPynuS3q196Y > SELF 0.00000000 Waves

{ "type": 13, "id": "FFVQqBRnyius94iHvAyn5YJWq91giYULtt5BmKexKhVV", "fee": 1000000, "feeAssetId": null, "timestamp": 1625653271642, "version": 2, "chainId": 84, "sender": "3Mxc1WtkzRarwxjRG1VSTgoPPynuS3q196Y", "senderPublicKey": "9DTfiDzKQLuATT7gasgcj1kBn8VLJHjuBKJipCXbUJjr", "proofs": [ "3aCrtoKeztet9A1ZDrARJCE577JmnPgdY2kWLPvG1LmtjEbr5TzycuVw4V7U31ni2rtZxmfzkeZGbqomhbs9NEjp" ], "script": "base64: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", "height": 1603061, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B8TjFovxVEsqaYpVE4ncw9LyZGKG2dG9mtqeh3LDqK1k Next: 8tM7GmR9MS328i5q6zE23KXNWUfYNhMoYtWuE9z8VQuN Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VOTERS = 3
5+
6+let VOTING = "voting"
7+
8+let REVEAL = "reveal"
9+
10+let NONE = "none"
11+
12+func getNumberByKey (key) = {
13+ let num = match getInteger(this, key) {
14+ case a: Int =>
15+ a
16+ case _ =>
17+ 0
18+ }
19+ num
20+ }
21+
22+
23+func getStrByKey (key) = {
24+ let str = match getString(this, key) {
25+ case a: String =>
26+ a
27+ case _ =>
28+ NONE
29+ }
30+ str
31+ }
32+
33+
34+func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
35+
36+
37+func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user))
38+
39+
40+func getKeyCommitsCount (item) = (item + "_comcnt")
41+
42+
43+func getValueCommitsCount (item) = getNumberByKey(getKeyCommitsCount(item))
44+
45+
46+func getKeyItemStatus (item) = (item + "_status")
47+
48+
49+func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
50+
51+
52+func getKeyItemPrice (item) = (item + "_price")
53+
54+
55+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
56+
57+
58+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
59+
60+
61+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
62+
63+
64+func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
65+
66+
67+func getKeyItemData (item) = (item + "_data")
68+
69+
70+func getKeyItemSupplier (item) = (item + "_owner")
71+
72+
73+func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
74+
75+
76+func getKeyBalanceSupplier (account) = (account + "_balance")
77+
78+
79+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
480
581
682 @Callable(i)
7-func purchase (nazwa) = {
83+func addItem (title,price,data) = {
84+ let supplierAddress = toBase58String(i.caller.bytes)
85+ let item = getKeyItem(supplierAddress, title)
86+ if ((0 >= price))
87+ then throw("Purchase amount cannot be less than item price")
88+ else if ((getValueItemSupplier(item) != NONE))
89+ then throw("an item already exists")
90+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
91+ }
92+
93+
94+
95+@Callable(i)
96+func purchase (item) = {
897 let pmt = i.payments[0]
998 if (isDefined(pmt.assetId))
10- then throw("works with waves only")
99+ then throw("WAVES tokens only at moment")
11100 else {
12- let customerAddress = toBase58String(i.caller.bytes)
13- let price = match getInteger(this, (("item_" + nazwa) + "_coupon_price")) {
14- case a: Int =>
15- a
16- case _ =>
17- 0
101+ let userAddress = toBase58String(i.caller.bytes)
102+ let price = getValueItemPrice(item)
103+ let supplierAddress = getValueItemSupplier(item)
104+ if ((price > pmt.amount))
105+ then throw("Purchase amount cannot be less than item price")
106+ else if ((supplierAddress == NONE))
107+ then throw("Supplier does not exist")
108+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
18109 }
19- if ((price > pmt.amount))
20- then throw("blad")
21- else if ((pmt.amount > price))
22- then throw("blad2 za duzo")
23- else [StringEntry(((("status:purchase_item_" + nazwa) + "_customer_") + customerAddress), "confirmed"), IntegerEntry(((("price:purchase_item_" + nazwa) + "_customer_") + customerAddress), price)]
24- }
110+ }
111+
112+
113+
114+@Callable(i)
115+func withdraw () = {
116+ let supplierAddress = toBase58String(i.caller.bytes)
117+ let balance = getValueBalanceSupplier(supplierAddress)
118+ if ((0 >= balance))
119+ then throw("insuficient balance")
120+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
121+ }
122+
123+
124+
125+@Callable(i)
126+func voteCommit (item,hash) = {
127+ let user = toBase58String(i.caller.bytes)
128+ let commits = getValueCommitsCount(item)
129+ let status = getValueItemStatus(item)
130+ if ((commits >= VOTERS))
131+ then throw("reached max num of voters")
132+ else if ((getValueCommit(item, user) != NONE))
133+ then throw("user has already participated")
134+ else if ((getKeyItemSupplier(item) == NONE))
135+ then throw("item does not exist")
136+ else if (if ((status != NONE))
137+ then (status != VOTING)
138+ else false)
139+ then throw("voting is not possible")
140+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
141+ then REVEAL
142+ else VOTING)]
25143 }
26144
27145

github/deemru/w8io/c3f4982 
22.87 ms