tx · 24jriDfj9zdDyQMyEfnfi4cAv7J7T5cH4ACXDJTB1q5h

3Mug9m592faZHrJqG2c2q1EGkZ3MEeX8xB2:  -0.01400000 Waves

2019.08.29 18:05 [652661] smart account 3Mug9m592faZHrJqG2c2q1EGkZ3MEeX8xB2 > SELF 0.00000000 Waves

{ "type": 13, "id": "24jriDfj9zdDyQMyEfnfi4cAv7J7T5cH4ACXDJTB1q5h", "fee": 1400000, "feeAssetId": null, "timestamp": 1567091118059, "version": 1, "sender": "3Mug9m592faZHrJqG2c2q1EGkZ3MEeX8xB2", "senderPublicKey": "HwcKpWc8w2qMgyLzmyTm6MDfsuVLCMS6ULASN6dWnwdk", "proofs": [ "5ncrvUJyNmHJi5gyKMEurCfyhpP9wAMFvqThCcL4cYUSmhPZD6ohec4y7YH8BZaAyfS77dAU1wZmJJsa333eMqAF", "5woCWZro5YHpqKhC5rtctZE1upQpfJ3j1oTT9QgzHLoBs6tM1mveFKRmjHQjn4wj493ZuMen5Y9R8qvgkdDaby28", "63CW13NS8srWT8YTx7rqTrdXN3JYoTZPQMwhYdxaE14BMmUoYXqvRk4CWUY43WmjxQxkpuiaR87USLea5kGACkt1" ], "script": "base64:AAIDAAAAAAAAAAAAAAANAAAAAAROT05FAgAAAARub25lAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAANudW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAFAAAAA251bQEAAAALZ2V0U3RyQnlLZXkAAAABAAAAA2tleQQAAAADc3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAAROT05FBQAAAANzdHIBAAAAD2dldEtleUl0ZW1QcmljZQAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAZfcHJpY2UBAAAAEWdldFZhbHVlSXRlbVByaWNlAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQEAAAAVZ2V0S2V5VXNlckl0ZW1Db3VudGVyAAAAAgAAAAR1c2VyAAAABGl0ZW0JAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABGl0ZW0CAAAAAV8FAAAABHVzZXICAAAABF9jbnQBAAAAF2dldFZhbHVlVXNlckl0ZW1Db3VudGVyAAAAAgAAAAR1c2VyAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlVc2VySXRlbUNvdW50ZXIAAAACBQAAAAR1c2VyBQAAAARpdGVtAQAAAApnZXRLZXlJdGVtAAAAAgAAAAhzdXBwbGllcgAAAAV0aXRsZQkAASwAAAACAgAAAAVpdGVtXwkAAlgAAAABCQAB9wAAAAEJAAGbAAAAAQkAASwAAAACBQAAAAhzdXBwbGllcgUAAAAFdGl0bGUBAAAADmdldEtleUl0ZW1EYXRhAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABV9kYXRhAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAGX293bmVyAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0BAAAAFWdldEtleUJhbGFuY2VTdXBwbGllcgAAAAEAAAAHYWNjb3VudAkAASwAAAACBQAAAAdhY2NvdW50AgAAAAhfYmFsYW5jZQEAAAAXZ2V0VmFsdWVCYWxhbmNlU3VwcGxpZXIAAAABAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAAdhY2NvdW50AAAAAgAAAAFpAQAAAAdhZGRJdGVtAAAAAwAAAAV0aXRsZQAAAAVwcmljZQAAAARkYXRhBAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAEaXRlbQkBAAAACmdldEtleUl0ZW0AAAACBQAAAA9zdXBwbGllckFkZHJlc3MFAAAABXRpdGxlAwkAAGcAAAACAAAAAAAAAAAABQAAAAVwcmljZQkAAAIAAAABAgAAAC5wdXJjaGFzZSBhbW91bnQgY2Fubm90IGJlIGxlc3MgdGhhbiBpdGVtIHByaWNlAwkBAAAAAiE9AAAAAgkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAETk9ORQkAAAIAAAABAgAAABhhbiBpdGVtIGlzIGFscmVhZHkgZXhpc3QJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAA9zdXBwbGllckFkZHJlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtBQAAAAVwcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQUAAAADbmlsAAAAAWkBAAAACHB1cmNoYXNlAAAAAAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAIGNhbiB1c2UgV2F2ZXMgb25seSBhdCB0aGUgbW9tZW50BAAAAA9jdXN0b21lckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAATaXRlbV9BX2NvdXBvbl9wcmljZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAwkAAGYAAAACBQAAAAVwcmljZQgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAAAucHVyY2hhc2UgYW1vdW50IGNvbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAABmAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAABXByaWNlCQAAAgAAAAECAAAAMHB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gaXRlbSBwcmljZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACAgAAACBzdGF0dXM6cHVyY2hhc2VfaXRlbV9BX2N1c3RvbWVyXwUAAAAPY3VzdG9tZXJBZGRyZXNzAgAAAAljb25maXJtZWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgIAAAAfcHJpY2U6cHVyY2hhc2VfaXRlbV9BX2N1c3RvbWVyXwUAAAAPY3VzdG9tZXJBZGRyZXNzBQAAAAVwcmljZQUAAAADbmlsAAAAAKqy04k=", "chainId": 84, "height": 652661, "spentComplexity": 0 } View: original | compacted Prev: BZakoP2NezvWTgRLH8yGV3VqykjXjW3uVogTQNE9tRiX Next: GnszvhXkx1UfykVbDmojFC7ptWHi13mxZCGncZGkJ9ve Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let bobPublicKey = base58'GNuHLNfdrBQFcKg3AwDj1fwFdrtuxDna2T8EZCxJA2Z6'
4+let NONE = "none"
55
6-let alicePublicKey = base58'6E6ogeeCpxu9SkEFhggJqUD7fCCQrW8rmAaCLNKzNiXK'
7-
8-let cooperPublicKey = base58'HwcKpWc8w2qMgyLzmyTm6MDfsuVLCMS6ULASN6dWnwdk'
6+func getNumberByKey (key) = {
7+ let num = match getInteger(this, key) {
8+ case a: Int =>
9+ a
10+ case _ =>
11+ 0
12+ }
13+ num
14+ }
915
1016
11-@Verifier(tx)
12-func verify () = {
13- let bob1 = sigVerify(tx.bodyBytes, tx.proofs[0], bobPublicKey)
14- let bob2 = sigVerify(tx.bodyBytes, tx.proofs[1], bobPublicKey)
15- let bob3 = sigVerify(tx.bodyBytes, tx.proofs[2], bobPublicKey)
16- let alice1 = sigVerify(tx.bodyBytes, tx.proofs[0], alicePublicKey)
17- let alice2 = sigVerify(tx.bodyBytes, tx.proofs[1], alicePublicKey)
18- let alice3 = sigVerify(tx.bodyBytes, tx.proofs[2], alicePublicKey)
19- let cooper1 = sigVerify(tx.bodyBytes, tx.proofs[0], cooperPublicKey)
20- let cooper2 = sigVerify(tx.bodyBytes, tx.proofs[1], cooperPublicKey)
21- let cooper3 = sigVerify(tx.bodyBytes, tx.proofs[2], cooperPublicKey)
22- let aliceAndBob = if (if (if (if (if (if (alice1)
23- then bob2
24- else false)
25- then true
26- else if (alice1)
27- then bob3
28- else false)
29- then true
30- else if (alice2)
31- then bob1
32- else false)
33- then true
34- else if (alice2)
35- then bob3
36- else false)
37- then true
38- else if (alice3)
39- then bob1
40- else false)
41- then true
42- else if (alice3)
43- then bob2
44- else false
45- let aliceAndCooper = if (if (if (if (if (if (alice1)
46- then cooper2
47- else false)
48- then true
49- else if (alice1)
50- then cooper3
51- else false)
52- then true
53- else if (alice2)
54- then cooper1
55- else false)
56- then true
57- else if (alice2)
58- then cooper3
59- else false)
60- then true
61- else if (alice3)
62- then cooper1
63- else false)
64- then true
65- else if (alice3)
66- then cooper2
67- else false
68- let bobeAndCooper = if (if (if (if (if (if (cooper1)
69- then bob2
70- else false)
71- then true
72- else if (cooper1)
73- then bob3
74- else false)
75- then true
76- else if (cooper2)
77- then bob1
78- else false)
79- then true
80- else if (cooper2)
81- then bob3
82- else false)
83- then true
84- else if (cooper3)
85- then bob1
86- else false)
87- then true
88- else if (cooper3)
89- then bob2
90- else false
91- match tx {
17+func getStrByKey (key) = {
18+ let str = match getString(this, key) {
19+ case a: String =>
20+ a
9221 case _ =>
93- if (if (aliceAndBob)
94- then true
95- else aliceAndCooper)
96- then true
97- else bobeAndCooper
22+ NONE
9823 }
24+ str
9925 }
26+
27+
28+func getKeyItemPrice (item) = (item + "_price")
29+
30+
31+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
32+
33+
34+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
35+
36+
37+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
38+
39+
40+func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
41+
42+
43+func getKeyItemData (item) = (item + "_data")
44+
45+
46+func getKeyItemSupplier (item) = (item + "_owner")
47+
48+
49+func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
50+
51+
52+func getKeyBalanceSupplier (account) = (account + "_balance")
53+
54+
55+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
56+
57+
58+@Callable(i)
59+func addItem (title,price,data) = {
60+ let supplierAddress = toBase58String(i.caller.bytes)
61+ let item = getKeyItem(supplierAddress, title)
62+ if ((0 >= price))
63+ then throw("purchase amount cannot be less than item price")
64+ else if ((getValueItemSupplier(item) != NONE))
65+ then throw("an item is already exist")
66+ else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)])
67+ }
68+
69+
70+
71+@Callable(i)
72+func purchase () = {
73+ let pmt = extract(i.payment)
74+ if (isDefined(pmt.assetId))
75+ then throw("can use Waves only at the moment")
76+ else {
77+ let customerAddress = toBase58String(i.caller.bytes)
78+ let price = match getInteger(this, "item_A_coupon_price") {
79+ case a: Int =>
80+ a
81+ case _ =>
82+ 0
83+ }
84+ if ((price > pmt.amount))
85+ then throw("purchase amount connot be less than item price")
86+ else if ((pmt.amount > price))
87+ then throw("purchase amount cannot be higher than item price")
88+ else WriteSet([DataEntry(("status:purchase_item_A_customer_" + customerAddress), "confirmed"), DataEntry(("price:purchase_item_A_customer_" + customerAddress), price)])
89+ }
90+ }
91+
10092

github/deemru/w8io/3ef1775 
43.59 ms