tx · 9Zhe1yN13wKVbWvfCL7hC6kgw3SdutvLqLfyTjwvbbJp

3Muxd5JEAQz655DDi2yiZxSQ63jVJJHrQyV:  -0.01400000 Waves

2022.02.04 01:22 [1908023] smart account 3Muxd5JEAQz655DDi2yiZxSQ63jVJJHrQyV > SELF 0.00000000 Waves

{ "type": 13, "id": "9Zhe1yN13wKVbWvfCL7hC6kgw3SdutvLqLfyTjwvbbJp", "fee": 1400000, "feeAssetId": null, "timestamp": 1643926974316, "version": 2, "chainId": 84, "sender": "3Muxd5JEAQz655DDi2yiZxSQ63jVJJHrQyV", "senderPublicKey": "7ycxALbgfzht9z36iWCgRauBfWzQGSgkc3HMwu7wDwNX", "proofs": [ "45jKW6wG3aa59WM7WQsqscFAL3EQTpPDw8rvCCUwp4fGDinaALfNC4fT7gq8QRgrtmQSErEkVHGEAgFeqNViYfqh" ], "script": "base64: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", "height": 1908023, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HfELr5XExqspnrj3EgNG9ZuKW3EUH475gRd5z7x3wLgr Next: 3BWxpe5J5E2kyuhQVpEJCPjJ5YASowmTGj2MKjTAz7e2 Diff:
OldNewDifferences
3232 func getItemPriceKey (item) = (item + "_price")
3333
3434
35+func getItemSoldOutKey (item) = (item + "_soldout")
36+
37+
3538 func getItemDataKey (item) = (item + "_data")
3639
3740
6366 then throw("Price can not be negative value or zero")
6467 else if ((getValueItemSupplier(item) != NONE))
6568 then throw("Item already exists")
66- else [StringEntry(getItemSupplierKey(item), supplierAddress), IntegerEntry(getItemPriceKey(item), price), StringEntry(getItemDataKey(item), data)]
69+ else [StringEntry(getItemSupplierKey(item), supplierAddress), IntegerEntry(getItemPriceKey(item), price), IntegerEntry(getItemSoldOutKey(item), 0), StringEntry(getItemDataKey(item), data)]
6770 }
71+
72+
73+
74+@Callable(i)
75+func purchase (title,supplier) = if ((size(i.payments) > 0))
76+ then {
77+ let payment = i.payments[0]
78+ if (if (isDefined(title))
79+ then isDefined(supplier)
80+ else false)
81+ then if (isDefined(payment.assetId))
82+ then throw("Only should pay in waves")
83+ else {
84+ let customerAddr = toBase58String(i.caller.bytes)
85+ let item = getItemHash(supplier, title)
86+ let soldout = match getInteger(this, getItemSoldOutKey(item)) {
87+ case t: Int =>
88+ t
89+ case _ =>
90+ 2
91+ }
92+ let price = match getInteger(this, getItemPriceKey(item)) {
93+ case p: Int =>
94+ p
95+ case _ =>
96+ 0
97+ }
98+ if ((soldout != 0))
99+ then throw("Item is already sold")
100+ else if ((payment.amount > price))
101+ then throw("payment cant be higher than price")
102+ else if ((price > payment.amount))
103+ then throw("payment cant be lower than price")
104+ else [IntegerEntry(getItemSoldOutKey(item), 1), StringEntry(((("status:purchase_" + item) + "_customer_") + customerAddr), "confirmed"), IntegerEntry(((("price:purchase_" + item) + "_customer_") + customerAddr), price)]
105+ }
106+ else throw("Coupon title and supplier address should be present")
107+ }
108+ else throw("Please attach payment")
68109
69110
70111
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "NONE"
55
66 let customer = "CUSTOMER"
77
88 let supplier = "SUPPLIER"
99
1010 let ericPubKey = base58'8haEN2a7ZmkzawLmnr5rFX14X1oHi5kjt8NQUDNjSDLG'
1111
1212 func getStringByKey (key) = match getString(key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 NONE
1717 }
1818
1919
2020 func getItemHash (supplier,title) = {
2121 let comboTitle = (supplier + title)
2222 ("item_" + toBase58String(sha256(toBytes(comboTitle))))
2323 }
2424
2525
2626 func getNameKey (type,addr) = (((type + "_") + addr) + "_name")
2727
2828
2929 func getItemSupplierKey (item) = (item + "_owner")
3030
3131
3232 func getItemPriceKey (item) = (item + "_price")
3333
3434
35+func getItemSoldOutKey (item) = (item + "_soldout")
36+
37+
3538 func getItemDataKey (item) = (item + "_data")
3639
3740
3841 func getValueItemSupplier (item) = {
3942 let itemKey = getItemSupplierKey(item)
4043 getStringByKey(itemKey)
4144 }
4245
4346
4447 @Callable(i)
4548 func register (type) = {
4649 let addr = toBase58String(i.caller.bytes)
4750 if (if (isDefined(type))
4851 then if ((type == customer))
4952 then true
5053 else (type == supplier)
5154 else false)
5255 then [StringEntry(getNameKey(type, addr), addr)]
5356 else throw("Invalid func parameters")
5457 }
5558
5659
5760
5861 @Callable(i)
5962 func createItem (title,price,data) = {
6063 let supplierAddress = toBase58String(i.caller.bytes)
6164 let item = getItemHash(supplierAddress, title)
6265 if ((0 >= price))
6366 then throw("Price can not be negative value or zero")
6467 else if ((getValueItemSupplier(item) != NONE))
6568 then throw("Item already exists")
66- else [StringEntry(getItemSupplierKey(item), supplierAddress), IntegerEntry(getItemPriceKey(item), price), StringEntry(getItemDataKey(item), data)]
69+ else [StringEntry(getItemSupplierKey(item), supplierAddress), IntegerEntry(getItemPriceKey(item), price), IntegerEntry(getItemSoldOutKey(item), 0), StringEntry(getItemDataKey(item), data)]
6770 }
71+
72+
73+
74+@Callable(i)
75+func purchase (title,supplier) = if ((size(i.payments) > 0))
76+ then {
77+ let payment = i.payments[0]
78+ if (if (isDefined(title))
79+ then isDefined(supplier)
80+ else false)
81+ then if (isDefined(payment.assetId))
82+ then throw("Only should pay in waves")
83+ else {
84+ let customerAddr = toBase58String(i.caller.bytes)
85+ let item = getItemHash(supplier, title)
86+ let soldout = match getInteger(this, getItemSoldOutKey(item)) {
87+ case t: Int =>
88+ t
89+ case _ =>
90+ 2
91+ }
92+ let price = match getInteger(this, getItemPriceKey(item)) {
93+ case p: Int =>
94+ p
95+ case _ =>
96+ 0
97+ }
98+ if ((soldout != 0))
99+ then throw("Item is already sold")
100+ else if ((payment.amount > price))
101+ then throw("payment cant be higher than price")
102+ else if ((price > payment.amount))
103+ then throw("payment cant be lower than price")
104+ else [IntegerEntry(getItemSoldOutKey(item), 1), StringEntry(((("status:purchase_" + item) + "_customer_") + customerAddr), "confirmed"), IntegerEntry(((("price:purchase_" + item) + "_customer_") + customerAddr), price)]
105+ }
106+ else throw("Coupon title and supplier address should be present")
107+ }
108+ else throw("Please attach payment")
68109
69110
70111
71112 @Callable(i)
72113 func deleteItem (title) = {
73114 let supplierAddress = toBase58String(i.caller.bytes)
74115 let item = getItemHash(supplierAddress, title)
75116 if ((getValueItemSupplier(item) != NONE))
76117 then [DeleteEntry(getItemSupplierKey(item)), DeleteEntry(getItemPriceKey(item)), DeleteEntry(getItemDataKey(item))]
77118 else throw("No such item present")
78119 }
79120
80121
81122
82123 @Callable(i)
83124 func deleteEntry (key) = if ((i.callerPublicKey == ericPubKey))
84125 then [DeleteEntry(key)]
85126 else throw("Only Eric can delete entries")
86127
87128
88129
89130 @Callable(i)
90131 func unregister (type) = if (if ((type == supplier))
91132 then true
92133 else (type == customer))
93134 then {
94135 let addr = toBase58String(i.caller.bytes)
95136 [DeleteEntry(getNameKey(type, addr))]
96137 }
97138 else throw("Illegal argument")
98139
99140
100141 @Verifier(tx)
101142 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
102143

github/deemru/w8io/c3f4982 
28.24 ms