tx · 41jzKtaeB98UByEumcM5ZSaebJFahg2ozNQWqGbmANSz

3Mze7XxHJtXw48uyWhjTJgMLcEzNBmi9tS9:  -0.01400000 Waves

2019.08.01 16:24 [611784] smart account 3Mze7XxHJtXw48uyWhjTJgMLcEzNBmi9tS9 > SELF 0.00000000 Waves

{ "type": 13, "id": "41jzKtaeB98UByEumcM5ZSaebJFahg2ozNQWqGbmANSz", "fee": 1400000, "feeAssetId": null, "timestamp": 1564665903518, "version": 1, "sender": "3Mze7XxHJtXw48uyWhjTJgMLcEzNBmi9tS9", "senderPublicKey": "BZri78A6CXpGPmAHZNwqQXoNfWamwRZiuaBas3VdDKZp", "proofs": [ "8xYKZzrjSVbDDCcgzq3GikWjQCKQiB2Qas336MDkeyLggmjMbTyHYt8aTNWCS6KTYBoo2cbYJamMmSHrW17gad7" ], "script": "base64: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", "chainId": 84, "height": 611784, "spentComplexity": 0 } View: original | compacted Prev: 6JgPejDBLt29a9m1EqTxTqQ1uXwFvRaGBp48z49u293G Next: FLDc6EbdKGduG7v2bTmVdveZjUKiYfy66MxYziepuMuA Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "none"
55
6+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
7+
8+
69 func getKeyItem (supplier,title) = ("item" + toBase58String(sha256(toBytes((supplier + title)))))
10+
11+
12+func getNumByKey (key) = {
13+ let num = match getInteger(this, key) {
14+ case a: Int =>
15+ a
16+ case _ =>
17+ 0
18+ }
19+ num
20+ }
721
822
923 func getStrByKey (key) = {
2943 func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
3044
3145
46+func getValueItemPrice (item) = getNumByKey(getKeyItemPrice(item))
47+
48+
49+func getValueUserItemCounter (user,item) = getNumByKey(getKeyItemPrice(item))
50+
51+
52+func getKeyBalanceSupplier (account) = (account + "_balance")
53+
54+
55+func getValueBalanceSupplier (account) = getNumByKey(getKeyBalanceSupplier(account))
56+
57+
3258 @Callable(i)
33-func purchase (Productname) = {
59+func purchase (item) = {
3460 let pmt = extract(i.payment)
3561 if (isDefined(pmt.assetId))
3662 then throw("Can use only WAVES at the moment.")
3763 else {
3864 let customerAddress = toBase16String(i.caller.bytes)
39- let price = match getInteger(this, Productname) {
40- case a: Int =>
41- a
42- case _ =>
43- 0
44- }
65+ let price = getValueItemPrice(item)
66+ let supplierAddress = getValueItemSupplier(item)
4567 if ((price > pmt.amount))
4668 then throw(((("Amount cannot be less than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price)))
4769 else if ((pmt.amount > price))
48- then throw(((("Amount cannot be greater than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price)))
49- else WriteSet([DataEntry(((("status:" + Productname) + "_") + customerAddress), "confirmed"), DataEntry(((("price:" + Productname) + "_") + customerAddress), price)])
70+ then throw(((((("Amount cannot be greater than item price. You specified amount: " + toString(pmt.amount)) + " but price of item: ") + item) + " is ") + toString(price)))
71+ else if ((supplierAddress == NONE))
72+ then throw("Supplier not found.")
73+ else WriteSet([DataEntry(getKeyUserItemCounter(customerAddress, item), (getValueUserItemCounter(customerAddress, item) + 1)), DataEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))])
5074 }
5175 }
5276
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")
7+
8+
69 func getKeyItem (supplier,title) = ("item" + toBase58String(sha256(toBytes((supplier + title)))))
10+
11+
12+func getNumByKey (key) = {
13+ let num = match getInteger(this, key) {
14+ case a: Int =>
15+ a
16+ case _ =>
17+ 0
18+ }
19+ num
20+ }
721
822
923 func getStrByKey (key) = {
1024 let str = match getString(this, key) {
1125 case a: String =>
1226 a
1327 case _ =>
1428 NONE
1529 }
1630 str
1731 }
1832
1933
2034 func getKeyItemSupplier (item) = (item + "_owner")
2135
2236
2337 func getKeyItemPrice (item) = (item + "_price")
2438
2539
2640 func getKeyItemData (item) = (item + "_data")
2741
2842
2943 func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
3044
3145
46+func getValueItemPrice (item) = getNumByKey(getKeyItemPrice(item))
47+
48+
49+func getValueUserItemCounter (user,item) = getNumByKey(getKeyItemPrice(item))
50+
51+
52+func getKeyBalanceSupplier (account) = (account + "_balance")
53+
54+
55+func getValueBalanceSupplier (account) = getNumByKey(getKeyBalanceSupplier(account))
56+
57+
3258 @Callable(i)
33-func purchase (Productname) = {
59+func purchase (item) = {
3460 let pmt = extract(i.payment)
3561 if (isDefined(pmt.assetId))
3662 then throw("Can use only WAVES at the moment.")
3763 else {
3864 let customerAddress = toBase16String(i.caller.bytes)
39- let price = match getInteger(this, Productname) {
40- case a: Int =>
41- a
42- case _ =>
43- 0
44- }
65+ let price = getValueItemPrice(item)
66+ let supplierAddress = getValueItemSupplier(item)
4567 if ((price > pmt.amount))
4668 then throw(((("Amount cannot be less than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price)))
4769 else if ((pmt.amount > price))
48- then throw(((("Amount cannot be greater than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price)))
49- else WriteSet([DataEntry(((("status:" + Productname) + "_") + customerAddress), "confirmed"), DataEntry(((("price:" + Productname) + "_") + customerAddress), price)])
70+ then throw(((((("Amount cannot be greater than item price. You specified amount: " + toString(pmt.amount)) + " but price of item: ") + item) + " is ") + toString(price)))
71+ else if ((supplierAddress == NONE))
72+ then throw("Supplier not found.")
73+ else WriteSet([DataEntry(getKeyUserItemCounter(customerAddress, item), (getValueUserItemCounter(customerAddress, item) + 1)), DataEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))])
5074 }
5175 }
5276
5377
5478
5579 @Callable(i)
5680 func addItem (title,price,data) = {
5781 let supplierAddress = toBase58String(i.caller.bytes)
5882 let item = getKeyItem(supplierAddress, title)
5983 if ((0 >= price))
6084 then throw("Price must be positive.")
6185 else if ((getValueItemSupplier(item) != NONE))
6286 then throw("An item like this already exists.")
6387 else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)])
6488 }
6589
6690

github/deemru/w8io/169f3d6 
27.46 ms