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
@@ -3,7 +3,16 @@ import type { Address } from 'abitype'
3
3
  import type { Hash, Hex } from './misc.js'
4
4
  import type { Transaction } from './transaction.js'
5
5
 
6
- export type Block<TQuantity = bigint, TTransaction = Transaction> = {
6
+ export type Block<
7
+ TQuantity = bigint,
8
+ TIncludeTransactions extends boolean = boolean,
9
+ TBlockTag extends BlockTag = BlockTag,
10
+ TTransaction = Transaction<
11
+ bigint,
12
+ number,
13
+ TBlockTag extends 'pending' ? true : false
14
+ >,
15
+ > = {
7
16
  /** Base fee per gas */
8
17
  baseFeePerGas: TQuantity | null
9
18
  /** Difficulty for this block */
@@ -15,17 +24,17 @@ export type Block<TQuantity = bigint, TTransaction = Transaction> = {
15
24
  /** Total used gas by all transactions in this block */
16
25
  gasUsed: TQuantity
17
26
  /** Block hash or `null` if pending */
18
- hash: Hash | null
27
+ hash: TBlockTag extends 'pending' ? null : Hash
19
28
  /** Logs bloom filter or `null` if pending */
20
- logsBloom: Hex | null
29
+ logsBloom: TBlockTag extends 'pending' ? null : Hex
21
30
  /** Address that received this block’s mining rewards */
22
31
  miner: Address
23
32
  /** Unique identifier for the block. */
24
33
  mixHash: Hash
25
34
  /** Proof-of-work hash or `null` if pending */
26
- nonce: Hex | null
35
+ nonce: TBlockTag extends 'pending' ? null : Hex
27
36
  /** Block number or `null` if pending */
28
- number: TQuantity | null
37
+ number: TBlockTag extends 'pending' ? null : TQuantity
29
38
  /** Parent block hash */
30
39
  parentHash: Hash
31
40
  /** Root of the this block’s receipts trie */
@@ -42,7 +51,7 @@ export type Block<TQuantity = bigint, TTransaction = Transaction> = {
42
51
  /** Total difficulty of the chain until this block */
43
52
  totalDifficulty: TQuantity | null
44
53
  /** List of transaction objects or hashes */
45
- transactions: Hash[] | TTransaction[]
54
+ transactions: TIncludeTransactions extends true ? TTransaction[] : Hash[]
46
55
  /** Root of this block’s transaction trie */
47
56
  transactionsRoot: Hash
48
57
  /** List of uncle hashes */
@@ -67,7 +76,13 @@ export type BlockNumber<TQuantity = bigint> = TQuantity
67
76
 
68
77
  export type BlockTag = 'latest' | 'earliest' | 'pending' | 'safe' | 'finalized'
69
78
 
70
- export type Uncle<TQuantity = bigint, TTransaction = Transaction> = Block<
71
- TQuantity,
72
- TTransaction
73
- >
79
+ export type Uncle<
80
+ TQuantity = bigint,
81
+ TIncludeTransactions extends boolean = boolean,
82
+ TBlockTag extends BlockTag = BlockTag,
83
+ TTransaction = Transaction<
84
+ bigint,
85
+ number,
86
+ TBlockTag extends 'pending' ? true : false
87
+ >,
88
+ > = Block<TQuantity, TIncludeTransactions, TBlockTag, TTransaction>
@@ -83,9 +83,13 @@ export type MaybeAbiEventName<TAbiEvent extends AbiEvent | undefined> =
83
83
  TAbiEvent extends AbiEvent ? TAbiEvent['name'] : undefined
84
84
 
85
85
  export type MaybeExtractEventArgsFromAbi<
86
- TAbi extends Abi | readonly unknown[] = Abi,
87
- TEventName extends string | undefined = undefined,
88
- > = TEventName extends string ? GetEventArgs<TAbi, TEventName> : undefined
86
+ TAbi extends Abi | readonly unknown[] | undefined,
87
+ TEventName extends string | undefined,
88
+ > = TAbi extends Abi | readonly unknown[]
89
+ ? TEventName extends string
90
+ ? GetEventArgs<TAbi, TEventName>
91
+ : undefined
92
+ : undefined
89
93
 
90
94
  //////////////////////////////////////////////////////////////////////
91
95
  // ABI item name
@@ -1,5 +1,6 @@
1
1
  import type { Abi } from 'abitype'
2
2
 
3
+ import type { BlockNumber, BlockTag } from './block.js'
3
4
  import type { MaybeExtractEventArgsFromAbi } from './contract.js'
4
5
  import type { EIP1193RequestFn, PublicRpcSchema } from './eip1193.js'
5
6
  import type { Hex } from './misc.js'
@@ -16,42 +17,47 @@ type FilterRpcSchema = Filter_<
16
17
 
17
18
  export type Filter<
18
19
  TFilterType extends FilterType = 'event',
19
- TAbi extends Abi | readonly unknown[] = Abi,
20
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
20
21
  TEventName extends string | undefined = undefined,
21
22
  TArgs extends
22
23
  | MaybeExtractEventArgsFromAbi<TAbi, TEventName>
23
24
  | undefined = MaybeExtractEventArgsFromAbi<TAbi, TEventName>,
24
25
  TStrict extends boolean | undefined = undefined,
26
+ TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
27
+ TToBlock extends BlockNumber | BlockTag | undefined = undefined,
25
28
  > = {
26
29
  id: Hex
27
30
  request: EIP1193RequestFn<FilterRpcSchema>
28
31
  type: TFilterType
29
32
  } & (TFilterType extends 'event'
30
- ? TAbi extends Abi
31
- ? undefined extends TEventName
32
- ? {
33
- abi: TAbi
34
- args?: never
35
- eventName?: never
36
- strict: TStrict
37
- }
38
- : TArgs extends MaybeExtractEventArgsFromAbi<TAbi, TEventName>
39
- ? {
40
- abi: TAbi
41
- args: TArgs
42
- eventName: TEventName
43
- strict: TStrict
44
- }
33
+ ? {
34
+ fromBlock?: TFromBlock
35
+ toBlock?: TToBlock
36
+ } & (TAbi extends Abi
37
+ ? undefined extends TEventName
38
+ ? {
39
+ abi: TAbi
40
+ args?: never
41
+ eventName?: never
42
+ strict: TStrict
43
+ }
44
+ : TArgs extends MaybeExtractEventArgsFromAbi<TAbi, TEventName>
45
+ ? {
46
+ abi: TAbi
47
+ args: TArgs
48
+ eventName: TEventName
49
+ strict: TStrict
50
+ }
51
+ : {
52
+ abi: TAbi
53
+ args?: never
54
+ eventName: TEventName
55
+ strict: TStrict
56
+ }
45
57
  : {
46
- abi: TAbi
58
+ abi?: never
47
59
  args?: never
48
- eventName: TEventName
49
- strict: TStrict
50
- }
51
- : {
52
- abi?: never
53
- args?: never
54
- eventName?: never
55
- strict?: never
56
- }
60
+ eventName?: never
61
+ strict?: never
62
+ })
57
63
  : {})
@@ -12,6 +12,15 @@ export type Formatters = {
12
12
  transactionRequest?: Formatter<'transactionRequest'>
13
13
  }
14
14
 
15
+ export type ExtractFormatterExclude<
16
+ TChain extends Chain | undefined,
17
+ TType extends keyof Formatters,
18
+ > = TChain extends Chain<infer _Formatters extends Formatters>
19
+ ? _Formatters[TType] extends { exclude: infer Exclude }
20
+ ? Extract<Exclude, string[]>[number]
21
+ : ''
22
+ : ''
23
+
15
24
  export type ExtractFormatterParameters<
16
25
  TChain extends Chain | undefined,
17
26
  TType extends keyof Formatters,
package/src/types/log.ts CHANGED
@@ -15,9 +15,12 @@ import type { Hash, Hex } from './misc.js'
15
15
  export type Log<
16
16
  TQuantity = bigint,
17
17
  TIndex = number,
18
+ TPending extends boolean = boolean,
18
19
  TAbiEvent extends AbiEvent | undefined = undefined,
19
20
  TStrict extends boolean | undefined = undefined,
20
- TAbi extends Abi | readonly unknown[] = [TAbiEvent],
21
+ TAbi extends Abi | readonly unknown[] | undefined = TAbiEvent extends AbiEvent
22
+ ? [TAbiEvent]
23
+ : undefined,
21
24
  TEventName extends string | undefined = TAbiEvent extends AbiEvent
22
25
  ? TAbiEvent['name']
23
26
  : undefined,
@@ -25,17 +28,17 @@ export type Log<
25
28
  /** The address from which this log originated */
26
29
  address: Address
27
30
  /** Hash of block containing this log or `null` if pending */
28
- blockHash: Hash | null
31
+ blockHash: TPending extends true ? null : Hash
29
32
  /** Number of block containing this log or `null` if pending */
30
- blockNumber: TQuantity | null
33
+ blockNumber: TPending extends true ? null : TQuantity
31
34
  /** Contains the non-indexed arguments of the log */
32
35
  data: Hex
33
36
  /** Index of this log within its block or `null` if pending */
34
- logIndex: TIndex | null
37
+ logIndex: TPending extends true ? null : TIndex
35
38
  /** Hash of the transaction that created this log or `null` if pending */
36
- transactionHash: Hash | null
39
+ transactionHash: TPending extends true ? null : Hash
37
40
  /** Index of the transaction that created this log or `null` if pending */
38
- transactionIndex: TIndex | null
41
+ transactionIndex: TPending extends true ? null : TIndex
39
42
  /** `true` if this filter has been destroyed and is invalid */
40
43
  removed: boolean
41
44
  } & GetInferredLogValues<TAbiEvent, TAbi, TEventName, TStrict>
@@ -79,7 +82,9 @@ type GetTopics<
79
82
 
80
83
  type GetInferredLogValues<
81
84
  TAbiEvent extends AbiEvent | undefined = undefined,
82
- TAbi extends Abi | readonly unknown[] = [TAbiEvent],
85
+ TAbi extends Abi | readonly unknown[] | undefined = TAbiEvent extends AbiEvent
86
+ ? [TAbiEvent]
87
+ : undefined,
83
88
  TEventName extends string | undefined = TAbiEvent extends AbiEvent
84
89
  ? TAbiEvent['name']
85
90
  : undefined,
@@ -110,7 +115,7 @@ type GetInferredLogValues<
110
115
  [TName in _EventNames]: {
111
116
  args: GetEventArgs<
112
117
  TAbi,
113
- string,
118
+ TName,
114
119
  {
115
120
  EnableUnion: false
116
121
  IndexedOnly: false
package/src/types/misc.ts CHANGED
@@ -9,7 +9,10 @@ export type SignableMessage =
9
9
  raw: Hex | ByteArray
10
10
  }
11
11
  export type Signature = {
12
+ // TODO(v2): Make `bigint`
12
13
  r: Hex
14
+ // TODO(v2): Make `bigint`
13
15
  s: Hex
16
+ // TODO(v2): `v` to `recovery`
14
17
  v: bigint
15
18
  }
package/src/types/rpc.ts CHANGED
@@ -1,4 +1,10 @@
1
- import type { Block, BlockIdentifier, BlockNumber, Uncle } from './block.js'
1
+ import type {
2
+ Block,
3
+ BlockIdentifier,
4
+ BlockNumber,
5
+ BlockTag,
6
+ Uncle,
7
+ } from './block.js'
2
8
  import type { FeeHistory, FeeValues } from './fee.js'
3
9
  import type { Log } from './log.js'
4
10
  import type {
@@ -17,7 +23,15 @@ export type Quantity = `0x${string}`
17
23
  export type Status = '0x0' | '0x1'
18
24
  export type TransactionType = '0x0' | '0x1' | '0x2' | (string & {})
19
25
 
20
- export type RpcBlock = Block<Quantity, RpcTransaction>
26
+ export type RpcBlock<
27
+ TBlockTag extends BlockTag = BlockTag,
28
+ TIncludeTransactions extends boolean = boolean,
29
+ > = Block<
30
+ Quantity,
31
+ TIncludeTransactions,
32
+ TBlockTag,
33
+ RpcTransaction<TBlockTag extends 'pending' ? true : false>
34
+ >
21
35
  export type RpcBlockNumber = BlockNumber<Quantity>
22
36
  export type RpcBlockIdentifier = BlockIdentifier<Quantity>
23
37
  export type RpcUncle = Uncle<Quantity>
@@ -34,9 +48,9 @@ export type RpcTransactionRequest =
34
48
  | TransactionRequestLegacy<Quantity, Index, '0x0'>
35
49
  | TransactionRequestEIP2930<Quantity, Index, '0x1'>
36
50
  | TransactionRequestEIP1559<Quantity, Index, '0x2'>
37
- export type RpcTransaction = UnionOmit<
38
- | TransactionLegacy<Quantity, Index, '0x0'>
39
- | TransactionEIP2930<Quantity, Index, '0x1'>
40
- | TransactionEIP1559<Quantity, Index, '0x2'>,
51
+ export type RpcTransaction<TPending extends boolean = boolean> = UnionOmit<
52
+ | TransactionLegacy<Quantity, Index, TPending, '0x0'>
53
+ | TransactionEIP2930<Quantity, Index, TPending, '0x1'>
54
+ | TransactionEIP1559<Quantity, Index, TPending, '0x2'>,
41
55
  'typeHex'
42
56
  >
@@ -47,11 +47,15 @@ export type TransactionReceipt<
47
47
  type: TType
48
48
  }
49
49
 
50
- export type TransactionBase<TQuantity = bigint, TIndex = number> = {
50
+ export type TransactionBase<
51
+ TQuantity = bigint,
52
+ TIndex = number,
53
+ TPending extends boolean = boolean,
54
+ > = {
51
55
  /** Hash of block containing this transaction or `null` if pending */
52
- blockHash: Hash | null
56
+ blockHash: TPending extends true ? null : Hash
53
57
  /** Number of block containing this transaction or `null` if pending */
54
- blockNumber: TQuantity | null
58
+ blockNumber: TPending extends true ? null : TQuantity
55
59
  /** Transaction sender */
56
60
  from: Address
57
61
  /** Gas provided for transaction execution */
@@ -69,7 +73,7 @@ export type TransactionBase<TQuantity = bigint, TIndex = number> = {
69
73
  /** Transaction recipient or `null` if deploying a contract */
70
74
  to: Address | null
71
75
  /** Index of this transaction in the block or `null` if pending */
72
- transactionIndex: TIndex | null
76
+ transactionIndex: TPending extends true ? null : TIndex
73
77
  /** The type represented as hex. */
74
78
  typeHex: Hex | null
75
79
  /** ECDSA recovery ID */
@@ -80,8 +84,9 @@ export type TransactionBase<TQuantity = bigint, TIndex = number> = {
80
84
  export type TransactionLegacy<
81
85
  TQuantity = bigint,
82
86
  TIndex = number,
87
+ TPending extends boolean = boolean,
83
88
  TType = 'legacy',
84
- > = TransactionBase<TQuantity, TIndex> &
89
+ > = TransactionBase<TQuantity, TIndex, TPending> &
85
90
  FeeValuesLegacy<TQuantity> & {
86
91
  accessList?: never
87
92
  chainId?: TIndex
@@ -90,8 +95,9 @@ export type TransactionLegacy<
90
95
  export type TransactionEIP2930<
91
96
  TQuantity = bigint,
92
97
  TIndex = number,
98
+ TPending extends boolean = boolean,
93
99
  TType = 'eip2930',
94
- > = TransactionBase<TQuantity, TIndex> &
100
+ > = TransactionBase<TQuantity, TIndex, TPending> &
95
101
  FeeValuesLegacy<TQuantity> & {
96
102
  accessList: AccessList
97
103
  chainId: TIndex
@@ -100,17 +106,22 @@ export type TransactionEIP2930<
100
106
  export type TransactionEIP1559<
101
107
  TQuantity = bigint,
102
108
  TIndex = number,
109
+ TPending extends boolean = boolean,
103
110
  TType = 'eip1559',
104
- > = TransactionBase<TQuantity, TIndex> &
111
+ > = TransactionBase<TQuantity, TIndex, TPending> &
105
112
  FeeValuesEIP1559<TQuantity> & {
106
113
  accessList: AccessList
107
114
  chainId: TIndex
108
115
  type: TType
109
116
  }
110
- export type Transaction<TQuantity = bigint, TIndex = number> =
111
- | TransactionLegacy<TQuantity, TIndex>
112
- | TransactionEIP2930<TQuantity, TIndex>
113
- | TransactionEIP1559<TQuantity, TIndex>
117
+ export type Transaction<
118
+ TQuantity = bigint,
119
+ TIndex = number,
120
+ TPending extends boolean = boolean,
121
+ > =
122
+ | TransactionLegacy<TQuantity, TIndex, TPending>
123
+ | TransactionEIP2930<TQuantity, TIndex, TPending>
124
+ | TransactionEIP1559<TQuantity, TIndex, TPending>
114
125
 
115
126
  export type TransactionRequestBase<TQuantity = bigint, TIndex = number> = {
116
127
  /** Contract code or a hashed method call with encoded args */
@@ -1,14 +1,41 @@
1
- import type { Block } from '../../types/block.js'
1
+ import type { Block, BlockTag } from '../../types/block.js'
2
2
  import type { Chain } from '../../types/chain.js'
3
- import type { ExtractFormatterReturnType } from '../../types/formatter.js'
3
+ import type {
4
+ ExtractFormatterExclude,
5
+ ExtractFormatterReturnType,
6
+ } from '../../types/formatter.js'
7
+ import type { Hash } from '../../types/misc.js'
4
8
  import type { RpcBlock } from '../../types/rpc.js'
9
+ import type { Prettify } from '../../types/utils.js'
5
10
 
6
11
  import { defineFormatter } from './formatter.js'
7
- import { formatTransaction } from './transaction.js'
12
+ import { type FormattedTransaction, formatTransaction } from './transaction.js'
13
+
14
+ type BlockPendingDependencies = 'hash' | 'logsBloom' | 'nonce' | 'number'
8
15
 
9
16
  export type FormattedBlock<
10
17
  TChain extends Chain | undefined = Chain | undefined,
11
- > = ExtractFormatterReturnType<TChain, 'block', Block>
18
+ TIncludeTransactions extends boolean = boolean,
19
+ TBlockTag extends BlockTag = BlockTag,
20
+ _FormatterReturnType = ExtractFormatterReturnType<
21
+ TChain,
22
+ 'block',
23
+ Block<bigint, TIncludeTransactions>
24
+ >,
25
+ _ExcludedPendingDependencies extends string = BlockPendingDependencies &
26
+ ExtractFormatterExclude<TChain, 'block'>,
27
+ _Formatted = Omit<_FormatterReturnType, BlockPendingDependencies> & {
28
+ [K in _ExcludedPendingDependencies]: never
29
+ } & Pick<
30
+ Block<bigint, TIncludeTransactions, TBlockTag>,
31
+ BlockPendingDependencies
32
+ >,
33
+ _Transactions = TIncludeTransactions extends true
34
+ ? Prettify<FormattedTransaction<TChain, TBlockTag>>[]
35
+ : Hash[],
36
+ > = Omit<_Formatted, 'transactions'> & {
37
+ transactions: _Transactions
38
+ }
12
39
 
13
40
  export function formatBlock(block: Partial<RpcBlock>) {
14
41
  const transactions = block.transactions?.map((transaction) => {
@@ -16,6 +16,7 @@ export function defineFormatter<TType extends string, TParameters, TReturnType>(
16
16
  format: (_: TOverrideParameters) => TOverrideReturnType
17
17
  }) => {
18
18
  return {
19
+ exclude,
19
20
  format: (args: TParameters & TOverrideParameters) => {
20
21
  const formatted = format(args)
21
22
  if (exclude) {
@@ -1,13 +1,36 @@
1
+ import type { BlockTag } from '../../types/block.js'
1
2
  import type { Chain } from '../../types/chain.js'
2
- import type { ExtractFormatterReturnType } from '../../types/formatter.js'
3
+ import type {
4
+ ExtractFormatterExclude,
5
+ ExtractFormatterReturnType,
6
+ } from '../../types/formatter.js'
3
7
  import type { RpcTransaction } from '../../types/rpc.js'
4
8
  import type { Transaction } from '../../types/transaction.js'
9
+ import type { UnionOmit } from '../../types/utils.js'
5
10
  import { hexToNumber } from '../encoding/fromHex.js'
6
11
  import { defineFormatter } from './formatter.js'
7
12
 
13
+ type TransactionPendingDependencies =
14
+ | 'blockHash'
15
+ | 'blockNumber'
16
+ | 'transactionIndex'
17
+
8
18
  export type FormattedTransaction<
9
19
  TChain extends Chain | undefined = Chain | undefined,
10
- > = ExtractFormatterReturnType<TChain, 'transaction', Transaction>
20
+ TBlockTag extends BlockTag = BlockTag,
21
+ _FormatterReturnType = ExtractFormatterReturnType<
22
+ TChain,
23
+ 'transaction',
24
+ Transaction
25
+ >,
26
+ _ExcludedPendingDependencies extends string = TransactionPendingDependencies &
27
+ ExtractFormatterExclude<TChain, 'transaction'>,
28
+ > = UnionOmit<_FormatterReturnType, TransactionPendingDependencies> & {
29
+ [K in _ExcludedPendingDependencies]: never
30
+ } & Pick<
31
+ Transaction<bigint, number, TBlockTag extends 'pending' ? true : false>,
32
+ TransactionPendingDependencies
33
+ >
11
34
 
12
35
  export const transactionType = {
13
36
  '0x0': 'legacy',
@@ -27,8 +27,8 @@ export function getCache<TData>(cacheKey: string) {
27
27
  export type WithCacheParameters = {
28
28
  /** The key to cache the data against. */
29
29
  cacheKey: string
30
- /** The maximum age (in ms) of the cached value. Default: Infinity (no expiry) */
31
- maxAge?: number
30
+ /** The time that cached data will remain in memory. Default: Infinity (no expiry) */
31
+ cacheTime?: number
32
32
  }
33
33
 
34
34
  /**
@@ -37,7 +37,7 @@ export type WithCacheParameters = {
37
37
  */
38
38
  export async function withCache<TData>(
39
39
  fn: () => Promise<TData>,
40
- { cacheKey, maxAge = Infinity }: WithCacheParameters,
40
+ { cacheKey, cacheTime = Infinity }: WithCacheParameters,
41
41
  ) {
42
42
  const cache = getCache<TData>(cacheKey)
43
43
 
@@ -45,9 +45,9 @@ export async function withCache<TData>(
45
45
  // and do not invoke the promise.
46
46
  // If the max age is 0, the cache is disabled.
47
47
  const response = cache.response.get()
48
- if (response && maxAge > 0) {
48
+ if (response && cacheTime > 0) {
49
49
  const age = new Date().getTime() - response.created.getTime()
50
- if (age < maxAge) return response.data
50
+ if (age < cacheTime) return response.data
51
51
  }
52
52
 
53
53
  let promise = cache.promise.get()
@@ -0,0 +1,20 @@
1
+ import { secp256k1 } from '@noble/curves/secp256k1'
2
+
3
+ import type { Hex, Signature } from '../../types/misc.js'
4
+ import { numberToHex } from '../../utils/encoding/toHex.js'
5
+
6
+ /**
7
+ * @description Parses a hex formatted signature into a structured signature.
8
+ *
9
+ * @param signatureHex Signature in hex format.
10
+ * @returns The structured signature.
11
+ *
12
+ * @example
13
+ * hexToSignature('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')
14
+ * // { r: '0x...', s: '0x...', v: 28n }
15
+ */
16
+ export function hexToSignature(signatureHex: Hex): Signature {
17
+ const { r, s } = secp256k1.Signature.fromCompact(signatureHex.slice(2, 130))
18
+ const v = BigInt(`0x${signatureHex.slice(130)}`)
19
+ return { r: numberToHex(r), s: numberToHex(s), v }
20
+ }
@@ -0,0 +1,26 @@
1
+ import { secp256k1 } from '@noble/curves/secp256k1'
2
+
3
+ import type { Hex, Signature } from '../../types/misc.js'
4
+ import { hexToBigInt } from '../../utils/encoding/fromHex.js'
5
+ import { toHex } from '../../utils/encoding/toHex.js'
6
+
7
+ /**
8
+ * @description Converts a signature into hex format.
9
+ *
10
+ * @param signature The signature to convert.
11
+ * @returns The signature in hex format.
12
+ *
13
+ * @example
14
+ * signatureToHex({
15
+ * r: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf',
16
+ * s: '0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8',
17
+ * v: 28n
18
+ * })
19
+ * // "0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c"
20
+ */
21
+ export function signatureToHex({ r, s, v }: Signature): Hex {
22
+ return `0x${new secp256k1.Signature(
23
+ hexToBigInt(r),
24
+ hexToBigInt(s),
25
+ ).toCompactHex()}${toHex(v).slice(2)}`
26
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"signatureToHex.js","sourceRoot":"","sources":["../../../../src/accounts/utils/signatureToHex.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAGnD,gEAA6D;AAC7D,4DAAqD;AAErD,SAAgB,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa;IACnD,OAAO,KAAK,IAAI,qBAAS,CAAC,SAAS,CACjC,IAAA,wBAAW,EAAC,CAAC,CAAC,EACd,IAAA,wBAAW,EAAC,CAAC,CAAC,CACf,CAAC,YAAY,EAAE,GAAG,IAAA,gBAAK,EAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACxC,CAAC;AALD,wCAKC"}
@@ -1,7 +0,0 @@
1
- import { secp256k1 } from '@noble/curves/secp256k1';
2
- import { hexToBigInt } from '../../utils/encoding/fromHex.js';
3
- import { toHex } from '../../utils/encoding/toHex.js';
4
- export function signatureToHex({ r, s, v }) {
5
- return `0x${new secp256k1.Signature(hexToBigInt(r), hexToBigInt(s)).toCompactHex()}${toHex(v).slice(2)}`;
6
- }
7
- //# sourceMappingURL=signatureToHex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signatureToHex.js","sourceRoot":"","sources":["../../../../src/accounts/utils/signatureToHex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAErD,MAAM,UAAU,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa;IACnD,OAAO,KAAK,IAAI,SAAS,CAAC,SAAS,CACjC,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACxC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Hex, Signature } from '../../types/misc.js';
2
- export declare function signatureToHex({ r, s, v }: Signature): Hex;
3
- //# sourceMappingURL=signatureToHex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signatureToHex.d.ts","sourceRoot":"","sources":["../../../../src/accounts/utils/signatureToHex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAIzD,wBAAgB,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,GAAG,CAK1D"}
@@ -1,12 +0,0 @@
1
- import { secp256k1 } from '@noble/curves/secp256k1'
2
-
3
- import type { Hex, Signature } from '../../types/misc.js'
4
- import { hexToBigInt } from '../../utils/encoding/fromHex.js'
5
- import { toHex } from '../../utils/encoding/toHex.js'
6
-
7
- export function signatureToHex({ r, s, v }: Signature): Hex {
8
- return `0x${new secp256k1.Signature(
9
- hexToBigInt(r),
10
- hexToBigInt(s),
11
- ).toCompactHex()}${toHex(v).slice(2)}`
12
- }