2021.02.09 17:42 [2454539] smart account 3PBJEjEMChjz2Dqb2p8imtoHTy5R51JnPTJ > SELF 0.00000000 Waves

{ "type": 13, "id": "4QWeFFLqtMXhEyJkSvr4UEV2gRBdHWa4UAHKVdCX9Bzu", "fee": 1400000, "feeAssetId": null, "timestamp": 1612881711337, "version": 1, "sender": "3PBJEjEMChjz2Dqb2p8imtoHTy5R51JnPTJ", "senderPublicKey": "8fZ4xgHEqgjAbdpWoDJYPtVNwuHyJXgQN4HWxed9S8nr", "proofs": [ "2wesAmNo3VDCfpmM5jnxx72f3ktaP6LfmD4CZNQ8Gv344PZGr1WUkKkZoAvXmhyvZfGQT4cbxb79JTrWgbrPVKH6", "5vg9Er8C9R6CdaBygq94BtAjZ8FFvQV6w2Fy9w3WgD4V5ksmkq2gP3QDxmzcrv7Uhjq8Adjva3CYAUmMpHfnAte7", "vzFtNmp6ZVtdQPwbKQNzZKGpNU3TZUPraMMtxCC1r9oGd7t39Yk8Ccu4htjymcQ9umE2kSCM7uosnd4rPJABZUc" ], "script": "base64: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dEFzc2V0RW50cnkJAAQaAAAAAgkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEFAAAAE3doaXRlbGlzdEFkZHJlc3NLZXkFAAAAD3doaXRlMUxpc3RBc3NldAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAFHdoaXRlMUxpc3RBc3NldEVudHJ5BAAAABZ3aGl0ZTFMaXN0T3ZlcmFsbEVudHJ5CQAEGgAAAAIJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABBQAAABN3aGl0ZWxpc3RBZGRyZXNzS2V5BQAAABF3aGl0ZTFMaXN0T3ZlcmFsbAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAFndoaXRlMUxpc3RPdmVyYWxsRW50cnkGBAAAAAtjdXIxQmFsYW5jZQkAA+sAAAACCAUAAAACdHgAAAAGc2VuZGVyCAUAAAACdHgAAAAHYXNzZXRJZAMJAABmAAAAAgkBAAAAB2V4dHJhY3QAAAABBQAAABZ3aGl0ZTFMaXN0T3ZlcmFsbEVudHJ5CQAAZQAAAAIFAAAAC2N1cjFCYWxhbmNlCAUAAAACdHgAAAAGYW1vdW50CQAAAgAAAAECAAAAKCMwMDYgVW5hYmxlIHRvIHNlbmQgc3VjaCBhbW91bnQgKHR5cGU9MSkGBAAAAAtjdXIxQmFsYW5jZQkAA+sAAAACCAUAAAACdHgAAAAGc2VuZGVyCAUAAAACdHgAAAAHYXNzZXRJZAMJAABmAAAAAgkBAAAAB2V4dHJhY3QAAAABBQAAABR3aGl0ZTFMaXN0QXNzZXRFbnRyeQkAAGUAAAACBQAAAAtjdXIxQmFsYW5jZQgFAAAAAnR4AAAABmFtb3VudAkAAAIAAAABAgAAACgjMDA3IFVuYWJsZSB0byBzZW5kIHN1Y2ggYW1vdW50ICh0eXBlPTIpBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwBAAAAAR0eElkCQACWAAAAAEIBQAAAAJ0eAAAAAJpZAQAAAAJcEFkZHJlc3MxCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MxBAAAAAlwQWRkcmVzczIJ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", "chainId": 87, "height": 2454539, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dd9vXasML45YAdsF2X4jbhoeCtCRAiCAic1Vw7nYr6Uf Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let matcherAddress = addressFromString("3PJjwFREg8F9V6Cp9fnUuEwRts6HQQa5nfP")
4-let matcherPublicKey = base58'E3UwaHCQCySghK3zwNB8EDHoc3b8uhzGPFz3gHmWon4W'
5-let gatewayAddress = addressFromString("3P9Typ8Wnoxt719juABnCeErU5wAvfcXAU9")
6-let whitelistAddress = addressFromString("3P87HeVEvJ8xWiQW6N3fpCBHMxwczeGqyqD")
7-let dAppWhitelistAddress = Address(base58'3PLnxdrGeK8e3uw5GigpZhRvkjSnwnt7Sgz')
8-let gatewayControlAssetAddress = base58'J6spRevsYuwKEHgzyPfojvdBPq67C8yvErr6e9ny8Jom'
9-let pAddress1 = addressFromString("3PAxCJyfkGf2ZHiDKXwtGuJdcsF63577Eij")
10-let pAddress2 = addressFromString("3PEhJsyTQBumkG4BHHZihss4NT1bQ4iYwxB")
11-let pAddress3 = addressFromString("3PQnpFrCL3LSdRL7AYk5tZa5uYXYgVfw7Ao")
12-let pAddress4 = addressFromString("3PJq18MXiNuWXHUBeRoaip2sRZSV8yjKiU8")
13-let pAddress5 = addressFromString("3PCQhaLop9UeTMD94KLZJd947NBLKn3nGVK")
3+let addressBook = Address(base58'3PQnTVr1QV9NAyfJkco7ZittcXf53NjeJg8')
4+let whitelistAddressKey = "whitelistAddress"
5+let dAppWhitelistAddressKey = "dAppWhitelistAddress"
6+let matcherAddressKey = "matcherAddress"
7+let gatewayAddressKey = "gatewayAddress"
8+let gatewayControlAssetKey = "gatewayControlAsset"
149 let validState = 1000
15-let ver = "2.0.0-account"
10+let ver = "5.0.2"
11+func getAddressFromBook (key) = match getString(addressBook, key) {
12+ case a: String =>
13+ Address(fromBase58String(a))
14+ case _ =>
15+ throw("#008 no key")
16+}
17+
18+func getAssetFromAddressBook () = match getString(extract(addressBook), gatewayControlAssetKey) {
19+ case a: String =>
20+ toBytes(a)
21+ case _ =>
22+ throw("#009 no key")
23+}
24+
1625 match tx {
1726 case o: Order =>
1827 if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
19- then (o.matcherPublicKey == matcherPublicKey)
28+ then (addressFromPublicKey(o.matcherPublicKey) == getAddressFromBook(matcherAddressKey))
2029 else false
2130 case tx: TransferTransaction =>
2231 if (!(sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)))
23- then throw("Transaction must be signed by owner")
32+ then throw("#001 Transaction must be signed by owner")
2433 else {
25- let userState = getInteger(extract(whitelistAddress), toBase58String(tx.sender.bytes))
34+ let userState = getInteger(getAddressFromBook(whitelistAddressKey), toBase58String(tx.sender.bytes))
2635 if (!(isDefined(userState)))
27- then throw("Address not in whitelist")
36+ then throw("#002 Address not in whitelist")
2837 else if ((userState != validState))
29- then throw("User not in valid state")
38+ then throw("#003 User not in valid state")
3039 else if (!(isDefined(tx.assetId)))
3140 then {
3241 let key = (toBase58String(tx.sender.bytes) + "_WAVES")
33- let minAmount = getInteger(extract(whitelistAddress), key)
42+ let minAmount = getInteger(getAddressFromBook(whitelistAddressKey), key)
3443 if (isDefined(minAmount))
3544 then {
3645 let curBalance = wavesBalance(extract(tx.sender))
3746 if ((extract(minAmount) > (curBalance - tx.amount)))
38- then throw("Unable to send such amount (type=2)")
47+ then throw("#004 Unable to send such amount (type=2)")
3948 else true
4049 }
4150 else {
4251 let keyOverall = "res_WAVES"
43- let minAmountOverall = getInteger(extract(whitelistAddress), keyOverall)
52+ let minAmountOverall = getInteger(getAddressFromBook(whitelistAddressKey), keyOverall)
4453 if (isDefined(minAmountOverall))
4554 then {
4655 let curBalance = wavesBalance(extract(tx.sender))
4756 if ((extract(minAmountOverall) > (curBalance - tx.amount)))
48- then throw("Unable to send such amount (type=1)")
57+ then throw("#005 Unable to send such amount (type=1)")
4958 else true
5059 }
5160 else true
5261 }
5362 }
54- else if ((tx.assetId == gatewayControlAssetAddress))
55- then (tx.recipient == gatewayAddress)
63+ else if ((tx.assetId == getAssetFromAddressBook()))
64+ then (tx.recipient == getAddressFromBook(gatewayAddressKey))
5665 else {
5766 let white1List = toBase58String(tx.sender.bytes)
5867 let assetTxt = toBase58String(extract(tx.assetId))
5968 let white1ListAsset = ((white1List + "_") + assetTxt)
6069 let white1ListOverall = ("res_" + assetTxt)
61- let white1ListAssetEntry = getInteger(extract(whitelistAddress), white1ListAsset)
70+ let white1ListAssetEntry = getInteger(getAddressFromBook(whitelistAddressKey), white1ListAsset)
6271 if (!(isDefined(white1ListAssetEntry)))
6372 then {
64- let white1ListOverallEntry = getInteger(extract(whitelistAddress), white1ListOverall)
73+ let white1ListOverallEntry = getInteger(getAddressFromBook(whitelistAddressKey), white1ListOverall)
6574 if (!(isDefined(white1ListOverallEntry)))
6675 then true
6776 else {
6877 let cur1Balance = assetBalance(tx.sender, tx.assetId)
6978 if ((extract(white1ListOverallEntry) > (cur1Balance - tx.amount)))
70- then throw("Unable to send such amount (type=1)")
79+ then throw("#006 Unable to send such amount (type=1)")
7180 else true
7281 }
7382 }
7483 else {
7584 let cur1Balance = assetBalance(tx.sender, tx.assetId)
7685 if ((extract(white1ListAssetEntry) > (cur1Balance - tx.amount)))
77- then throw("Unable to send such amount (type=2)")
86+ then throw("#007 Unable to send such amount (type=2)")
7887 else true
7988 }
8089 }
8190 }
8291 case tx: SetScriptTransaction =>
83- let pKey1Signed = if (isDefined(getInteger(extract(pAddress1), toBase58String(tx.id))))
92+ let txId = toBase58String(tx.id)
93+ let pAddress1 = getAddressFromBook("pAddress1")
94+ let pAddress2 = getAddressFromBook("pAddress2")
95+ let pAddress3 = getAddressFromBook("pAddress3")
96+ let pAddress4 = getAddressFromBook("pAddress4")
97+ let pAddress5 = getAddressFromBook("pAddress5")
98+ let pAddress6 = getAddressFromBook("pAddress6")
99+ let pAddress7 = getAddressFromBook("pAddress7")
100+ let pAddress8 = getAddressFromBook("pAddress8")
101+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
84102 then 1
85103 else 0
86- let pKey2Signed = if (isDefined(getInteger(extract(pAddress2), toBase58String(tx.id))))
104+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
87105 then 1
88106 else 0
89- let pKey3Signed = if (isDefined(getInteger(extract(pAddress3), toBase58String(tx.id))))
107+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
90108 then 1
91109 else 0
92- let pKey4Signed = if (isDefined(getInteger(extract(pAddress4), toBase58String(tx.id))))
110+ let pKey4Signed = if (isDefined(getInteger(pAddress4, txId)))
93111 then 1
94112 else 0
95- let pKey5Signed = if (isDefined(getInteger(extract(pAddress5), toBase58String(tx.id))))
113+ let pKey5Signed = if (isDefined(getInteger(pAddress5, txId)))
96114 then 1
97115 else 0
98- (((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) >= 3)
99- case tx: LeaseTransaction =>
116+ let pKey6Signed = if (isDefined(getInteger(pAddress6, txId)))
117+ then 1
118+ else 0
119+ let pKey7Signed = if (isDefined(getInteger(pAddress7, txId)))
120+ then 1
121+ else 0
122+ let pKey8Signed = if (isDefined(getInteger(pAddress8, txId)))
123+ then 1
124+ else 0
125+ ((((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) + pKey7Signed) + pKey8Signed) >= 3)
126+ case _: LeaseTransaction =>
100127 false
101- case tx: SponsorFeeTransaction =>
128+ case _: SponsorFeeTransaction =>
102129 false
103- case tx: MassTransferTransaction =>
130+ case _: MassTransferTransaction =>
104131 false
105- case tx: IssueTransaction =>
132+ case _: IssueTransaction =>
106133 false
107- case tx: ReissueTransaction =>
134+ case _: ReissueTransaction =>
108135 false
109- case tx: BurnTransaction =>
136+ case _: BurnTransaction =>
110137 false
111- case tx: ExchangeTransaction =>
138+ case _: ExchangeTransaction =>
112139 false
113140 case tx: InvokeScriptTransaction =>
114- match tx.payment {
115- case a: AttachedPayment =>
116- match getInteger(dAppWhitelistAddress, toBase58String(addressFromRecipient(tx.dApp).bytes)) {
117- case unused: Int =>
141+ let isSigned = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
142+ let payment = match tx.payment {
143+ case _: AttachedPayment =>
144+ match getInteger(getAddressFromBook(dAppWhitelistAddressKey), toBase58String(addressFromRecipient(tx.dApp).bytes)) {
145+ case _: Int =>
118146 true
119147 case _ =>
120148 false
122150 case _ =>
123151 true
124152 }
153+ if (isSigned)
154+ then payment
155+ else false
125156 case _ =>
126157 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
127158 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let matcherAddress = addressFromString("3PJjwFREg8F9V6Cp9fnUuEwRts6HQQa5nfP")
4-let matcherPublicKey = base58'E3UwaHCQCySghK3zwNB8EDHoc3b8uhzGPFz3gHmWon4W'
5-let gatewayAddress = addressFromString("3P9Typ8Wnoxt719juABnCeErU5wAvfcXAU9")
6-let whitelistAddress = addressFromString("3P87HeVEvJ8xWiQW6N3fpCBHMxwczeGqyqD")
7-let dAppWhitelistAddress = Address(base58'3PLnxdrGeK8e3uw5GigpZhRvkjSnwnt7Sgz')
8-let gatewayControlAssetAddress = base58'J6spRevsYuwKEHgzyPfojvdBPq67C8yvErr6e9ny8Jom'
9-let pAddress1 = addressFromString("3PAxCJyfkGf2ZHiDKXwtGuJdcsF63577Eij")
10-let pAddress2 = addressFromString("3PEhJsyTQBumkG4BHHZihss4NT1bQ4iYwxB")
11-let pAddress3 = addressFromString("3PQnpFrCL3LSdRL7AYk5tZa5uYXYgVfw7Ao")
12-let pAddress4 = addressFromString("3PJq18MXiNuWXHUBeRoaip2sRZSV8yjKiU8")
13-let pAddress5 = addressFromString("3PCQhaLop9UeTMD94KLZJd947NBLKn3nGVK")
3+let addressBook = Address(base58'3PQnTVr1QV9NAyfJkco7ZittcXf53NjeJg8')
4+let whitelistAddressKey = "whitelistAddress"
5+let dAppWhitelistAddressKey = "dAppWhitelistAddress"
6+let matcherAddressKey = "matcherAddress"
7+let gatewayAddressKey = "gatewayAddress"
8+let gatewayControlAssetKey = "gatewayControlAsset"
149 let validState = 1000
15-let ver = "2.0.0-account"
10+let ver = "5.0.2"
11+func getAddressFromBook (key) = match getString(addressBook, key) {
12+ case a: String =>
13+ Address(fromBase58String(a))
14+ case _ =>
15+ throw("#008 no key")
16+}
17+
18+func getAssetFromAddressBook () = match getString(extract(addressBook), gatewayControlAssetKey) {
19+ case a: String =>
20+ toBytes(a)
21+ case _ =>
22+ throw("#009 no key")
23+}
24+
1625 match tx {
1726 case o: Order =>
1827 if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
19- then (o.matcherPublicKey == matcherPublicKey)
28+ then (addressFromPublicKey(o.matcherPublicKey) == getAddressFromBook(matcherAddressKey))
2029 else false
2130 case tx: TransferTransaction =>
2231 if (!(sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)))
23- then throw("Transaction must be signed by owner")
32+ then throw("#001 Transaction must be signed by owner")
2433 else {
25- let userState = getInteger(extract(whitelistAddress), toBase58String(tx.sender.bytes))
34+ let userState = getInteger(getAddressFromBook(whitelistAddressKey), toBase58String(tx.sender.bytes))
2635 if (!(isDefined(userState)))
27- then throw("Address not in whitelist")
36+ then throw("#002 Address not in whitelist")
2837 else if ((userState != validState))
29- then throw("User not in valid state")
38+ then throw("#003 User not in valid state")
3039 else if (!(isDefined(tx.assetId)))
3140 then {
3241 let key = (toBase58String(tx.sender.bytes) + "_WAVES")
33- let minAmount = getInteger(extract(whitelistAddress), key)
42+ let minAmount = getInteger(getAddressFromBook(whitelistAddressKey), key)
3443 if (isDefined(minAmount))
3544 then {
3645 let curBalance = wavesBalance(extract(tx.sender))
3746 if ((extract(minAmount) > (curBalance - tx.amount)))
38- then throw("Unable to send such amount (type=2)")
47+ then throw("#004 Unable to send such amount (type=2)")
3948 else true
4049 }
4150 else {
4251 let keyOverall = "res_WAVES"
43- let minAmountOverall = getInteger(extract(whitelistAddress), keyOverall)
52+ let minAmountOverall = getInteger(getAddressFromBook(whitelistAddressKey), keyOverall)
4453 if (isDefined(minAmountOverall))
4554 then {
4655 let curBalance = wavesBalance(extract(tx.sender))
4756 if ((extract(minAmountOverall) > (curBalance - tx.amount)))
48- then throw("Unable to send such amount (type=1)")
57+ then throw("#005 Unable to send such amount (type=1)")
4958 else true
5059 }
5160 else true
5261 }
5362 }
54- else if ((tx.assetId == gatewayControlAssetAddress))
55- then (tx.recipient == gatewayAddress)
63+ else if ((tx.assetId == getAssetFromAddressBook()))
64+ then (tx.recipient == getAddressFromBook(gatewayAddressKey))
5665 else {
5766 let white1List = toBase58String(tx.sender.bytes)
5867 let assetTxt = toBase58String(extract(tx.assetId))
5968 let white1ListAsset = ((white1List + "_") + assetTxt)
6069 let white1ListOverall = ("res_" + assetTxt)
61- let white1ListAssetEntry = getInteger(extract(whitelistAddress), white1ListAsset)
70+ let white1ListAssetEntry = getInteger(getAddressFromBook(whitelistAddressKey), white1ListAsset)
6271 if (!(isDefined(white1ListAssetEntry)))
6372 then {
64- let white1ListOverallEntry = getInteger(extract(whitelistAddress), white1ListOverall)
73+ let white1ListOverallEntry = getInteger(getAddressFromBook(whitelistAddressKey), white1ListOverall)
6574 if (!(isDefined(white1ListOverallEntry)))
6675 then true
6776 else {
6877 let cur1Balance = assetBalance(tx.sender, tx.assetId)
6978 if ((extract(white1ListOverallEntry) > (cur1Balance - tx.amount)))
70- then throw("Unable to send such amount (type=1)")
79+ then throw("#006 Unable to send such amount (type=1)")
7180 else true
7281 }
7382 }
7483 else {
7584 let cur1Balance = assetBalance(tx.sender, tx.assetId)
7685 if ((extract(white1ListAssetEntry) > (cur1Balance - tx.amount)))
77- then throw("Unable to send such amount (type=2)")
86+ then throw("#007 Unable to send such amount (type=2)")
7887 else true
7988 }
8089 }
8190 }
8291 case tx: SetScriptTransaction =>
83- let pKey1Signed = if (isDefined(getInteger(extract(pAddress1), toBase58String(tx.id))))
92+ let txId = toBase58String(tx.id)
93+ let pAddress1 = getAddressFromBook("pAddress1")
94+ let pAddress2 = getAddressFromBook("pAddress2")
95+ let pAddress3 = getAddressFromBook("pAddress3")
96+ let pAddress4 = getAddressFromBook("pAddress4")
97+ let pAddress5 = getAddressFromBook("pAddress5")
98+ let pAddress6 = getAddressFromBook("pAddress6")
99+ let pAddress7 = getAddressFromBook("pAddress7")
100+ let pAddress8 = getAddressFromBook("pAddress8")
101+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
84102 then 1
85103 else 0
86- let pKey2Signed = if (isDefined(getInteger(extract(pAddress2), toBase58String(tx.id))))
104+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
87105 then 1
88106 else 0
89- let pKey3Signed = if (isDefined(getInteger(extract(pAddress3), toBase58String(tx.id))))
107+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
90108 then 1
91109 else 0
92- let pKey4Signed = if (isDefined(getInteger(extract(pAddress4), toBase58String(tx.id))))
110+ let pKey4Signed = if (isDefined(getInteger(pAddress4, txId)))
93111 then 1
94112 else 0
95- let pKey5Signed = if (isDefined(getInteger(extract(pAddress5), toBase58String(tx.id))))
113+ let pKey5Signed = if (isDefined(getInteger(pAddress5, txId)))
96114 then 1
97115 else 0
98- (((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) >= 3)
99- case tx: LeaseTransaction =>
116+ let pKey6Signed = if (isDefined(getInteger(pAddress6, txId)))
117+ then 1
118+ else 0
119+ let pKey7Signed = if (isDefined(getInteger(pAddress7, txId)))
120+ then 1
121+ else 0
122+ let pKey8Signed = if (isDefined(getInteger(pAddress8, txId)))
123+ then 1
124+ else 0
125+ ((((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) + pKey7Signed) + pKey8Signed) >= 3)
126+ case _: LeaseTransaction =>
100127 false
101- case tx: SponsorFeeTransaction =>
128+ case _: SponsorFeeTransaction =>
102129 false
103- case tx: MassTransferTransaction =>
130+ case _: MassTransferTransaction =>
104131 false
105- case tx: IssueTransaction =>
132+ case _: IssueTransaction =>
106133 false
107- case tx: ReissueTransaction =>
134+ case _: ReissueTransaction =>
108135 false
109- case tx: BurnTransaction =>
136+ case _: BurnTransaction =>
110137 false
111- case tx: ExchangeTransaction =>
138+ case _: ExchangeTransaction =>
112139 false
113140 case tx: InvokeScriptTransaction =>
114- match tx.payment {
115- case a: AttachedPayment =>
116- match getInteger(dAppWhitelistAddress, toBase58String(addressFromRecipient(tx.dApp).bytes)) {
117- case unused: Int =>
141+ let isSigned = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
142+ let payment = match tx.payment {
143+ case _: AttachedPayment =>
144+ match getInteger(getAddressFromBook(dAppWhitelistAddressKey), toBase58String(addressFromRecipient(tx.dApp).bytes)) {
145+ case _: Int =>
118146 true
119147 case _ =>
120148 false
121149 }
122150 case _ =>
123151 true
124152 }
153+ if (isSigned)
154+ then payment
155+ else false
125156 case _ =>
126157 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
127158 }

github/deemru/w8io/786bc32 
68.28 ms