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:
Old | New | | Differences |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | let NONE = "none" |
---|
5 | 5 | | |
---|
| 6 | + | func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt") |
---|
| 7 | + | |
---|
| 8 | + | |
---|
6 | 9 | | 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 | + | } |
---|
7 | 21 | | |
---|
8 | 22 | | |
---|
9 | 23 | | func getStrByKey (key) = { |
---|
|
29 | 43 | | func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item)) |
---|
30 | 44 | | |
---|
31 | 45 | | |
---|
| 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 | + | |
---|
32 | 58 | | @Callable(i) |
---|
33 | | - | func purchase (Productname) = { |
---|
| 59 | + | func purchase (item) = { |
---|
34 | 60 | | let pmt = extract(i.payment) |
---|
35 | 61 | | if (isDefined(pmt.assetId)) |
---|
36 | 62 | | then throw("Can use only WAVES at the moment.") |
---|
37 | 63 | | else { |
---|
38 | 64 | | 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) |
---|
45 | 67 | | if ((price > pmt.amount)) |
---|
46 | 68 | | then throw(((("Amount cannot be less than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price))) |
---|
47 | 69 | | 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))]) |
---|
50 | 74 | | } |
---|
51 | 75 | | } |
---|
52 | 76 | | |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 3 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | let NONE = "none" |
---|
5 | 5 | | |
---|
| 6 | + | func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt") |
---|
| 7 | + | |
---|
| 8 | + | |
---|
6 | 9 | | 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 | + | } |
---|
7 | 21 | | |
---|
8 | 22 | | |
---|
9 | 23 | | func getStrByKey (key) = { |
---|
10 | 24 | | let str = match getString(this, key) { |
---|
11 | 25 | | case a: String => |
---|
12 | 26 | | a |
---|
13 | 27 | | case _ => |
---|
14 | 28 | | NONE |
---|
15 | 29 | | } |
---|
16 | 30 | | str |
---|
17 | 31 | | } |
---|
18 | 32 | | |
---|
19 | 33 | | |
---|
20 | 34 | | func getKeyItemSupplier (item) = (item + "_owner") |
---|
21 | 35 | | |
---|
22 | 36 | | |
---|
23 | 37 | | func getKeyItemPrice (item) = (item + "_price") |
---|
24 | 38 | | |
---|
25 | 39 | | |
---|
26 | 40 | | func getKeyItemData (item) = (item + "_data") |
---|
27 | 41 | | |
---|
28 | 42 | | |
---|
29 | 43 | | func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item)) |
---|
30 | 44 | | |
---|
31 | 45 | | |
---|
| 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 | + | |
---|
32 | 58 | | @Callable(i) |
---|
33 | | - | func purchase (Productname) = { |
---|
| 59 | + | func purchase (item) = { |
---|
34 | 60 | | let pmt = extract(i.payment) |
---|
35 | 61 | | if (isDefined(pmt.assetId)) |
---|
36 | 62 | | then throw("Can use only WAVES at the moment.") |
---|
37 | 63 | | else { |
---|
38 | 64 | | 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) |
---|
45 | 67 | | if ((price > pmt.amount)) |
---|
46 | 68 | | then throw(((("Amount cannot be less than item price. You specified amount: " + toString(pmt.amount)) + "but price is ") + toString(price))) |
---|
47 | 69 | | 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))]) |
---|
50 | 74 | | } |
---|
51 | 75 | | } |
---|
52 | 76 | | |
---|
53 | 77 | | |
---|
54 | 78 | | |
---|
55 | 79 | | @Callable(i) |
---|
56 | 80 | | func addItem (title,price,data) = { |
---|
57 | 81 | | let supplierAddress = toBase58String(i.caller.bytes) |
---|
58 | 82 | | let item = getKeyItem(supplierAddress, title) |
---|
59 | 83 | | if ((0 >= price)) |
---|
60 | 84 | | then throw("Price must be positive.") |
---|
61 | 85 | | else if ((getValueItemSupplier(item) != NONE)) |
---|
62 | 86 | | then throw("An item like this already exists.") |
---|
63 | 87 | | else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)]) |
---|
64 | 88 | | } |
---|
65 | 89 | | |
---|
66 | 90 | | |
---|