1 | class ContractABI {
|
2 | constructor(contract) {
|
3 | this.contract = contract;
|
4 | }
|
5 |
|
6 | decodeData(data) {
|
7 | let method = this.contract[data.slice(0, 10)];
|
8 | if (!method && data.startsWith(this.contract.constructor.bytecode)) {
|
9 | method = this.contract.constructor;
|
10 | }
|
11 | if (!method) {
|
12 | return undefined;
|
13 | }
|
14 |
|
15 | const tuple = method.decodeData(data);
|
16 | return {
|
17 | name: method.name,
|
18 | fullName: method.fullName,
|
19 | type: method.type,
|
20 | signature: method.signature,
|
21 | array: [...tuple],
|
22 | object: tuple.toObject(),
|
23 | };
|
24 | }
|
25 |
|
26 | decodeLog(log) {
|
27 | const event = this.contract[log.topics[0]];
|
28 | if (!event) {
|
29 | return undefined;
|
30 | }
|
31 |
|
32 | const tuple = event.decodeLog(log);
|
33 | return {
|
34 | name: event.name,
|
35 | fullName: event.fullName,
|
36 | type: event.type,
|
37 | signature: event.signature,
|
38 | array: [...tuple],
|
39 | object: tuple.toObject(),
|
40 | };
|
41 | }
|
42 | }
|
43 |
|
44 | module.exports = ContractABI;
|