viem 1.4.2 → 1.5.2

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 (225) hide show
  1. package/dist/cjs/accounts/index.js +1 -1
  2. package/dist/cjs/accounts/index.js.map +1 -1
  3. package/dist/cjs/accounts/utils/signMessage.js +1 -1
  4. package/dist/cjs/accounts/utils/signMessage.js.map +1 -1
  5. package/dist/cjs/accounts/utils/signTypedData.js +1 -1
  6. package/dist/cjs/accounts/utils/signTypedData.js.map +1 -1
  7. package/dist/cjs/actions/public/createContractEventFilter.js.map +1 -1
  8. package/dist/cjs/actions/public/createEventFilter.js +16 -8
  9. package/dist/cjs/actions/public/createEventFilter.js.map +1 -1
  10. package/dist/cjs/actions/public/getBlock.js +3 -1
  11. package/dist/cjs/actions/public/getBlock.js.map +1 -1
  12. package/dist/cjs/actions/public/getBlockNumber.js +2 -2
  13. package/dist/cjs/actions/public/getBlockNumber.js.map +1 -1
  14. package/dist/cjs/actions/public/getFilterChanges.js.map +1 -1
  15. package/dist/cjs/actions/public/getFilterLogs.js +1 -1
  16. package/dist/cjs/actions/public/getFilterLogs.js.map +1 -1
  17. package/dist/cjs/actions/public/getLogs.js +16 -10
  18. package/dist/cjs/actions/public/getLogs.js.map +1 -1
  19. package/dist/cjs/actions/public/getTransaction.js +2 -1
  20. package/dist/cjs/actions/public/getTransaction.js.map +1 -1
  21. package/dist/cjs/actions/public/watchBlockNumber.js +1 -1
  22. package/dist/cjs/actions/public/watchBlockNumber.js.map +1 -1
  23. package/dist/cjs/actions/public/watchBlocks.js +2 -1
  24. package/dist/cjs/actions/public/watchBlocks.js.map +1 -1
  25. package/dist/cjs/actions/public/watchContractEvent.js +3 -0
  26. package/dist/cjs/actions/public/watchContractEvent.js.map +1 -1
  27. package/dist/cjs/actions/public/watchEvent.js +7 -2
  28. package/dist/cjs/actions/public/watchEvent.js.map +1 -1
  29. package/dist/cjs/clients/createClient.js +2 -1
  30. package/dist/cjs/clients/createClient.js.map +1 -1
  31. package/dist/cjs/clients/createPublicClient.js.map +1 -1
  32. package/dist/cjs/clients/createTestClient.js.map +1 -1
  33. package/dist/cjs/clients/createWalletClient.js.map +1 -1
  34. package/dist/cjs/clients/decorators/public.js.map +1 -1
  35. package/dist/cjs/constants/number.js +101 -0
  36. package/dist/cjs/constants/number.js.map +1 -0
  37. package/dist/cjs/errors/version.js +1 -1
  38. package/dist/cjs/index.js +110 -7
  39. package/dist/cjs/index.js.map +1 -1
  40. package/dist/cjs/utils/formatters/block.js.map +1 -1
  41. package/dist/cjs/utils/formatters/formatter.js +1 -0
  42. package/dist/cjs/utils/formatters/formatter.js.map +1 -1
  43. package/dist/cjs/utils/formatters/transaction.js.map +1 -1
  44. package/dist/cjs/utils/hash/hashFunction.js +3 -2
  45. package/dist/cjs/utils/hash/hashFunction.js.map +1 -1
  46. package/dist/cjs/utils/promise/withCache.js +3 -3
  47. package/dist/cjs/utils/promise/withCache.js.map +1 -1
  48. package/dist/cjs/utils/signature/hexToSignature.js +12 -0
  49. package/dist/cjs/utils/signature/hexToSignature.js.map +1 -0
  50. package/dist/cjs/utils/signature/signatureToHex.js.map +1 -0
  51. package/dist/esm/accounts/index.js +1 -1
  52. package/dist/esm/accounts/index.js.map +1 -1
  53. package/dist/esm/accounts/utils/signMessage.js +1 -1
  54. package/dist/esm/accounts/utils/signMessage.js.map +1 -1
  55. package/dist/esm/accounts/utils/signTypedData.js +1 -1
  56. package/dist/esm/accounts/utils/signTypedData.js.map +1 -1
  57. package/dist/esm/actions/public/createContractEventFilter.js.map +1 -1
  58. package/dist/esm/actions/public/createEventFilter.js +16 -8
  59. package/dist/esm/actions/public/createEventFilter.js.map +1 -1
  60. package/dist/esm/actions/public/getBlock.js +3 -1
  61. package/dist/esm/actions/public/getBlock.js.map +1 -1
  62. package/dist/esm/actions/public/getBlockNumber.js +2 -2
  63. package/dist/esm/actions/public/getBlockNumber.js.map +1 -1
  64. package/dist/esm/actions/public/getFilterChanges.js.map +1 -1
  65. package/dist/esm/actions/public/getFilterLogs.js +1 -1
  66. package/dist/esm/actions/public/getFilterLogs.js.map +1 -1
  67. package/dist/esm/actions/public/getLogs.js +16 -10
  68. package/dist/esm/actions/public/getLogs.js.map +1 -1
  69. package/dist/esm/actions/public/getTransaction.js +2 -1
  70. package/dist/esm/actions/public/getTransaction.js.map +1 -1
  71. package/dist/esm/actions/public/watchBlockNumber.js +1 -1
  72. package/dist/esm/actions/public/watchBlockNumber.js.map +1 -1
  73. package/dist/esm/actions/public/watchBlocks.js +2 -1
  74. package/dist/esm/actions/public/watchBlocks.js.map +1 -1
  75. package/dist/esm/actions/public/watchContractEvent.js +5 -0
  76. package/dist/esm/actions/public/watchContractEvent.js.map +1 -1
  77. package/dist/esm/actions/public/watchEvent.js +9 -2
  78. package/dist/esm/actions/public/watchEvent.js.map +1 -1
  79. package/dist/esm/clients/createClient.js +2 -1
  80. package/dist/esm/clients/createClient.js.map +1 -1
  81. package/dist/esm/clients/createPublicClient.js.map +1 -1
  82. package/dist/esm/clients/createTestClient.js.map +1 -1
  83. package/dist/esm/clients/createWalletClient.js.map +1 -1
  84. package/dist/esm/clients/decorators/public.js.map +1 -1
  85. package/dist/esm/constants/number.js +97 -0
  86. package/dist/esm/constants/number.js.map +1 -0
  87. package/dist/esm/errors/version.js +1 -1
  88. package/dist/esm/index.js +4 -1
  89. package/dist/esm/index.js.map +1 -1
  90. package/dist/esm/utils/formatters/block.js.map +1 -1
  91. package/dist/esm/utils/formatters/formatter.js +1 -0
  92. package/dist/esm/utils/formatters/formatter.js.map +1 -1
  93. package/dist/esm/utils/formatters/transaction.js.map +1 -1
  94. package/dist/esm/utils/hash/hashFunction.js +3 -2
  95. package/dist/esm/utils/hash/hashFunction.js.map +1 -1
  96. package/dist/esm/utils/promise/withCache.js +3 -3
  97. package/dist/esm/utils/promise/withCache.js.map +1 -1
  98. package/dist/esm/utils/signature/hexToSignature.js +18 -0
  99. package/dist/esm/utils/signature/hexToSignature.js.map +1 -0
  100. package/dist/esm/utils/signature/signatureToHex.js +21 -0
  101. package/dist/esm/utils/signature/signatureToHex.js.map +1 -0
  102. package/dist/types/accounts/index.d.ts +1 -1
  103. package/dist/types/accounts/index.d.ts.map +1 -1
  104. package/dist/types/actions/public/createContractEventFilter.d.ts +5 -5
  105. package/dist/types/actions/public/createContractEventFilter.d.ts.map +1 -1
  106. package/dist/types/actions/public/createEventFilter.d.ts +20 -7
  107. package/dist/types/actions/public/createEventFilter.d.ts.map +1 -1
  108. package/dist/types/actions/public/getBlock.d.ts +5 -5
  109. package/dist/types/actions/public/getBlock.d.ts.map +1 -1
  110. package/dist/types/actions/public/getBlockNumber.d.ts +4 -2
  111. package/dist/types/actions/public/getBlockNumber.d.ts.map +1 -1
  112. package/dist/types/actions/public/getFilterChanges.d.ts +5 -8
  113. package/dist/types/actions/public/getFilterChanges.d.ts.map +1 -1
  114. package/dist/types/actions/public/getFilterLogs.d.ts +5 -4
  115. package/dist/types/actions/public/getFilterLogs.d.ts.map +1 -1
  116. package/dist/types/actions/public/getLogs.d.ts +17 -6
  117. package/dist/types/actions/public/getLogs.d.ts.map +1 -1
  118. package/dist/types/actions/public/getTransaction.d.ts +4 -4
  119. package/dist/types/actions/public/getTransaction.d.ts.map +1 -1
  120. package/dist/types/actions/public/watchBlocks.d.ts +10 -10
  121. package/dist/types/actions/public/watchBlocks.d.ts.map +1 -1
  122. package/dist/types/actions/public/watchContractEvent.d.ts +1 -1
  123. package/dist/types/actions/public/watchContractEvent.d.ts.map +1 -1
  124. package/dist/types/actions/public/watchEvent.d.ts +19 -8
  125. package/dist/types/actions/public/watchEvent.d.ts.map +1 -1
  126. package/dist/types/chains/formatters/celo.d.ts +4 -0
  127. package/dist/types/chains/formatters/celo.d.ts.map +1 -1
  128. package/dist/types/chains/formatters/optimism.d.ts +5 -3
  129. package/dist/types/chains/formatters/optimism.d.ts.map +1 -1
  130. package/dist/types/chains/index.d.ts +44 -12
  131. package/dist/types/chains/index.d.ts.map +1 -1
  132. package/dist/types/clients/createClient.d.ts +7 -0
  133. package/dist/types/clients/createClient.d.ts.map +1 -1
  134. package/dist/types/clients/createPublicClient.d.ts +1 -1
  135. package/dist/types/clients/createPublicClient.d.ts.map +1 -1
  136. package/dist/types/clients/createTestClient.d.ts +1 -1
  137. package/dist/types/clients/createTestClient.d.ts.map +1 -1
  138. package/dist/types/clients/createWalletClient.d.ts +1 -1
  139. package/dist/types/clients/createWalletClient.d.ts.map +1 -1
  140. package/dist/types/clients/decorators/public.d.ts +10 -9
  141. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  142. package/dist/types/constants/number.d.ts +97 -0
  143. package/dist/types/constants/number.d.ts.map +1 -0
  144. package/dist/types/errors/version.d.ts +1 -1
  145. package/dist/types/index.d.ts +4 -1
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/dist/types/types/block.d.ts +7 -7
  148. package/dist/types/types/block.d.ts.map +1 -1
  149. package/dist/types/types/contract.d.ts +1 -1
  150. package/dist/types/types/contract.d.ts.map +1 -1
  151. package/dist/types/types/filter.d.ts +7 -3
  152. package/dist/types/types/filter.d.ts.map +1 -1
  153. package/dist/types/types/formatter.d.ts +3 -0
  154. package/dist/types/types/formatter.d.ts.map +1 -1
  155. package/dist/types/types/log.d.ts +8 -8
  156. package/dist/types/types/log.d.ts.map +1 -1
  157. package/dist/types/types/misc.d.ts.map +1 -1
  158. package/dist/types/types/rpc.d.ts +3 -3
  159. package/dist/types/types/rpc.d.ts.map +1 -1
  160. package/dist/types/types/transaction.d.ts +8 -8
  161. package/dist/types/types/transaction.d.ts.map +1 -1
  162. package/dist/types/utils/formatters/block.d.ts +13 -3
  163. package/dist/types/utils/formatters/block.d.ts.map +1 -1
  164. package/dist/types/utils/formatters/formatter.d.ts +1 -0
  165. package/dist/types/utils/formatters/formatter.d.ts.map +1 -1
  166. package/dist/types/utils/formatters/transaction.d.ts +10 -3
  167. package/dist/types/utils/formatters/transaction.d.ts.map +1 -1
  168. package/dist/types/utils/formatters/transactionReceipt.d.ts +1 -0
  169. package/dist/types/utils/formatters/transactionReceipt.d.ts.map +1 -1
  170. package/dist/types/utils/formatters/transactionRequest.d.ts +1 -0
  171. package/dist/types/utils/formatters/transactionRequest.d.ts.map +1 -1
  172. package/dist/types/utils/hash/hashFunction.d.ts +1 -1
  173. package/dist/types/utils/hash/hashFunction.d.ts.map +1 -1
  174. package/dist/types/utils/promise/withCache.d.ts +3 -3
  175. package/dist/types/utils/promise/withCache.d.ts.map +1 -1
  176. package/dist/types/utils/signature/hexToSignature.d.ts +13 -0
  177. package/dist/types/utils/signature/hexToSignature.d.ts.map +1 -0
  178. package/dist/types/utils/signature/signatureToHex.d.ts +17 -0
  179. package/dist/types/utils/signature/signatureToHex.d.ts.map +1 -0
  180. package/package.json +2 -1
  181. package/src/accounts/index.ts +1 -1
  182. package/src/accounts/utils/signMessage.ts +1 -1
  183. package/src/accounts/utils/signTypedData.ts +1 -1
  184. package/src/actions/public/createContractEventFilter.ts +30 -7
  185. package/src/actions/public/createEventFilter.ts +78 -24
  186. package/src/actions/public/getBlock.ts +18 -8
  187. package/src/actions/public/getBlockNumber.ts +5 -3
  188. package/src/actions/public/getFilterChanges.ts +46 -10
  189. package/src/actions/public/getFilterLogs.ts +26 -10
  190. package/src/actions/public/getLogs.ts +73 -18
  191. package/src/actions/public/getTransaction.ts +15 -8
  192. package/src/actions/public/watchBlockNumber.ts +1 -1
  193. package/src/actions/public/watchBlocks.ts +37 -18
  194. package/src/actions/public/watchContractEvent.ts +9 -5
  195. package/src/actions/public/watchEvent.ts +54 -17
  196. package/src/clients/createClient.ts +9 -0
  197. package/src/clients/createPublicClient.ts +7 -1
  198. package/src/clients/createTestClient.ts +7 -1
  199. package/src/clients/createWalletClient.ts +7 -1
  200. package/src/clients/decorators/public.ts +114 -25
  201. package/src/constants/number.ts +98 -0
  202. package/src/errors/version.ts +1 -1
  203. package/src/index.ts +101 -1
  204. package/src/types/block.ts +25 -10
  205. package/src/types/contract.ts +7 -3
  206. package/src/types/filter.ts +32 -26
  207. package/src/types/formatter.ts +9 -0
  208. package/src/types/log.ts +13 -8
  209. package/src/types/misc.ts +3 -0
  210. package/src/types/rpc.ts +20 -6
  211. package/src/types/transaction.ts +22 -11
  212. package/src/utils/formatters/block.ts +31 -4
  213. package/src/utils/formatters/formatter.ts +1 -0
  214. package/src/utils/formatters/transaction.ts +25 -2
  215. package/src/utils/hash/hashFunction.ts +3 -2
  216. package/src/utils/promise/withCache.ts +5 -5
  217. package/src/utils/signature/hexToSignature.ts +20 -0
  218. package/src/utils/signature/signatureToHex.ts +26 -0
  219. package/dist/cjs/accounts/utils/signatureToHex.js.map +0 -1
  220. package/dist/esm/accounts/utils/signatureToHex.js +0 -7
  221. package/dist/esm/accounts/utils/signatureToHex.js.map +0 -1
  222. package/dist/types/accounts/utils/signatureToHex.d.ts +0 -3
  223. package/dist/types/accounts/utils/signatureToHex.d.ts.map +0 -1
  224. package/src/accounts/utils/signatureToHex.ts +0 -12
  225. /package/dist/cjs/{accounts/utils → utils/signature}/signatureToHex.js +0 -0
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',
@@ -1,3 +1,4 @@
1
+ import { formatAbiItem } from '../abi/formatAbiItem.js'
1
2
  import {
2
3
  extractFunctionName,
3
4
  extractFunctionParams,
@@ -15,6 +16,6 @@ export function hashFunction(def: string) {
15
16
  return hash(`${name}(${params.map(({ type }) => type).join(',')})`)
16
17
  }
17
18
 
18
- export function hashAbiItem(def: AbiFunction | AbiEvent) {
19
- return hash(`${def.name}(${def.inputs.map(({ type }) => type).join(',')})`)
19
+ export function hashAbiItem(abiItem: AbiFunction | AbiEvent) {
20
+ return hash(formatAbiItem(abiItem))
20
21
  }
@@ -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
- }