-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
events_api.ts
91 lines (82 loc) · 2.58 KB
/
events_api.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
This file is part of web3.js.
web3.js is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
web3.js is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
*/
/**
*
* @module ABI
*/
import { sha3Raw } from 'web3-utils';
import { AbiError } from 'web3-errors';
import { AbiEventFragment } from 'web3-types';
import { jsonInterfaceMethodToString, isAbiEventFragment } from '../utils.js';
/**
* Encodes the event name to its ABI signature, which are the sha3 hash of the event name including input types.
* @param functionName - The event name to encode, or the {@link AbiEventFragment} object of the event. If string, it has to be in the form of `eventName(param1Type,param2Type,...)`. eg: myEvent(uint256,bytes32).
* @returns - The ABI signature of the event.
*
* @example
* ```ts
* const event = web3.eth.abi.encodeEventSignature({
* name: "myEvent",
* type: "event",
* inputs: [
* {
* type: "uint256",
* name: "myNumber",
* },
* {
* type: "bytes32",
* name: "myBytes",
* },
* ],
* });
* console.log(event);
* > 0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97
*
* const event = web3.eth.abi.encodeEventSignature({
* inputs: [
* {
* indexed: true,
* name: "from",
* type: "address",
* },
* {
* indexed: true,
* name: "to",
* type: "address",
* },
* {
* indexed: false,
* name: "value",
* type: "uint256",
* },
* ],
* name: "Transfer",
* type: "event",
* });
* console.log(event);
* > 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
* ```
*/
export const encodeEventSignature = (functionName: string | AbiEventFragment): string => {
if (typeof functionName !== 'string' && !isAbiEventFragment(functionName)) {
throw new AbiError('Invalid parameter value in encodeEventSignature');
}
let name: string;
if (functionName && (typeof functionName === 'function' || typeof functionName === 'object')) {
name = jsonInterfaceMethodToString(functionName);
} else {
name = functionName;
}
return sha3Raw(name);
};