tx · F7oPxdRuk7feFxoivJh5aaPVEcxzZpg3cqLQDV5ZWzS9 3Mrm2Y65tQHXfGxscQKTNc8ezxczedMDcnk: -0.01400000 Waves 2019.09.18 13:53 [681602] smart account 3Mrm2Y65tQHXfGxscQKTNc8ezxczedMDcnk > SELF 0.00000000 Waves
{ "type": 13, "id": "F7oPxdRuk7feFxoivJh5aaPVEcxzZpg3cqLQDV5ZWzS9", "fee": 1400000, "feeAssetId": null, "timestamp": 1568804023784, "version": 1, "sender": "3Mrm2Y65tQHXfGxscQKTNc8ezxczedMDcnk", "senderPublicKey": "Fxiie4GD9XKqtFXMHFgiDJTqvfZP1xSgdYbS7ZQtq4RW", "proofs": [ "5KueqWtkZxvM9P8ZKB3At7U4ZDK8sfgD8BsCiPxJYtfBnRZZfcf8axdnxUNb68iLZK4NXjfQ8PJA5nV2JHfc5nK9" ], "script": "base64:AAIDAAAAAAAAAAAAAAANAAAAAAROT05FAgAAAARub25lAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAANudW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAFAAAAA251bQEAAAALZ2V0U3RyQnlLZXkAAAABAAAAA2tleQQAAAADc3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAAROT05FBQAAAANzdHIBAAAAD2dldEtleUl0ZW1QcmljZQAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAZfcHJpY2UBAAAAEWdldFZhbHVlSXRlbVByaWNlAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABl9vd25lcgEAAAAUZ2V0VmFsdWVJdGVtU3VwcGxpZXIAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtAQAAAApnZXRLZXlJdGVtAAAAAgAAAAhzdXBwbGllcgAAAAV0aXRsZQkAASwAAAACAgAAAAVpdGVtXwkAAlgAAAABCQAB9wAAAAEJAAGbAAAAAQkAASwAAAACBQAAAAhzdXBwbGllcgUAAAAFdGl0bGUBAAAADmdldEtleUl0ZW1EYXRhAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABV9kYXRhAQAAABVnZXRLZXlVc2VySXRlbUNvdW50ZXIAAAACAAAABHVzZXIAAAAEaXRlbQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEaXRlbQIAAAABXwUAAAAEdXNlcgIAAAAEX2NudAEAAAAXZ2V0VmFsdWVVc2VySXRlbUNvdW50ZXIAAAACAAAABHVzZXIAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAABHVzZXIFAAAABGl0ZW0BAAAAFWdldEtleUJhbGFuY2VTdXBwbGllcgAAAAEAAAAHYWNjb3VudAkAASwAAAACBQAAAAdhY2NvdW50AgAAAAhfYmFsYW5jZQEAAAAXZ2V0VmFsdWVCYWxhbmNlU3VwcGxpZXIAAAABAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAAdhY2NvdW50AAAAAgAAAAFpAQAAAAdhZGRJdGVtAAAAAwAAAAV0aXRsZQAAAAVwcmljZQAAAARkYXRhBAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAEaXRlbQkBAAAACmdldEtleUl0ZW0AAAACBQAAAA9zdXBwbGllckFkZHJlc3MFAAAABXRpdGxlAwkAAGcAAAACAAAAAAAAAAAABQAAAAVwcmljZQkAAAIAAAABAgAAAC9QdXJjaGFzZSBhbW91bnQgY2Fubm90IGJlIGxlc3MgdGhhbiBpdGVtIHByaWNlLgMJAQAAAAIhPQAAAAIJAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAABE5PTkUJAAACAAAAAQIAAAAaQW5uIGl0ZW0gaXMgYWxyZWFkeSBleGlzdC4JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAA9zdXBwbGllckFkZHJlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtBQAAAAVwcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQUAAAADbmlsAAAAAWkBAAAACHB1cmNoYXNlAAAAAQAAAARpdGVtBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAfV0FWRVMgdG9rZW4gb25seSBhdCB0aGUgbW9tZW50LgQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAAL1B1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UuAwkAAGYAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAFcHJpY2UJAAACAAAAAQIAAAAxUHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBoaWdoZXIgdGhhbiBpdGVtIHByaWNlLgMJAAAAAAAAAgUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAROT05FCQAAAgAAAAECAAAAGFN1cHBsaWVyIGRvZXMgbm90IGV4aXN0LgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAAXw+tZ", "chainId": 84, "height": 681602, "spentComplexity": 0 } View: original | compacted Prev: E4hnHnqqXTGSuC6mGyswzT6Du8GRcCJHKHjtk1UqHgRY Next: RAQ1rzSmzq9MPrieQJ1aWFEmWmszUpajFpq5MpuXtCn Diff:
Old | New | Differences | |
---|---|---|---|
28 | 28 | func getKeyItemPrice (item) = (item + "_price") | |
29 | 29 | ||
30 | 30 | ||
31 | + | func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item)) | |
32 | + | ||
33 | + | ||
31 | 34 | func getKeyItemSupplier (item) = (item + "_owner") | |
32 | 35 | ||
33 | 36 | ||
38 | 41 | ||
39 | 42 | ||
40 | 43 | func getKeyItemData (item) = (item + "_data") | |
44 | + | ||
45 | + | ||
46 | + | func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt") | |
47 | + | ||
48 | + | ||
49 | + | func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item)) | |
50 | + | ||
51 | + | ||
52 | + | func getKeyBalanceSupplier (account) = (account + "_balance") | |
53 | + | ||
54 | + | ||
55 | + | func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account)) | |
41 | 56 | ||
42 | 57 | ||
43 | 58 | @Callable(i) | |
52 | 67 | } | |
53 | 68 | ||
54 | 69 | ||
70 | + | ||
71 | + | @Callable(i) | |
72 | + | func purchase (item) = { | |
73 | + | let pmt = extract(i.payment) | |
74 | + | if (isDefined(pmt.assetId)) | |
75 | + | then throw("WAVES token only at the moment.") | |
76 | + | else { | |
77 | + | let userAddress = toBase58String(i.caller.bytes) | |
78 | + | let price = getValueItemPrice(item) | |
79 | + | let supplierAddress = getValueItemSupplier(item) | |
80 | + | if ((price > pmt.amount)) | |
81 | + | then throw("Purchase amount cannot be less than item price.") | |
82 | + | else if ((pmt.amount > price)) | |
83 | + | then throw("Purchase amount cannot be higher than item price.") | |
84 | + | else if ((supplierAddress == NONE)) | |
85 | + | then throw("Supplier does not exist.") | |
86 | + | else WriteSet([DataEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), DataEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]) | |
87 | + | } | |
88 | + | } | |
89 | + | ||
90 | + |
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 | 6 | func getNumberByKey (key) = { | |
7 | 7 | let num = match getInteger(this, key) { | |
8 | 8 | case a: Int => | |
9 | 9 | a | |
10 | 10 | case _ => | |
11 | 11 | 0 | |
12 | 12 | } | |
13 | 13 | num | |
14 | 14 | } | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func getStrByKey (key) = { | |
18 | 18 | let str = match getString(this, key) { | |
19 | 19 | case a: String => | |
20 | 20 | a | |
21 | 21 | case _ => | |
22 | 22 | NONE | |
23 | 23 | } | |
24 | 24 | str | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func getKeyItemPrice (item) = (item + "_price") | |
29 | 29 | ||
30 | 30 | ||
31 | + | func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item)) | |
32 | + | ||
33 | + | ||
31 | 34 | func getKeyItemSupplier (item) = (item + "_owner") | |
32 | 35 | ||
33 | 36 | ||
34 | 37 | func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item)) | |
35 | 38 | ||
36 | 39 | ||
37 | 40 | func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title))))) | |
38 | 41 | ||
39 | 42 | ||
40 | 43 | func getKeyItemData (item) = (item + "_data") | |
44 | + | ||
45 | + | ||
46 | + | func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt") | |
47 | + | ||
48 | + | ||
49 | + | func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item)) | |
50 | + | ||
51 | + | ||
52 | + | func getKeyBalanceSupplier (account) = (account + "_balance") | |
53 | + | ||
54 | + | ||
55 | + | func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account)) | |
41 | 56 | ||
42 | 57 | ||
43 | 58 | @Callable(i) | |
44 | 59 | func addItem (title,price,data) = { | |
45 | 60 | let supplierAddress = toBase58String(i.caller.bytes) | |
46 | 61 | let item = getKeyItem(supplierAddress, title) | |
47 | 62 | if ((0 >= price)) | |
48 | 63 | then throw("Purchase amount cannot be less than item price.") | |
49 | 64 | else if ((getValueItemSupplier(item) != NONE)) | |
50 | 65 | then throw("Ann item is already exist.") | |
51 | 66 | else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)]) | |
52 | 67 | } | |
53 | 68 | ||
54 | 69 | ||
70 | + | ||
71 | + | @Callable(i) | |
72 | + | func purchase (item) = { | |
73 | + | let pmt = extract(i.payment) | |
74 | + | if (isDefined(pmt.assetId)) | |
75 | + | then throw("WAVES token only at the moment.") | |
76 | + | else { | |
77 | + | let userAddress = toBase58String(i.caller.bytes) | |
78 | + | let price = getValueItemPrice(item) | |
79 | + | let supplierAddress = getValueItemSupplier(item) | |
80 | + | if ((price > pmt.amount)) | |
81 | + | then throw("Purchase amount cannot be less than item price.") | |
82 | + | else if ((pmt.amount > price)) | |
83 | + | then throw("Purchase amount cannot be higher than item price.") | |
84 | + | else if ((supplierAddress == NONE)) | |
85 | + | then throw("Supplier does not exist.") | |
86 | + | else WriteSet([DataEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), DataEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]) | |
87 | + | } | |
88 | + | } | |
89 | + | ||
90 | + |
github/deemru/w8io/169f3d6 21.05 ms ◑![]()