forked from evmts/tevm-monorepo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEIP1193.ts
98 lines (85 loc) · 2.83 KB
/
EIP1193.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
92
93
94
95
96
97
98
import type {
AnvilJsonRpcRequest,
DebugJsonRpcRequest,
EthJsonRpcRequest,
TevmJsonRpcRequest,
} from '../index.js'
/**
* Options for the EIP1193 request handler
* @see
*/
export interface EIP1193RequestOptions {
// The base delay (in ms) between retries.
retryDelay?: number
// The max number of times to retry.
retryCount?: number
}
export type TevmRequest =
| TevmJsonRpcRequest
| EthJsonRpcRequest
| AnvilJsonRpcRequest
| DebugJsonRpcRequest
export type TevmEIP1193RequestFn<
TParameters extends TevmRequest['params'] = TevmRequest['params'],
> = (
args: {
params: TParameters
method: TevmRequest['method']
},
options?: EIP1193RequestOptions,
) => Promise<unknown>
// EIP-1193: Ethereum Provider JavaScript API
// Interface for the Provider
// Interface for request arguments
export interface RequestArguments {
method: string
params?: readonly unknown[] | object
}
// Interface for the ProviderRpcError as specified
export interface ProviderRpcError extends Error {
code: number
data?: unknown
}
// Interface for the 'connect' event information
export interface ProviderConnectInfo {
chainId: string // Specifies the integer ID of the connected chain as a hexadecimal string
}
// Interface for the 'message' event information
export interface ProviderMessage {
type: string
data: unknown
}
// Interface for the Ethereum subscription message (e.g., from eth_subscribe)
export interface EthSubscription extends ProviderMessage {
type: 'eth_subscription'
data: {
subscription: string
result: unknown
}
}
// Define event listener types for specific events
export type ConnectListener = (connectInfo: ProviderConnectInfo) => void
export type DisconnectListener = (error: ProviderRpcError) => void
export type ChainChangedListener = (chainId: string) => void
export type AccountsChangedListener = (accounts: string[]) => void
export type MessageListener = (message: ProviderMessage) => void
export type NewBlockListener = (blockNumber: string) => void
export interface TevmEIP1193Provider {
request: TevmEIP1193RequestFn
on(event: 'connect', listener: ConnectListener): this
on(event: 'disconnect', listener: DisconnectListener): this
// never happens included for compatibility
on(event: 'chainChanged', listener: ChainChangedListener): this
// never happens included for compatibility
on(event: 'accountsChanged', listener: AccountsChangedListener): this
on(event: 'message', listener: MessageListener): this
on(event: 'newBlock', listener: NewBlockListener): this
removeListener(event: 'connect', listener: ConnectListener): this
removeListener(event: 'disconnect', listener: DisconnectListener): this
removeListener(event: 'chainChanged', listener: ChainChangedListener): this
removeListener(
event: 'accountsChanged',
listener: AccountsChangedListener,
): this
removeListener(event: 'message', listener: MessageListener): this
}