tx · DqHHY8vEMm5fcSW3AjGtfdWv6BG6ewmxNwp7F6Gaq7Kx

3MxJx6npysQdoyyxLsCCb3Yg8fTeH3gEQQd:  -0.01000000 Waves

2023.12.04 18:27 [2872080] smart account 3MxJx6npysQdoyyxLsCCb3Yg8fTeH3gEQQd > SELF 0.00000000 Waves

{ "type": 13, "id": "DqHHY8vEMm5fcSW3AjGtfdWv6BG6ewmxNwp7F6Gaq7Kx", "fee": 1000000, "feeAssetId": null, "timestamp": 1701703686814, "version": 2, "chainId": 84, "sender": "3MxJx6npysQdoyyxLsCCb3Yg8fTeH3gEQQd", "senderPublicKey": "EEhsp9Jd5MwVmYJMGAZJL3tTb5KcurTz8Aw7wksZuw3e", "proofs": [ "4GKDCcVKKsxo7UPwo2nG6EWv3X461PJ1Z4BYXJrvwRQyTtmbBmXw7hmBginALDRPHVo7YbMKB6wGbUgBRRdD63D8" ], "script": "base64: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", "height": 2872080, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GSu4AWh6ycEmBkdy8zSfR3etsZqfhXS5g2aCxvawAETh Next: FFussmiXCP32vc5JEDnmwpGyEDiAk693JGb1wkkykxkM Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let acc1PubKey = base58'FgdjGJ4tLFiavKEKf4WkWwkgvU8ARWP1WYZfmUrXo4CY'
5+
6+let acc2PubKey = base58'EEhsp9Jd5MwVmYJMGAZJL3tTb5KcurTz8Aw7wksZuw3e'
7+
8+let acc3PubKey = base58'6SdykacJeMCbeNvVJY71gWMJeXt9ZT44X4KexwZxHEYz'
9+
10+let NONE = "none"
11+
12+let BALANCE = "balance_"
13+
14+func getNumberByKey (key) = {
15+ let num = match getInteger(this, key) {
16+ case a: Int =>
17+ a
18+ case _ =>
19+ 0
20+ }
21+ num
22+ }
23+
24+
25+func getStrByKey (key) = {
26+ let str = match getString(this, key) {
27+ case a: String =>
28+ a
29+ case _ =>
30+ NONE
31+ }
32+ str
33+ }
34+
35+
36+func getKeyItemPrice (item) = (item + "_price")
37+
38+
39+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
40+
41+
42+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
43+
44+
45+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
46+
47+
48+func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
49+
50+
51+func getKeyItemData (item) = (item + "_data")
52+
53+
54+func getKeyItemSupplier (item) = (item + "_owner")
55+
56+
57+func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
58+
59+
60+func getKeyBalanceSupplier (account) = (account + "_balance")
61+
62+
63+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
464
565
666 @Callable(i)
7-func purchase (item) = {
67+func purchase () = {
868 let pmt = extract(i.payment)
969 if (isDefined(pmt.assetId))
1070 then throw("can use WAVES only at the moment")
1171 else {
1272 let customerAddress = toBase58String(i.caller.bytes)
13- let price = match getInteger(this, (("item_" + item) + "_coupon_price")) {
73+ let price = match getInteger(this, "item_A_coupon_price") {
1474 case a: Int =>
1575 a
1676 case _ =>
2080 then throw("purchase amount cannot be less than item price")
2181 else if ((pmt.amount > price))
2282 then throw("purchase amount cannot be higher than item price")
23- else WriteSet([DataEntry(((("status:purchase_item_" + item) + "_customer_") + customerAddress), "confirmed"), DataEntry(((("price:purchase_item_" + item) + "_customer_") + customerAddress), price)])
83+ else WriteSet([DataEntry(("status:purchase_item_A_customer_" + customerAddress), "confirmed"), DataEntry(("price:purchase_item_A_customer_" + customerAddress), price)])
2484 }
2585 }
2686
2787
88+
89+@Callable(i)
90+func deposit () = {
91+ let pmt = extract(i.payment)
92+ if (isDefined(pmt.assetId))
93+ then throw("can hodl waves only at the moment")
94+ else {
95+ let currentKey = toBase58String(i.caller.bytes)
96+ let currentAmount = match getInteger(this, currentKey) {
97+ case a: Int =>
98+ a
99+ case _ =>
100+ 0
101+ }
102+ let wlStsCurr = match getString(this, ("wl_sts_" + currentKey)) {
103+ case a: String =>
104+ a
105+ case _ =>
106+ throw("User has not deen waitlisted")
107+ }
108+ let newAmount = (currentAmount + pmt.amount)
109+ WriteSet([DataEntry((BALANCE + currentKey), newAmount)])
110+ }
111+ }
112+
113+
114+
115+@Callable(i)
116+func withdraw (amount) = {
117+ let currentKey = toBase58String(i.caller.bytes)
118+ let currentAmount = match getInteger(this, (BALANCE + currentKey)) {
119+ case a: Int =>
120+ a
121+ case _ =>
122+ 0
123+ }
124+ let newAmount = (currentAmount - amount)
125+ if ((0 > amount))
126+ then throw("Can't withdraw negative amount")
127+ else if ((0 > newAmount))
128+ then throw("Not enough balance")
129+ else ScriptResult(WriteSet([DataEntry((BALANCE + currentKey), newAmount)]), TransferSet([ScriptTransfer(i.caller, amount, unit)]))
130+ }
131+
132+
133+
134+@Callable(i)
135+func addItem (title,price,data) = {
136+ let supplierAddress = toBase58String(i.caller.bytes)
137+ let item = getKeyItem(supplierAddress, title)
138+ if ((0 >= price))
139+ then throw("purchase amount cannot be less than item price")
140+ else if ((getValueItemSupplier(item) != NONE))
141+ then throw("an item is already exist")
142+ else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)])
143+ }
144+
145+
28146 @Verifier(tx)
29-func verify () = match tx {
30- case d: SetScriptTransaction =>
31- sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
32- case d: DataTransaction =>
33- true
34- case d: TransferTransaction =>
35- true
36- case d: InvokeScriptTransaction =>
37- true
38- case _ =>
39- false
40-}
147+func verify () = {
148+ let acc1_1 = sigVerify(tx.bodyBytes, tx.proofs[0], acc1PubKey)
149+ let acc1_2 = sigVerify(tx.bodyBytes, tx.proofs[1], acc1PubKey)
150+ let acc1_3 = sigVerify(tx.bodyBytes, tx.proofs[2], acc1PubKey)
151+ let acc2_1 = sigVerify(tx.bodyBytes, tx.proofs[0], acc2PubKey)
152+ let acc2_2 = sigVerify(tx.bodyBytes, tx.proofs[1], acc2PubKey)
153+ let acc2_3 = sigVerify(tx.bodyBytes, tx.proofs[2], acc2PubKey)
154+ let acc3_1 = sigVerify(tx.bodyBytes, tx.proofs[0], acc3PubKey)
155+ let acc3_2 = sigVerify(tx.bodyBytes, tx.proofs[1], acc3PubKey)
156+ let acc3_3 = sigVerify(tx.bodyBytes, tx.proofs[2], acc3PubKey)
157+ let acc1acc2 = if (if (if (if (if (if (acc1_1)
158+ then acc2_2
159+ else false)
160+ then true
161+ else if (acc1_1)
162+ then acc2_3
163+ else false)
164+ then true
165+ else if (acc1_2)
166+ then acc2_1
167+ else false)
168+ then true
169+ else if (acc1_2)
170+ then acc2_3
171+ else false)
172+ then true
173+ else if (acc1_3)
174+ then acc2_1
175+ else false)
176+ then true
177+ else if (acc1_3)
178+ then acc2_2
179+ else false
180+ let acc1acc3 = if (if (if (if (if (if (acc1_1)
181+ then acc3_2
182+ else false)
183+ then true
184+ else if (acc1_1)
185+ then acc3_3
186+ else false)
187+ then true
188+ else if (acc1_2)
189+ then acc3_1
190+ else false)
191+ then true
192+ else if (acc1_2)
193+ then acc3_3
194+ else false)
195+ then true
196+ else if (acc1_3)
197+ then acc3_1
198+ else false)
199+ then true
200+ else if (acc1_3)
201+ then acc3_2
202+ else false
203+ let acc2acc3 = if (if (if (if (if (if (acc3_1)
204+ then acc2_2
205+ else false)
206+ then true
207+ else if (acc3_1)
208+ then acc2_3
209+ else false)
210+ then true
211+ else if (acc3_2)
212+ then acc2_1
213+ else false)
214+ then true
215+ else if (acc3_2)
216+ then acc2_3
217+ else false)
218+ then true
219+ else if (acc3_3)
220+ then acc2_1
221+ else false)
222+ then true
223+ else if (acc3_3)
224+ then acc2_2
225+ else false
226+ match tx {
227+ case d: SetScriptTransaction =>
228+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
229+ case d: DataTransaction =>
230+ true
231+ case d: TransferTransaction =>
232+ true
233+ case d: InvokeScriptTransaction =>
234+ true
235+ case _ =>
236+ false
237+ }
238+ }
41239
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let acc1PubKey = base58'FgdjGJ4tLFiavKEKf4WkWwkgvU8ARWP1WYZfmUrXo4CY'
5+
6+let acc2PubKey = base58'EEhsp9Jd5MwVmYJMGAZJL3tTb5KcurTz8Aw7wksZuw3e'
7+
8+let acc3PubKey = base58'6SdykacJeMCbeNvVJY71gWMJeXt9ZT44X4KexwZxHEYz'
9+
10+let NONE = "none"
11+
12+let BALANCE = "balance_"
13+
14+func getNumberByKey (key) = {
15+ let num = match getInteger(this, key) {
16+ case a: Int =>
17+ a
18+ case _ =>
19+ 0
20+ }
21+ num
22+ }
23+
24+
25+func getStrByKey (key) = {
26+ let str = match getString(this, key) {
27+ case a: String =>
28+ a
29+ case _ =>
30+ NONE
31+ }
32+ str
33+ }
34+
35+
36+func getKeyItemPrice (item) = (item + "_price")
37+
38+
39+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
40+
41+
42+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
43+
44+
45+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
46+
47+
48+func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
49+
50+
51+func getKeyItemData (item) = (item + "_data")
52+
53+
54+func getKeyItemSupplier (item) = (item + "_owner")
55+
56+
57+func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
58+
59+
60+func getKeyBalanceSupplier (account) = (account + "_balance")
61+
62+
63+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
464
565
666 @Callable(i)
7-func purchase (item) = {
67+func purchase () = {
868 let pmt = extract(i.payment)
969 if (isDefined(pmt.assetId))
1070 then throw("can use WAVES only at the moment")
1171 else {
1272 let customerAddress = toBase58String(i.caller.bytes)
13- let price = match getInteger(this, (("item_" + item) + "_coupon_price")) {
73+ let price = match getInteger(this, "item_A_coupon_price") {
1474 case a: Int =>
1575 a
1676 case _ =>
1777 0
1878 }
1979 if ((price > pmt.amount))
2080 then throw("purchase amount cannot be less than item price")
2181 else if ((pmt.amount > price))
2282 then throw("purchase amount cannot be higher than item price")
23- else WriteSet([DataEntry(((("status:purchase_item_" + item) + "_customer_") + customerAddress), "confirmed"), DataEntry(((("price:purchase_item_" + item) + "_customer_") + customerAddress), price)])
83+ else WriteSet([DataEntry(("status:purchase_item_A_customer_" + customerAddress), "confirmed"), DataEntry(("price:purchase_item_A_customer_" + customerAddress), price)])
2484 }
2585 }
2686
2787
88+
89+@Callable(i)
90+func deposit () = {
91+ let pmt = extract(i.payment)
92+ if (isDefined(pmt.assetId))
93+ then throw("can hodl waves only at the moment")
94+ else {
95+ let currentKey = toBase58String(i.caller.bytes)
96+ let currentAmount = match getInteger(this, currentKey) {
97+ case a: Int =>
98+ a
99+ case _ =>
100+ 0
101+ }
102+ let wlStsCurr = match getString(this, ("wl_sts_" + currentKey)) {
103+ case a: String =>
104+ a
105+ case _ =>
106+ throw("User has not deen waitlisted")
107+ }
108+ let newAmount = (currentAmount + pmt.amount)
109+ WriteSet([DataEntry((BALANCE + currentKey), newAmount)])
110+ }
111+ }
112+
113+
114+
115+@Callable(i)
116+func withdraw (amount) = {
117+ let currentKey = toBase58String(i.caller.bytes)
118+ let currentAmount = match getInteger(this, (BALANCE + currentKey)) {
119+ case a: Int =>
120+ a
121+ case _ =>
122+ 0
123+ }
124+ let newAmount = (currentAmount - amount)
125+ if ((0 > amount))
126+ then throw("Can't withdraw negative amount")
127+ else if ((0 > newAmount))
128+ then throw("Not enough balance")
129+ else ScriptResult(WriteSet([DataEntry((BALANCE + currentKey), newAmount)]), TransferSet([ScriptTransfer(i.caller, amount, unit)]))
130+ }
131+
132+
133+
134+@Callable(i)
135+func addItem (title,price,data) = {
136+ let supplierAddress = toBase58String(i.caller.bytes)
137+ let item = getKeyItem(supplierAddress, title)
138+ if ((0 >= price))
139+ then throw("purchase amount cannot be less than item price")
140+ else if ((getValueItemSupplier(item) != NONE))
141+ then throw("an item is already exist")
142+ else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)])
143+ }
144+
145+
28146 @Verifier(tx)
29-func verify () = match tx {
30- case d: SetScriptTransaction =>
31- sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
32- case d: DataTransaction =>
33- true
34- case d: TransferTransaction =>
35- true
36- case d: InvokeScriptTransaction =>
37- true
38- case _ =>
39- false
40-}
147+func verify () = {
148+ let acc1_1 = sigVerify(tx.bodyBytes, tx.proofs[0], acc1PubKey)
149+ let acc1_2 = sigVerify(tx.bodyBytes, tx.proofs[1], acc1PubKey)
150+ let acc1_3 = sigVerify(tx.bodyBytes, tx.proofs[2], acc1PubKey)
151+ let acc2_1 = sigVerify(tx.bodyBytes, tx.proofs[0], acc2PubKey)
152+ let acc2_2 = sigVerify(tx.bodyBytes, tx.proofs[1], acc2PubKey)
153+ let acc2_3 = sigVerify(tx.bodyBytes, tx.proofs[2], acc2PubKey)
154+ let acc3_1 = sigVerify(tx.bodyBytes, tx.proofs[0], acc3PubKey)
155+ let acc3_2 = sigVerify(tx.bodyBytes, tx.proofs[1], acc3PubKey)
156+ let acc3_3 = sigVerify(tx.bodyBytes, tx.proofs[2], acc3PubKey)
157+ let acc1acc2 = if (if (if (if (if (if (acc1_1)
158+ then acc2_2
159+ else false)
160+ then true
161+ else if (acc1_1)
162+ then acc2_3
163+ else false)
164+ then true
165+ else if (acc1_2)
166+ then acc2_1
167+ else false)
168+ then true
169+ else if (acc1_2)
170+ then acc2_3
171+ else false)
172+ then true
173+ else if (acc1_3)
174+ then acc2_1
175+ else false)
176+ then true
177+ else if (acc1_3)
178+ then acc2_2
179+ else false
180+ let acc1acc3 = if (if (if (if (if (if (acc1_1)
181+ then acc3_2
182+ else false)
183+ then true
184+ else if (acc1_1)
185+ then acc3_3
186+ else false)
187+ then true
188+ else if (acc1_2)
189+ then acc3_1
190+ else false)
191+ then true
192+ else if (acc1_2)
193+ then acc3_3
194+ else false)
195+ then true
196+ else if (acc1_3)
197+ then acc3_1
198+ else false)
199+ then true
200+ else if (acc1_3)
201+ then acc3_2
202+ else false
203+ let acc2acc3 = if (if (if (if (if (if (acc3_1)
204+ then acc2_2
205+ else false)
206+ then true
207+ else if (acc3_1)
208+ then acc2_3
209+ else false)
210+ then true
211+ else if (acc3_2)
212+ then acc2_1
213+ else false)
214+ then true
215+ else if (acc3_2)
216+ then acc2_3
217+ else false)
218+ then true
219+ else if (acc3_3)
220+ then acc2_1
221+ else false)
222+ then true
223+ else if (acc3_3)
224+ then acc2_2
225+ else false
226+ match tx {
227+ case d: SetScriptTransaction =>
228+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
229+ case d: DataTransaction =>
230+ true
231+ case d: TransferTransaction =>
232+ true
233+ case d: InvokeScriptTransaction =>
234+ true
235+ case _ =>
236+ false
237+ }
238+ }
41239

github/deemru/w8io/6500d08 
36.92 ms