viem 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +6 -0
  2. package/dist/cjs/accounts/index.js +1 -1
  3. package/dist/cjs/accounts/index.js.map +1 -1
  4. package/dist/cjs/accounts/utils/signMessage.js +1 -1
  5. package/dist/cjs/accounts/utils/signMessage.js.map +1 -1
  6. package/dist/cjs/accounts/utils/signTypedData.js +1 -1
  7. package/dist/cjs/accounts/utils/signTypedData.js.map +1 -1
  8. package/dist/cjs/actions/index.js.map +1 -1
  9. package/dist/cjs/actions/public/createContractEventFilter.js.map +1 -1
  10. package/dist/cjs/actions/public/createEventFilter.js +16 -8
  11. package/dist/cjs/actions/public/createEventFilter.js.map +1 -1
  12. package/dist/cjs/actions/public/getBlock.js +3 -1
  13. package/dist/cjs/actions/public/getBlock.js.map +1 -1
  14. package/dist/cjs/actions/public/getBlockNumber.js +2 -2
  15. package/dist/cjs/actions/public/getBlockNumber.js.map +1 -1
  16. package/dist/cjs/actions/public/getFilterChanges.js.map +1 -1
  17. package/dist/cjs/actions/public/getFilterLogs.js +1 -1
  18. package/dist/cjs/actions/public/getFilterLogs.js.map +1 -1
  19. package/dist/cjs/actions/public/getLogs.js +16 -10
  20. package/dist/cjs/actions/public/getLogs.js.map +1 -1
  21. package/dist/cjs/actions/public/getTransaction.js +2 -1
  22. package/dist/cjs/actions/public/getTransaction.js.map +1 -1
  23. package/dist/cjs/actions/public/watchBlockNumber.js +1 -1
  24. package/dist/cjs/actions/public/watchBlockNumber.js.map +1 -1
  25. package/dist/cjs/actions/public/watchBlocks.js +2 -1
  26. package/dist/cjs/actions/public/watchBlocks.js.map +1 -1
  27. package/dist/cjs/actions/public/watchContractEvent.js.map +1 -1
  28. package/dist/cjs/actions/public/watchEvent.js +4 -2
  29. package/dist/cjs/actions/public/watchEvent.js.map +1 -1
  30. package/dist/cjs/clients/createClient.js +2 -1
  31. package/dist/cjs/clients/createClient.js.map +1 -1
  32. package/dist/cjs/clients/createPublicClient.js.map +1 -1
  33. package/dist/cjs/clients/createTestClient.js.map +1 -1
  34. package/dist/cjs/clients/createWalletClient.js.map +1 -1
  35. package/dist/cjs/clients/decorators/public.js.map +1 -1
  36. package/dist/cjs/constants/number.js +101 -0
  37. package/dist/cjs/constants/number.js.map +1 -0
  38. package/dist/cjs/contract.js.map +1 -1
  39. package/dist/cjs/errors/abi.js +8 -1
  40. package/dist/cjs/errors/abi.js.map +1 -1
  41. package/dist/cjs/errors/contract.js +56 -32
  42. package/dist/cjs/errors/contract.js.map +1 -1
  43. package/dist/cjs/errors/version.js +1 -1
  44. package/dist/cjs/index.js +110 -7
  45. package/dist/cjs/index.js.map +1 -1
  46. package/dist/cjs/public.js.map +1 -1
  47. package/dist/cjs/utils/formatters/block.js.map +1 -1
  48. package/dist/cjs/utils/formatters/formatter.js +1 -0
  49. package/dist/cjs/utils/formatters/formatter.js.map +1 -1
  50. package/dist/cjs/utils/formatters/transaction.js.map +1 -1
  51. package/dist/cjs/utils/promise/withCache.js +3 -3
  52. package/dist/cjs/utils/promise/withCache.js.map +1 -1
  53. package/dist/cjs/utils/signature/hexToSignature.js +12 -0
  54. package/dist/cjs/utils/signature/hexToSignature.js.map +1 -0
  55. package/dist/cjs/utils/signature/signatureToHex.js.map +1 -0
  56. package/dist/esm/accounts/index.js +1 -1
  57. package/dist/esm/accounts/index.js.map +1 -1
  58. package/dist/esm/accounts/utils/signMessage.js +1 -1
  59. package/dist/esm/accounts/utils/signMessage.js.map +1 -1
  60. package/dist/esm/accounts/utils/signTypedData.js +1 -1
  61. package/dist/esm/accounts/utils/signTypedData.js.map +1 -1
  62. package/dist/esm/actions/index.js.map +1 -1
  63. package/dist/esm/actions/public/createContractEventFilter.js.map +1 -1
  64. package/dist/esm/actions/public/createEventFilter.js +16 -8
  65. package/dist/esm/actions/public/createEventFilter.js.map +1 -1
  66. package/dist/esm/actions/public/getBlock.js +3 -1
  67. package/dist/esm/actions/public/getBlock.js.map +1 -1
  68. package/dist/esm/actions/public/getBlockNumber.js +2 -2
  69. package/dist/esm/actions/public/getBlockNumber.js.map +1 -1
  70. package/dist/esm/actions/public/getFilterChanges.js.map +1 -1
  71. package/dist/esm/actions/public/getFilterLogs.js +1 -1
  72. package/dist/esm/actions/public/getFilterLogs.js.map +1 -1
  73. package/dist/esm/actions/public/getLogs.js +16 -10
  74. package/dist/esm/actions/public/getLogs.js.map +1 -1
  75. package/dist/esm/actions/public/getTransaction.js +2 -1
  76. package/dist/esm/actions/public/getTransaction.js.map +1 -1
  77. package/dist/esm/actions/public/watchBlockNumber.js +1 -1
  78. package/dist/esm/actions/public/watchBlockNumber.js.map +1 -1
  79. package/dist/esm/actions/public/watchBlocks.js +2 -1
  80. package/dist/esm/actions/public/watchBlocks.js.map +1 -1
  81. package/dist/esm/actions/public/watchContractEvent.js.map +1 -1
  82. package/dist/esm/actions/public/watchEvent.js +4 -2
  83. package/dist/esm/actions/public/watchEvent.js.map +1 -1
  84. package/dist/esm/clients/createClient.js +2 -1
  85. package/dist/esm/clients/createClient.js.map +1 -1
  86. package/dist/esm/clients/createPublicClient.js.map +1 -1
  87. package/dist/esm/clients/createTestClient.js.map +1 -1
  88. package/dist/esm/clients/createWalletClient.js.map +1 -1
  89. package/dist/esm/clients/decorators/public.js.map +1 -1
  90. package/dist/esm/constants/number.js +97 -0
  91. package/dist/esm/constants/number.js.map +1 -0
  92. package/dist/esm/contract.js.map +1 -1
  93. package/dist/esm/errors/abi.js +8 -1
  94. package/dist/esm/errors/abi.js.map +1 -1
  95. package/dist/esm/errors/contract.js +56 -32
  96. package/dist/esm/errors/contract.js.map +1 -1
  97. package/dist/esm/errors/version.js +1 -1
  98. package/dist/esm/index.js +4 -1
  99. package/dist/esm/index.js.map +1 -1
  100. package/dist/esm/public.js.map +1 -1
  101. package/dist/esm/utils/formatters/block.js.map +1 -1
  102. package/dist/esm/utils/formatters/formatter.js +1 -0
  103. package/dist/esm/utils/formatters/formatter.js.map +1 -1
  104. package/dist/esm/utils/formatters/transaction.js.map +1 -1
  105. package/dist/esm/utils/promise/withCache.js +3 -3
  106. package/dist/esm/utils/promise/withCache.js.map +1 -1
  107. package/dist/esm/utils/signature/hexToSignature.js +18 -0
  108. package/dist/esm/utils/signature/hexToSignature.js.map +1 -0
  109. package/dist/esm/utils/signature/signatureToHex.js +21 -0
  110. package/dist/esm/utils/signature/signatureToHex.js.map +1 -0
  111. package/dist/types/accounts/index.d.ts +1 -1
  112. package/dist/types/accounts/index.d.ts.map +1 -1
  113. package/dist/types/actions/index.d.ts +5 -1
  114. package/dist/types/actions/index.d.ts.map +1 -1
  115. package/dist/types/actions/public/createContractEventFilter.d.ts +5 -5
  116. package/dist/types/actions/public/createContractEventFilter.d.ts.map +1 -1
  117. package/dist/types/actions/public/createEventFilter.d.ts +20 -7
  118. package/dist/types/actions/public/createEventFilter.d.ts.map +1 -1
  119. package/dist/types/actions/public/getBlock.d.ts +5 -5
  120. package/dist/types/actions/public/getBlock.d.ts.map +1 -1
  121. package/dist/types/actions/public/getBlockNumber.d.ts +4 -2
  122. package/dist/types/actions/public/getBlockNumber.d.ts.map +1 -1
  123. package/dist/types/actions/public/getFilterChanges.d.ts +5 -8
  124. package/dist/types/actions/public/getFilterChanges.d.ts.map +1 -1
  125. package/dist/types/actions/public/getFilterLogs.d.ts +5 -4
  126. package/dist/types/actions/public/getFilterLogs.d.ts.map +1 -1
  127. package/dist/types/actions/public/getLogs.d.ts +17 -6
  128. package/dist/types/actions/public/getLogs.d.ts.map +1 -1
  129. package/dist/types/actions/public/getTransaction.d.ts +4 -4
  130. package/dist/types/actions/public/getTransaction.d.ts.map +1 -1
  131. package/dist/types/actions/public/watchBlocks.d.ts +10 -10
  132. package/dist/types/actions/public/watchBlocks.d.ts.map +1 -1
  133. package/dist/types/actions/public/watchContractEvent.d.ts +3 -3
  134. package/dist/types/actions/public/watchContractEvent.d.ts.map +1 -1
  135. package/dist/types/actions/public/watchEvent.d.ts +19 -8
  136. package/dist/types/actions/public/watchEvent.d.ts.map +1 -1
  137. package/dist/types/chains/formatters/celo.d.ts +4 -0
  138. package/dist/types/chains/formatters/celo.d.ts.map +1 -1
  139. package/dist/types/chains/formatters/optimism.d.ts +5 -3
  140. package/dist/types/chains/formatters/optimism.d.ts.map +1 -1
  141. package/dist/types/chains/index.d.ts +44 -12
  142. package/dist/types/chains/index.d.ts.map +1 -1
  143. package/dist/types/clients/createClient.d.ts +7 -0
  144. package/dist/types/clients/createClient.d.ts.map +1 -1
  145. package/dist/types/clients/createPublicClient.d.ts +1 -1
  146. package/dist/types/clients/createPublicClient.d.ts.map +1 -1
  147. package/dist/types/clients/createTestClient.d.ts +1 -1
  148. package/dist/types/clients/createTestClient.d.ts.map +1 -1
  149. package/dist/types/clients/createWalletClient.d.ts +1 -1
  150. package/dist/types/clients/createWalletClient.d.ts.map +1 -1
  151. package/dist/types/clients/decorators/public.d.ts +10 -9
  152. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  153. package/dist/types/constants/number.d.ts +97 -0
  154. package/dist/types/constants/number.d.ts.map +1 -0
  155. package/dist/types/contract.d.ts +5 -1
  156. package/dist/types/contract.d.ts.map +1 -1
  157. package/dist/types/errors/abi.d.ts +1 -0
  158. package/dist/types/errors/abi.d.ts.map +1 -1
  159. package/dist/types/errors/contract.d.ts +1 -0
  160. package/dist/types/errors/contract.d.ts.map +1 -1
  161. package/dist/types/errors/version.d.ts +1 -1
  162. package/dist/types/index.d.ts +10 -3
  163. package/dist/types/index.d.ts.map +1 -1
  164. package/dist/types/public.d.ts +5 -1
  165. package/dist/types/public.d.ts.map +1 -1
  166. package/dist/types/types/block.d.ts +7 -7
  167. package/dist/types/types/block.d.ts.map +1 -1
  168. package/dist/types/types/contract.d.ts +1 -1
  169. package/dist/types/types/contract.d.ts.map +1 -1
  170. package/dist/types/types/filter.d.ts +7 -3
  171. package/dist/types/types/filter.d.ts.map +1 -1
  172. package/dist/types/types/formatter.d.ts +3 -0
  173. package/dist/types/types/formatter.d.ts.map +1 -1
  174. package/dist/types/types/log.d.ts +8 -8
  175. package/dist/types/types/log.d.ts.map +1 -1
  176. package/dist/types/types/misc.d.ts.map +1 -1
  177. package/dist/types/types/rpc.d.ts +3 -3
  178. package/dist/types/types/rpc.d.ts.map +1 -1
  179. package/dist/types/types/transaction.d.ts +8 -8
  180. package/dist/types/types/transaction.d.ts.map +1 -1
  181. package/dist/types/utils/formatters/block.d.ts +13 -3
  182. package/dist/types/utils/formatters/block.d.ts.map +1 -1
  183. package/dist/types/utils/formatters/formatter.d.ts +1 -0
  184. package/dist/types/utils/formatters/formatter.d.ts.map +1 -1
  185. package/dist/types/utils/formatters/transaction.d.ts +10 -3
  186. package/dist/types/utils/formatters/transaction.d.ts.map +1 -1
  187. package/dist/types/utils/formatters/transactionReceipt.d.ts +1 -0
  188. package/dist/types/utils/formatters/transactionReceipt.d.ts.map +1 -1
  189. package/dist/types/utils/formatters/transactionRequest.d.ts +1 -0
  190. package/dist/types/utils/formatters/transactionRequest.d.ts.map +1 -1
  191. package/dist/types/utils/promise/withCache.d.ts +3 -3
  192. package/dist/types/utils/promise/withCache.d.ts.map +1 -1
  193. package/dist/types/utils/signature/hexToSignature.d.ts +13 -0
  194. package/dist/types/utils/signature/hexToSignature.d.ts.map +1 -0
  195. package/dist/types/utils/signature/signatureToHex.d.ts +17 -0
  196. package/dist/types/utils/signature/signatureToHex.d.ts.map +1 -0
  197. package/package.json +1 -1
  198. package/src/accounts/index.ts +1 -1
  199. package/src/accounts/utils/signMessage.ts +1 -1
  200. package/src/accounts/utils/signTypedData.ts +1 -1
  201. package/src/actions/index.ts +6 -2
  202. package/src/actions/public/createContractEventFilter.ts +30 -7
  203. package/src/actions/public/createEventFilter.ts +78 -24
  204. package/src/actions/public/getBlock.ts +18 -8
  205. package/src/actions/public/getBlockNumber.ts +5 -3
  206. package/src/actions/public/getFilterChanges.ts +46 -10
  207. package/src/actions/public/getFilterLogs.ts +26 -10
  208. package/src/actions/public/getLogs.ts +73 -18
  209. package/src/actions/public/getTransaction.ts +15 -8
  210. package/src/actions/public/watchBlockNumber.ts +1 -1
  211. package/src/actions/public/watchBlocks.ts +37 -18
  212. package/src/actions/public/watchContractEvent.ts +9 -9
  213. package/src/actions/public/watchEvent.ts +52 -19
  214. package/src/clients/createClient.ts +9 -0
  215. package/src/clients/createPublicClient.ts +7 -1
  216. package/src/clients/createTestClient.ts +7 -1
  217. package/src/clients/createWalletClient.ts +7 -1
  218. package/src/clients/decorators/public.ts +114 -25
  219. package/src/constants/number.ts +98 -0
  220. package/src/contract.ts +6 -2
  221. package/src/errors/abi.ts +5 -1
  222. package/src/errors/contract.ts +52 -31
  223. package/src/errors/version.ts +1 -1
  224. package/src/index.ts +108 -3
  225. package/src/public.ts +6 -2
  226. package/src/types/block.ts +25 -10
  227. package/src/types/contract.ts +7 -3
  228. package/src/types/filter.ts +32 -26
  229. package/src/types/formatter.ts +9 -0
  230. package/src/types/log.ts +13 -8
  231. package/src/types/misc.ts +3 -0
  232. package/src/types/rpc.ts +20 -6
  233. package/src/types/transaction.ts +22 -11
  234. package/src/utils/formatters/block.ts +31 -4
  235. package/src/utils/formatters/formatter.ts +1 -0
  236. package/src/utils/formatters/transaction.ts +25 -2
  237. package/src/utils/promise/withCache.ts +5 -5
  238. package/src/utils/signature/hexToSignature.ts +20 -0
  239. package/src/utils/signature/signatureToHex.ts +26 -0
  240. package/dist/cjs/accounts/utils/signatureToHex.js.map +0 -1
  241. package/dist/esm/accounts/utils/signatureToHex.js +0 -7
  242. package/dist/esm/accounts/utils/signatureToHex.js.map +0 -1
  243. package/dist/types/accounts/utils/signatureToHex.d.ts +0 -3
  244. package/dist/types/accounts/utils/signatureToHex.d.ts.map +0 -1
  245. package/src/accounts/utils/signatureToHex.ts +0 -12
  246. /package/dist/cjs/{accounts/utils → utils/signature}/signatureToHex.js +0 -0
@@ -1,4 +1,4 @@
1
- import type { Abi, AbiEvent, Address, Narrow } from 'abitype'
1
+ import type { AbiEvent, Address, Narrow } from 'abitype'
2
2
 
3
3
  import type { Client } from '../../clients/createClient.js'
4
4
  import type { Transport } from '../../clients/transports/createTransport.js'
@@ -9,7 +9,7 @@ import type {
9
9
  MaybeExtractEventArgsFromAbi,
10
10
  } from '../../types/contract.js'
11
11
  import type { Filter } from '../../types/filter.js'
12
- import type { LogTopic } from '../../types/misc.js'
12
+ import type { Hex, LogTopic } from '../../types/misc.js'
13
13
  import type { Prettify } from '../../types/utils.js'
14
14
  import {
15
15
  type EncodeEventTopicsParameters,
@@ -20,18 +20,23 @@ import { createFilterRequestScope } from '../../utils/filters/createFilterReques
20
20
 
21
21
  export type CreateEventFilterParameters<
22
22
  TAbiEvent extends AbiEvent | undefined = undefined,
23
+ TAbiEvents extends
24
+ | readonly AbiEvent[]
25
+ | readonly unknown[]
26
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
23
27
  TStrict extends boolean | undefined = undefined,
24
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
28
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
29
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
25
30
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
26
31
  _Args extends
27
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
32
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
28
33
  | undefined = undefined,
29
34
  > = {
30
35
  address?: Address | Address[]
31
- fromBlock?: BlockNumber | BlockTag
32
- toBlock?: BlockNumber | BlockTag
36
+ fromBlock?: TFromBlock | BlockNumber | BlockTag
37
+ toBlock?: TToBlock | BlockNumber | BlockTag
33
38
  } & (MaybeExtractEventArgsFromAbi<
34
- _Abi,
39
+ TAbiEvents,
35
40
  _EventName
36
41
  > extends infer TEventFilterArgs
37
42
  ?
@@ -40,6 +45,7 @@ export type CreateEventFilterParameters<
40
45
  | TEventFilterArgs
41
46
  | (_Args extends TEventFilterArgs ? _Args : never)
42
47
  event: Narrow<TAbiEvent>
48
+ events?: never
43
49
  /**
44
50
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
45
51
  * @default false
@@ -49,6 +55,7 @@ export type CreateEventFilterParameters<
49
55
  | {
50
56
  args?: never
51
57
  event?: Narrow<TAbiEvent>
58
+ events?: never
52
59
  /**
53
60
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
54
61
  * @default false
@@ -58,23 +65,42 @@ export type CreateEventFilterParameters<
58
65
  | {
59
66
  args?: never
60
67
  event?: never
68
+ events: Narrow<TAbiEvents>
69
+ /**
70
+ * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
71
+ * @default false
72
+ */
73
+ strict?: TStrict
74
+ }
75
+ | {
76
+ args?: never
77
+ event?: never
78
+ events?: never
61
79
  strict?: never
62
80
  }
63
81
  : {
64
82
  args?: never
65
83
  event?: never
84
+ events?: never
66
85
  strict?: never
67
86
  })
68
87
 
69
88
  export type CreateEventFilterReturnType<
70
89
  TAbiEvent extends AbiEvent | undefined = undefined,
90
+ TAbiEvents extends
91
+ | readonly AbiEvent[]
92
+ | readonly unknown[]
93
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
71
94
  TStrict extends boolean | undefined = undefined,
72
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
95
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
96
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
73
97
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
74
98
  _Args extends
75
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
99
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
76
100
  | undefined = undefined,
77
- > = Prettify<Filter<'event', _Abi, _EventName, _Args, TStrict>>
101
+ > = Prettify<
102
+ Filter<'event', TAbiEvents, _EventName, _Args, TStrict, TFromBlock, TToBlock>
103
+ >
78
104
 
79
105
  /**
80
106
  * Creates a [`Filter`](https://viem.sh/docs/glossary/types.html#filter) to listen for new events that can be used with [`getFilterChanges`](https://viem.sh/docs/actions/public/getFilterChanges.html).
@@ -101,12 +127,17 @@ export type CreateEventFilterReturnType<
101
127
  */
102
128
  export async function createEventFilter<
103
129
  TChain extends Chain | undefined,
104
- TAbiEvent extends AbiEvent | undefined,
130
+ TAbiEvent extends AbiEvent | undefined = undefined,
131
+ TAbiEvents extends
132
+ | readonly AbiEvent[]
133
+ | readonly unknown[]
134
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
105
135
  TStrict extends boolean | undefined = undefined,
106
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
136
+ TFromBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,
137
+ TToBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,
107
138
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
108
139
  _Args extends
109
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
140
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
110
141
  | undefined = undefined,
111
142
  >(
112
143
  client: Client<Transport, TChain>,
@@ -114,32 +145,51 @@ export async function createEventFilter<
114
145
  address,
115
146
  args,
116
147
  event,
148
+ events: events_,
117
149
  fromBlock,
118
150
  strict,
119
151
  toBlock,
120
152
  }: CreateEventFilterParameters<
121
153
  TAbiEvent,
154
+ TAbiEvents,
122
155
  TStrict,
123
- _Abi,
156
+ TFromBlock,
157
+ TToBlock,
124
158
  _EventName,
125
159
  _Args
126
160
  > = {} as any,
127
161
  ): Promise<
128
- CreateEventFilterReturnType<TAbiEvent, TStrict, _Abi, _EventName, _Args>
162
+ CreateEventFilterReturnType<
163
+ TAbiEvent,
164
+ TAbiEvents,
165
+ TStrict,
166
+ TFromBlock,
167
+ TToBlock,
168
+ _EventName,
169
+ _Args
170
+ >
129
171
  > {
172
+ const events = events_ ?? (event ? [event] : undefined)
173
+
130
174
  const getRequest = createFilterRequestScope(client, {
131
175
  method: 'eth_newFilter',
132
176
  })
133
177
 
134
178
  let topics: LogTopic[] = []
135
- if (event)
136
- topics = encodeEventTopics({
137
- abi: [event],
138
- eventName: (event as AbiEvent).name,
139
- args,
140
- } as EncodeEventTopicsParameters)
179
+ if (events) {
180
+ topics = [
181
+ (events as AbiEvent[]).flatMap((event) =>
182
+ encodeEventTopics({
183
+ abi: [event],
184
+ eventName: (event as AbiEvent).name,
185
+ args,
186
+ } as EncodeEventTopicsParameters),
187
+ ),
188
+ ]
189
+ if (event) topics = topics[0] as LogTopic[]
190
+ }
141
191
 
142
- const id = await client.request({
192
+ const id: Hex = await client.request({
143
193
  method: 'eth_newFilter',
144
194
  params: [
145
195
  {
@@ -153,17 +203,21 @@ export async function createEventFilter<
153
203
  })
154
204
 
155
205
  return {
156
- abi: event ? [event] : undefined,
206
+ abi: events,
157
207
  args,
158
208
  eventName: event ? (event as AbiEvent).name : undefined,
209
+ fromBlock,
159
210
  id,
160
211
  request: getRequest(id),
161
212
  strict,
213
+ toBlock,
162
214
  type: 'event',
163
215
  } as unknown as CreateEventFilterReturnType<
164
216
  TAbiEvent,
217
+ TAbiEvents,
165
218
  TStrict,
166
- _Abi,
219
+ TFromBlock,
220
+ TToBlock,
167
221
  _EventName,
168
222
  _Args
169
223
  >
@@ -12,9 +12,12 @@ import {
12
12
  formatBlock,
13
13
  } from '../../utils/formatters/block.js'
14
14
 
15
- export type GetBlockParameters = {
15
+ export type GetBlockParameters<
16
+ TIncludeTransactions extends boolean = false,
17
+ TBlockTag extends BlockTag = 'latest',
18
+ > = {
16
19
  /** Whether or not to include transaction data in the response. */
17
- includeTransactions?: boolean
20
+ includeTransactions?: TIncludeTransactions
18
21
  } & (
19
22
  | {
20
23
  /** Hash of the block. */
@@ -35,13 +38,15 @@ export type GetBlockParameters = {
35
38
  * The block tag.
36
39
  * @default 'latest'
37
40
  */
38
- blockTag?: BlockTag
41
+ blockTag?: TBlockTag | BlockTag
39
42
  }
40
43
  )
41
44
 
42
45
  export type GetBlockReturnType<
43
46
  TChain extends Chain | undefined = Chain | undefined,
44
- > = FormattedBlock<TChain>
47
+ TIncludeTransactions extends boolean = false,
48
+ TBlockTag extends BlockTag = 'latest',
49
+ > = FormattedBlock<TChain, TIncludeTransactions, TBlockTag>
45
50
 
46
51
  /**
47
52
  * Returns information about a block at a block number, hash, or tag.
@@ -70,15 +75,20 @@ export type GetBlockReturnType<
70
75
  export async function getBlock<
71
76
  TChain extends Chain | undefined,
72
77
  TAccount extends Account | undefined,
78
+ TIncludeTransactions extends boolean = false,
79
+ TBlockTag extends BlockTag = 'latest',
73
80
  >(
74
81
  client: Client<Transport, TChain, TAccount>,
75
82
  {
76
83
  blockHash,
77
84
  blockNumber,
78
- blockTag = 'latest',
79
- includeTransactions = false,
80
- }: GetBlockParameters = {},
81
- ): Promise<GetBlockReturnType<TChain>> {
85
+ blockTag: blockTag_,
86
+ includeTransactions: includeTransactions_,
87
+ }: GetBlockParameters<TIncludeTransactions, TBlockTag> = {},
88
+ ): Promise<GetBlockReturnType<TChain, TIncludeTransactions, TBlockTag>> {
89
+ const blockTag = blockTag_ ?? 'latest'
90
+ const includeTransactions = includeTransactions_ ?? false
91
+
82
92
  const blockNumberHex =
83
93
  blockNumber !== undefined ? numberToHex(blockNumber) : undefined
84
94
 
@@ -4,7 +4,9 @@ import type { Chain } from '../../types/chain.js'
4
4
  import { getCache, withCache } from '../../utils/promise/withCache.js'
5
5
 
6
6
  export type GetBlockNumberParameters = {
7
- /** The maximum age (in ms) of the cached value. */
7
+ /** Time (in ms) that cached block number will remain in memory. */
8
+ cacheTime?: number
9
+ /** @deprecated use `cacheTime` instead. */
8
10
  maxAge?: number
9
11
  }
10
12
 
@@ -41,14 +43,14 @@ export function getBlockNumberCache(id: string) {
41
43
  */
42
44
  export async function getBlockNumber<TChain extends Chain | undefined>(
43
45
  client: Client<Transport, TChain>,
44
- { maxAge = client.pollingInterval }: GetBlockNumberParameters = {},
46
+ { cacheTime = client.cacheTime, maxAge }: GetBlockNumberParameters = {},
45
47
  ): Promise<GetBlockNumberReturnType> {
46
48
  const blockNumberHex = await withCache(
47
49
  () =>
48
50
  client.request({
49
51
  method: 'eth_blockNumber',
50
52
  }),
51
- { cacheKey: cacheKey(client.uid), maxAge },
53
+ { cacheKey: cacheKey(client.uid), cacheTime: maxAge ?? cacheTime },
52
54
  )
53
55
  return BigInt(blockNumberHex)
54
56
  }
@@ -6,6 +6,7 @@ import {
6
6
  DecodeLogDataMismatch,
7
7
  DecodeLogTopicsMismatch,
8
8
  } from '../../errors/abi.js'
9
+ import type { BlockNumber, BlockTag } from '../../types/block.js'
9
10
  import type { Chain } from '../../types/chain.js'
10
11
  import type { Filter, FilterType } from '../../types/filter.js'
11
12
  import type { Log } from '../../types/log.js'
@@ -15,25 +16,40 @@ import { formatLog } from '../../utils/formatters/log.js'
15
16
 
16
17
  export type GetFilterChangesParameters<
17
18
  TFilterType extends FilterType = FilterType,
18
- TAbi extends Abi | readonly unknown[] = Abi,
19
- TEventName extends string | undefined = string,
19
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
20
+ TEventName extends string | undefined = undefined,
20
21
  TStrict extends boolean | undefined = undefined,
22
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
23
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
21
24
  > = {
22
- filter: Filter<TFilterType, TAbi, TEventName, any, TStrict>
25
+ filter: Filter<
26
+ TFilterType,
27
+ TAbi,
28
+ TEventName,
29
+ any,
30
+ TStrict,
31
+ TFromBlock,
32
+ TToBlock
33
+ >
23
34
  }
24
35
 
25
36
  export type GetFilterChangesReturnType<
26
37
  TFilterType extends FilterType = FilterType,
27
- TAbi extends Abi | readonly unknown[] = Abi,
28
- TEventName extends string | undefined = string,
38
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
39
+ TEventName extends string | undefined = undefined,
29
40
  TStrict extends boolean | undefined = undefined,
41
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
42
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
30
43
  _AbiEvent extends AbiEvent | undefined = TAbi extends Abi
31
44
  ? TEventName extends string
32
45
  ? ExtractAbiEvent<TAbi, TEventName>
33
46
  : undefined
34
47
  : undefined,
48
+ _Pending extends boolean =
49
+ | (TFromBlock extends 'pending' ? true : false)
50
+ | (TToBlock extends 'pending' ? true : false),
35
51
  > = TFilterType extends 'event'
36
- ? Log<bigint, number, _AbiEvent, TStrict, TAbi, TEventName>[]
52
+ ? Log<bigint, number, _Pending, _AbiEvent, TStrict, TAbi, TEventName>[]
37
53
  : Hash[]
38
54
 
39
55
  /**
@@ -122,15 +138,33 @@ export async function getFilterChanges<
122
138
  TTransport extends Transport,
123
139
  TChain extends Chain | undefined,
124
140
  TFilterType extends FilterType,
125
- TAbi extends Abi | readonly unknown[],
141
+ TAbi extends Abi | readonly unknown[] | undefined,
126
142
  TEventName extends string | undefined,
127
143
  TStrict extends boolean | undefined = undefined,
144
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
145
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
128
146
  >(
129
147
  _client: Client<TTransport, TChain>,
130
148
  {
131
149
  filter,
132
- }: GetFilterChangesParameters<TFilterType, TAbi, TEventName, TStrict>,
133
- ) {
150
+ }: GetFilterChangesParameters<
151
+ TFilterType,
152
+ TAbi,
153
+ TEventName,
154
+ TStrict,
155
+ TFromBlock,
156
+ TToBlock
157
+ >,
158
+ ): Promise<
159
+ GetFilterChangesReturnType<
160
+ TFilterType,
161
+ TAbi,
162
+ TEventName,
163
+ TStrict,
164
+ TFromBlock,
165
+ TToBlock
166
+ >
167
+ > {
134
168
  const strict = 'strict' in filter && filter.strict
135
169
 
136
170
  const logs = await filter.request({
@@ -172,6 +206,8 @@ export async function getFilterChanges<
172
206
  TFilterType,
173
207
  TAbi,
174
208
  TEventName,
175
- TStrict
209
+ TStrict,
210
+ TFromBlock,
211
+ TToBlock
176
212
  >
177
213
  }
@@ -6,6 +6,7 @@ import {
6
6
  DecodeLogDataMismatch,
7
7
  DecodeLogTopicsMismatch,
8
8
  } from '../../errors/abi.js'
9
+ import type { BlockNumber, BlockTag } from '../../types/block.js'
9
10
  import type { Chain } from '../../types/chain.js'
10
11
  import type { Filter } from '../../types/filter.js'
11
12
  import type { Log } from '../../types/log.js'
@@ -13,22 +14,29 @@ import { decodeEventLog } from '../../utils/abi/decodeEventLog.js'
13
14
  import { formatLog } from '../../utils/formatters/log.js'
14
15
 
15
16
  export type GetFilterLogsParameters<
16
- TAbi extends Abi | readonly unknown[] = Abi,
17
- TEventName extends string | undefined = string,
17
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
18
+ TEventName extends string | undefined = undefined,
18
19
  TStrict extends boolean | undefined = undefined,
20
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
21
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
19
22
  > = {
20
- filter: Filter<'event', TAbi, TEventName, any, TStrict>
23
+ filter: Filter<'event', TAbi, TEventName, any, TStrict, TFromBlock, TToBlock>
21
24
  }
22
25
  export type GetFilterLogsReturnType<
23
- TAbi extends Abi | readonly unknown[] = Abi,
24
- TEventName extends string | undefined = string,
26
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
27
+ TEventName extends string | undefined = undefined,
25
28
  TStrict extends boolean | undefined = undefined,
29
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
30
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
26
31
  _AbiEvent extends AbiEvent | undefined = TAbi extends Abi
27
32
  ? TEventName extends string
28
33
  ? ExtractAbiEvent<TAbi, TEventName>
29
34
  : undefined
30
35
  : undefined,
31
- > = Log<bigint, number, _AbiEvent, TStrict, TAbi, TEventName>[]
36
+ _Pending extends boolean =
37
+ | (TFromBlock extends 'pending' ? true : false)
38
+ | (TToBlock extends 'pending' ? true : false),
39
+ > = Log<bigint, number, _Pending, _AbiEvent, TStrict, TAbi, TEventName>[]
32
40
 
33
41
  /**
34
42
  * Returns a list of event logs since the filter was created.
@@ -59,13 +67,19 @@ export type GetFilterLogsReturnType<
59
67
  */
60
68
  export async function getFilterLogs<
61
69
  TChain extends Chain | undefined,
62
- TAbi extends Abi | readonly unknown[],
70
+ TAbi extends Abi | readonly unknown[] | undefined,
63
71
  TEventName extends string | undefined,
64
72
  TStrict extends boolean | undefined = undefined,
73
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
74
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
65
75
  >(
66
76
  _client: Client<Transport, TChain>,
67
- { filter }: GetFilterLogsParameters<TAbi, TEventName, TStrict>,
68
- ): Promise<GetFilterLogsReturnType<TAbi, TEventName, TStrict>> {
77
+ {
78
+ filter,
79
+ }: GetFilterLogsParameters<TAbi, TEventName, TStrict, TFromBlock, TToBlock>,
80
+ ): Promise<
81
+ GetFilterLogsReturnType<TAbi, TEventName, TStrict, TFromBlock, TToBlock>
82
+ > {
69
83
  const strict = filter.strict ?? false
70
84
 
71
85
  const logs = await filter.request({
@@ -105,6 +119,8 @@ export async function getFilterLogs<
105
119
  .filter(Boolean) as unknown as GetFilterLogsReturnType<
106
120
  TAbi,
107
121
  TEventName,
108
- TStrict
122
+ TStrict,
123
+ TFromBlock,
124
+ TToBlock
109
125
  >
110
126
  }
@@ -1,4 +1,4 @@
1
- import type { AbiEvent, Address, Narrow } from 'abitype'
1
+ import type { Abi, AbiEvent, Address, Narrow } from 'abitype'
2
2
 
3
3
  import type { Client } from '../../clients/createClient.js'
4
4
  import type { Transport } from '../../clients/transports/createTransport.js'
@@ -25,7 +25,13 @@ import { formatLog } from '../../utils/formatters/log.js'
25
25
 
26
26
  export type GetLogsParameters<
27
27
  TAbiEvent extends AbiEvent | undefined = undefined,
28
+ TAbiEvents extends
29
+ | readonly AbiEvent[]
30
+ | readonly unknown[]
31
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
28
32
  TStrict extends boolean | undefined = undefined,
33
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
34
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
29
35
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
30
36
  > = {
31
37
  /** Address or list of addresses from which logs originated */
@@ -33,7 +39,8 @@ export type GetLogsParameters<
33
39
  } & (
34
40
  | {
35
41
  event: Narrow<TAbiEvent>
36
- args?: MaybeExtractEventArgsFromAbi<[TAbiEvent], _EventName>
42
+ events?: never
43
+ args?: MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
37
44
  /**
38
45
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
39
46
  * @default false
@@ -42,6 +49,17 @@ export type GetLogsParameters<
42
49
  }
43
50
  | {
44
51
  event?: never
52
+ events: Narrow<TAbiEvents>
53
+ args?: never
54
+ /**
55
+ * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
56
+ * @default false
57
+ */
58
+ strict?: TStrict
59
+ }
60
+ | {
61
+ event?: never
62
+ events?: never
45
63
  args?: never
46
64
  strict?: never
47
65
  }
@@ -49,9 +67,9 @@ export type GetLogsParameters<
49
67
  (
50
68
  | {
51
69
  /** Block number or tag after which to include logs */
52
- fromBlock?: BlockNumber<bigint> | BlockTag
70
+ fromBlock?: TFromBlock | BlockNumber | BlockTag
53
71
  /** Block number or tag before which to include logs */
54
- toBlock?: BlockNumber<bigint> | BlockTag
72
+ toBlock?: TToBlock | BlockNumber | BlockTag
55
73
  blockHash?: never
56
74
  }
57
75
  | {
@@ -64,9 +82,18 @@ export type GetLogsParameters<
64
82
 
65
83
  export type GetLogsReturnType<
66
84
  TAbiEvent extends AbiEvent | undefined = undefined,
85
+ TAbiEvents extends
86
+ | readonly AbiEvent[]
87
+ | readonly unknown[]
88
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
67
89
  TStrict extends boolean | undefined = undefined,
90
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
91
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
68
92
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
69
- > = Log<bigint, number, TAbiEvent, TStrict, [TAbiEvent], _EventName>[]
93
+ _Pending extends boolean =
94
+ | (TFromBlock extends 'pending' ? true : false)
95
+ | (TToBlock extends 'pending' ? true : false),
96
+ > = Log<bigint, number, _Pending, TAbiEvent, TStrict, TAbiEvents, _EventName>[]
70
97
 
71
98
  /**
72
99
  * Returns a list of event logs matching the provided parameters.
@@ -92,8 +119,14 @@ export type GetLogsReturnType<
92
119
  */
93
120
  export async function getLogs<
94
121
  TChain extends Chain | undefined,
95
- TAbiEvent extends AbiEvent | undefined,
122
+ TAbiEvent extends AbiEvent | undefined = undefined,
123
+ TAbiEvents extends
124
+ | readonly AbiEvent[]
125
+ | readonly unknown[]
126
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
96
127
  TStrict extends boolean | undefined = undefined,
128
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
129
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
97
130
  >(
98
131
  client: Client<Transport, TChain>,
99
132
  {
@@ -102,19 +135,35 @@ export async function getLogs<
102
135
  fromBlock,
103
136
  toBlock,
104
137
  event,
138
+ events: events_,
105
139
  args,
106
140
  strict: strict_,
107
- }: GetLogsParameters<TAbiEvent, TStrict> = {},
108
- ): Promise<GetLogsReturnType<TAbiEvent, TStrict>> {
141
+ }: GetLogsParameters<
142
+ TAbiEvent,
143
+ TAbiEvents,
144
+ TStrict,
145
+ TFromBlock,
146
+ TToBlock
147
+ > = {},
148
+ ): Promise<
149
+ GetLogsReturnType<TAbiEvent, TAbiEvents, TStrict, TFromBlock, TToBlock>
150
+ > {
109
151
  const strict = strict_ ?? false
152
+ const events = events_ ?? (event ? [event] : undefined)
110
153
 
111
154
  let topics: LogTopic[] = []
112
- if (event)
113
- topics = encodeEventTopics({
114
- abi: [event],
115
- eventName: (event as AbiEvent).name,
116
- args,
117
- } as EncodeEventTopicsParameters)
155
+ if (events) {
156
+ topics = [
157
+ (events as AbiEvent[]).flatMap((event) =>
158
+ encodeEventTopics({
159
+ abi: [event],
160
+ eventName: (event as AbiEvent).name,
161
+ args,
162
+ } as EncodeEventTopicsParameters),
163
+ ),
164
+ ]
165
+ if (event) topics = topics[0] as LogTopic[]
166
+ }
118
167
 
119
168
  let logs: RpcLog[]
120
169
  if (blockHash) {
@@ -140,15 +189,15 @@ export async function getLogs<
140
189
  return logs
141
190
  .map((log) => {
142
191
  try {
143
- const { eventName, args } = event
192
+ const { eventName, args } = events
144
193
  ? decodeEventLog({
145
- abi: [event] as [AbiEvent],
194
+ abi: events as Abi,
146
195
  data: log.data,
147
196
  topics: log.topics as any,
148
197
  strict,
149
198
  })
150
199
  : { eventName: undefined, args: undefined }
151
- return formatLog(log, { args, eventName })
200
+ return formatLog(log, { args, eventName: eventName as string })
152
201
  } catch (err) {
153
202
  let eventName
154
203
  let isUnnamed
@@ -166,5 +215,11 @@ export async function getLogs<
166
215
  return formatLog(log, { args: isUnnamed ? [] : {}, eventName })
167
216
  }
168
217
  })
169
- .filter(Boolean) as unknown as GetLogsReturnType<TAbiEvent, TStrict>
218
+ .filter(Boolean) as unknown as GetLogsReturnType<
219
+ TAbiEvent,
220
+ TAbiEvents,
221
+ TStrict,
222
+ TFromBlock,
223
+ TToBlock
224
+ >
170
225
  }