tx · 2F9oh357sBXUQrcGcuHJkdKmmKHSCsihzHQQupNU3JhW

3MyXnDWMtqpfkuFJtyBHaUWoWxtGoD8SpBQ:  -0.01400000 Waves

2020.11.20 15:39 [1273711] smart account 3MyXnDWMtqpfkuFJtyBHaUWoWxtGoD8SpBQ > SELF 0.00000000 Waves

{ "type": 13, "id": "2F9oh357sBXUQrcGcuHJkdKmmKHSCsihzHQQupNU3JhW", "fee": 1400000, "feeAssetId": null, "timestamp": 1605876076680, "version": 2, "chainId": 84, "sender": "3MyXnDWMtqpfkuFJtyBHaUWoWxtGoD8SpBQ", "senderPublicKey": "FYobWqooJHEVQFRHr8NU7ewYZ2AJdMzuDBm8WR9PiAx1", "proofs": [ "5MtbJQK6VgxFqfDKJFn1uhKyYPbUvnG4EmHxzPw3Dhs3eC6xfd7DaL38fc3FsosQzJiLWdAsmuDu8xfi82wojquJ" ], "script": "base64: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", "height": 1273711, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8PkN6BuduVRnrCLbyonx3B8Qq5ZB3nTnCTkwvQpv8Qer Next: 3P99T9HihyjJaLKhecAJFRxsmZ6x2zbiHut6GpEunhB9 Diff:
OldNewDifferences
66 let account2PublicKey = base58'2qjcWuL7QitmuhkSTM7CnNxurCYXuqJ9ubswLBGmXfDv'
77
88 let otherPublicKey = base58'GaQkBG6yLLAarb8wvPrEKnQhFqWomD2ZGT1T4vVx24qw'
9+
10+let NONE = "none"
11+
12+func getNumberByKey (key) = {
13+ let num = match getInteger(this, key) {
14+ case a: Int =>
15+ a
16+ case _ =>
17+ 0
18+ }
19+ num
20+ }
21+
22+
23+func getStrByKey (key) = {
24+ let str = match getString(this, key) {
25+ case a: String =>
26+ a
27+ case _ =>
28+ NONE
29+ }
30+ str
31+ }
32+
33+
34+func getKeyItemPrice (item) = (item + "_price")
35+
36+
37+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
38+
39+
40+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
41+
42+
43+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
44+
45+
46+func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
47+
48+
49+func getKeyItemData (item) = (item + "_data")
50+
51+
52+func getKeyItemSupplier (item) = (item + "_owner")
53+
54+
55+func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
56+
57+
58+func getKeyBalanceSupplier (account) = (account + "_balance")
59+
60+
61+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
62+
963
1064 @Callable(i)
1165 func purchase (coupon) = {
3387 }
3488
3589
90+
91+@Callable(i)
92+func addItem (title,price,data) = {
93+ let supplierAddress = toBase58String(i.caller.bytes)
94+ let item = getKeyItem(supplierAddress, title)
95+ if ((0 >= price))
96+ then throw("purchase amount cannot be less than item price")
97+ else if ((getValueItemSupplier(item) != NONE))
98+ then throw("an item already exist")
99+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
100+ }
101+
102+
36103 @Verifier(tx)
37104 func verify () = {
38- let account1 = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], account1PublicKey))
39- then true
40- else sigVerify(tx.bodyBytes, tx.proofs[1], account1PublicKey))
41- then true
42- else sigVerify(tx.bodyBytes, tx.proofs[2], account1PublicKey)
43- let account2 = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], account2PublicKey))
44- then true
45- else sigVerify(tx.bodyBytes, tx.proofs[1], account2PublicKey))
46- then true
47- else sigVerify(tx.bodyBytes, tx.proofs[2], account2PublicKey)
48- let other = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], otherPublicKey))
49- then true
50- else sigVerify(tx.bodyBytes, tx.proofs[1], otherPublicKey))
51- then true
52- else sigVerify(tx.bodyBytes, tx.proofs[2], otherPublicKey)
53- let account1account2 = if (account1)
54- then account2
55- else false
56- let account1other = if (account1)
57- then other
58- else false
59- let account2other = if (other)
60- then account2
61- else false
105+ let signature = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
62106 match tx {
63107 case d: SetScriptTransaction =>
64- true
108+ signature
65109 case d: DataTransaction =>
66- true
110+ signature
67111 case _ =>
68- if (if (account1account2)
69- then true
70- else account1other)
71- then true
72- else account2other
112+ signature
73113 }
74114 }
75115
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let account1PublicKey = base58'HfLpRhXtnuCabRyNT6z7soaXcbUpwLUhjyBCVQ4szwzd'
55
66 let account2PublicKey = base58'2qjcWuL7QitmuhkSTM7CnNxurCYXuqJ9ubswLBGmXfDv'
77
88 let otherPublicKey = base58'GaQkBG6yLLAarb8wvPrEKnQhFqWomD2ZGT1T4vVx24qw'
9+
10+let NONE = "none"
11+
12+func getNumberByKey (key) = {
13+ let num = match getInteger(this, key) {
14+ case a: Int =>
15+ a
16+ case _ =>
17+ 0
18+ }
19+ num
20+ }
21+
22+
23+func getStrByKey (key) = {
24+ let str = match getString(this, key) {
25+ case a: String =>
26+ a
27+ case _ =>
28+ NONE
29+ }
30+ str
31+ }
32+
33+
34+func getKeyItemPrice (item) = (item + "_price")
35+
36+
37+func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
38+
39+
40+func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
41+
42+
43+func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
44+
45+
46+func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
47+
48+
49+func getKeyItemData (item) = (item + "_data")
50+
51+
52+func getKeyItemSupplier (item) = (item + "_owner")
53+
54+
55+func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
56+
57+
58+func getKeyBalanceSupplier (account) = (account + "_balance")
59+
60+
61+func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
62+
963
1064 @Callable(i)
1165 func purchase (coupon) = {
1266 let pmt = value(i.payments)
1367 if (isDefined(pmt[0].assetId))
1468 then throw("only wws")
1569 else {
1670 let customerAddress = toBase58String(i.caller.bytes)
1771 let price = match getInteger(this, (coupon + "_coupon_price")) {
1872 case a: Int =>
1973 a
2074 case _ =>
2175 0
2276 }
2377 if ((price == 0))
2478 then throw("coupon not found")
2579 else if ((price > pmt[0].amount))
2680 then throw("moar moeny")
2781 else if ((pmt[0].amount > price))
2882 then throw(toString(price))
2983 else if ((size(pmt) > 1))
3084 then throw("single item only")
3185 else [StringEntry(((("status:purchase_" + coupon) + "_customer_") + customerAddress), "confirmed"), IntegerEntry(((("price:purchase_" + coupon) + "_customer_") + customerAddress), price)]
3286 }
3387 }
3488
3589
90+
91+@Callable(i)
92+func addItem (title,price,data) = {
93+ let supplierAddress = toBase58String(i.caller.bytes)
94+ let item = getKeyItem(supplierAddress, title)
95+ if ((0 >= price))
96+ then throw("purchase amount cannot be less than item price")
97+ else if ((getValueItemSupplier(item) != NONE))
98+ then throw("an item already exist")
99+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
100+ }
101+
102+
36103 @Verifier(tx)
37104 func verify () = {
38- let account1 = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], account1PublicKey))
39- then true
40- else sigVerify(tx.bodyBytes, tx.proofs[1], account1PublicKey))
41- then true
42- else sigVerify(tx.bodyBytes, tx.proofs[2], account1PublicKey)
43- let account2 = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], account2PublicKey))
44- then true
45- else sigVerify(tx.bodyBytes, tx.proofs[1], account2PublicKey))
46- then true
47- else sigVerify(tx.bodyBytes, tx.proofs[2], account2PublicKey)
48- let other = if (if (sigVerify(tx.bodyBytes, tx.proofs[0], otherPublicKey))
49- then true
50- else sigVerify(tx.bodyBytes, tx.proofs[1], otherPublicKey))
51- then true
52- else sigVerify(tx.bodyBytes, tx.proofs[2], otherPublicKey)
53- let account1account2 = if (account1)
54- then account2
55- else false
56- let account1other = if (account1)
57- then other
58- else false
59- let account2other = if (other)
60- then account2
61- else false
105+ let signature = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
62106 match tx {
63107 case d: SetScriptTransaction =>
64- true
108+ signature
65109 case d: DataTransaction =>
66- true
110+ signature
67111 case _ =>
68- if (if (account1account2)
69- then true
70- else account1other)
71- then true
72- else account2other
112+ signature
73113 }
74114 }
75115

github/deemru/w8io/169f3d6 
37.96 ms