viem 1.5.3 → 1.6.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 (213) hide show
  1. package/chains/utils/package.json +5 -0
  2. package/dist/cjs/accounts/index.js +5 -1
  3. package/dist/cjs/accounts/index.js.map +1 -1
  4. package/dist/cjs/accounts/utils/privateKeyToAddress.js +12 -0
  5. package/dist/cjs/accounts/utils/privateKeyToAddress.js.map +1 -0
  6. package/dist/cjs/accounts/utils/signTransaction.js.map +1 -1
  7. package/dist/cjs/actions/public/estimateContractGas.js +1 -1
  8. package/dist/cjs/actions/public/estimateContractGas.js.map +1 -1
  9. package/dist/cjs/actions/public/estimateGas.js +3 -1
  10. package/dist/cjs/actions/public/estimateGas.js.map +1 -1
  11. package/dist/cjs/actions/public/watchContractEvent.js +134 -67
  12. package/dist/cjs/actions/public/watchContractEvent.js.map +1 -1
  13. package/dist/cjs/actions/public/watchEvent.js +136 -62
  14. package/dist/cjs/actions/public/watchEvent.js.map +1 -1
  15. package/dist/cjs/actions/wallet/sendTransaction.js.map +1 -1
  16. package/dist/cjs/actions/wallet/writeContract.js.map +1 -1
  17. package/dist/cjs/chains/{formatters/celo.js → celo/formatters.js} +1 -1
  18. package/dist/cjs/chains/celo/formatters.js.map +1 -0
  19. package/dist/cjs/chains/{serializers/celo.js → celo/serializers.js} +1 -1
  20. package/dist/cjs/chains/celo/serializers.js.map +1 -0
  21. package/dist/cjs/{types/formatter.js → chains/celo/types.js} +1 -1
  22. package/dist/cjs/chains/celo/types.js.map +1 -0
  23. package/dist/cjs/chains/index.js +30 -15
  24. package/dist/cjs/chains/index.js.map +1 -1
  25. package/dist/cjs/chains/optimism/fees.js +7 -0
  26. package/dist/cjs/chains/optimism/fees.js.map +1 -0
  27. package/dist/cjs/chains/{formatters/optimism.js → optimism/formatters.js} +13 -1
  28. package/dist/cjs/chains/optimism/formatters.js.map +1 -0
  29. package/dist/cjs/{types/serializer.js → chains/optimism/types.js} +1 -1
  30. package/dist/cjs/chains/optimism/types.js.map +1 -0
  31. package/dist/cjs/chains/utils.js +11 -0
  32. package/dist/cjs/chains/utils.js.map +1 -0
  33. package/dist/cjs/errors/node.js +1 -1
  34. package/dist/cjs/errors/node.js.map +1 -1
  35. package/dist/cjs/errors/version.js +1 -1
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/utils/chain.js +5 -3
  38. package/dist/cjs/utils/chain.js.map +1 -1
  39. package/dist/cjs/utils/formatters/block.js.map +1 -1
  40. package/dist/cjs/utils/formatters/extract.js.map +1 -1
  41. package/dist/cjs/utils/formatters/formatter.js.map +1 -1
  42. package/dist/cjs/utils/formatters/transaction.js.map +1 -1
  43. package/dist/cjs/utils/formatters/transactionReceipt.js.map +1 -1
  44. package/dist/cjs/utils/formatters/transactionRequest.js.map +1 -1
  45. package/dist/cjs/utils/transaction/prepareRequest.js +19 -12
  46. package/dist/cjs/utils/transaction/prepareRequest.js.map +1 -1
  47. package/dist/esm/accounts/index.js +2 -0
  48. package/dist/esm/accounts/index.js.map +1 -1
  49. package/dist/esm/accounts/utils/privateKeyToAddress.js +15 -0
  50. package/dist/esm/accounts/utils/privateKeyToAddress.js.map +1 -0
  51. package/dist/esm/accounts/utils/signTransaction.js.map +1 -1
  52. package/dist/esm/actions/public/estimateContractGas.js +1 -1
  53. package/dist/esm/actions/public/estimateContractGas.js.map +1 -1
  54. package/dist/esm/actions/public/estimateGas.js +4 -2
  55. package/dist/esm/actions/public/estimateGas.js.map +1 -1
  56. package/dist/esm/actions/public/watchContractEvent.js +145 -76
  57. package/dist/esm/actions/public/watchContractEvent.js.map +1 -1
  58. package/dist/esm/actions/public/watchEvent.js +146 -70
  59. package/dist/esm/actions/public/watchEvent.js.map +1 -1
  60. package/dist/esm/actions/wallet/sendTransaction.js +1 -1
  61. package/dist/esm/actions/wallet/sendTransaction.js.map +1 -1
  62. package/dist/esm/actions/wallet/writeContract.js.map +1 -1
  63. package/dist/esm/chains/{formatters/celo.js → celo/formatters.js} +2 -2
  64. package/dist/esm/chains/celo/formatters.js.map +1 -0
  65. package/dist/esm/chains/{serializers/celo.js → celo/serializers.js} +1 -1
  66. package/dist/esm/chains/celo/serializers.js.map +1 -0
  67. package/dist/esm/chains/celo/types.js +2 -0
  68. package/dist/esm/chains/celo/types.js.map +1 -0
  69. package/dist/esm/chains/index.js +22 -7
  70. package/dist/esm/chains/index.js.map +1 -1
  71. package/dist/esm/chains/optimism/fees.js +4 -0
  72. package/dist/esm/chains/optimism/fees.js.map +1 -0
  73. package/dist/esm/chains/{formatters/optimism.js → optimism/formatters.js} +15 -2
  74. package/dist/esm/chains/optimism/formatters.js.map +1 -0
  75. package/dist/esm/chains/optimism/types.js +2 -0
  76. package/dist/esm/chains/optimism/types.js.map +1 -0
  77. package/dist/esm/chains/utils.js +4 -0
  78. package/dist/esm/chains/utils.js.map +1 -0
  79. package/dist/esm/errors/node.js +1 -1
  80. package/dist/esm/errors/node.js.map +1 -1
  81. package/dist/esm/errors/version.js +1 -1
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/utils/chain.js +5 -3
  84. package/dist/esm/utils/chain.js.map +1 -1
  85. package/dist/esm/utils/formatters/block.js.map +1 -1
  86. package/dist/esm/utils/formatters/extract.js.map +1 -1
  87. package/dist/esm/utils/formatters/formatter.js.map +1 -1
  88. package/dist/esm/utils/formatters/transaction.js.map +1 -1
  89. package/dist/esm/utils/formatters/transactionReceipt.js.map +1 -1
  90. package/dist/esm/utils/formatters/transactionRequest.js.map +1 -1
  91. package/dist/esm/utils/transaction/prepareRequest.js +20 -13
  92. package/dist/esm/utils/transaction/prepareRequest.js.map +1 -1
  93. package/dist/types/accounts/index.d.ts +2 -0
  94. package/dist/types/accounts/index.d.ts.map +1 -1
  95. package/dist/types/accounts/utils/privateKeyToAddress.d.ts +11 -0
  96. package/dist/types/accounts/utils/privateKeyToAddress.d.ts.map +1 -0
  97. package/dist/types/accounts/utils/signTransaction.d.ts +2 -2
  98. package/dist/types/accounts/utils/signTransaction.d.ts.map +1 -1
  99. package/dist/types/actions/public/estimateGas.d.ts.map +1 -1
  100. package/dist/types/actions/public/getTransactionReceipt.d.ts +1 -1
  101. package/dist/types/actions/public/getTransactionReceipt.d.ts.map +1 -1
  102. package/dist/types/actions/public/simulateContract.d.ts +2 -2
  103. package/dist/types/actions/public/simulateContract.d.ts.map +1 -1
  104. package/dist/types/actions/public/watchContractEvent.d.ts +32 -6
  105. package/dist/types/actions/public/watchContractEvent.d.ts.map +1 -1
  106. package/dist/types/actions/public/watchEvent.d.ts +32 -9
  107. package/dist/types/actions/public/watchEvent.d.ts.map +1 -1
  108. package/dist/types/actions/wallet/deployContract.d.ts +1 -1
  109. package/dist/types/actions/wallet/deployContract.d.ts.map +1 -1
  110. package/dist/types/actions/wallet/sendTransaction.d.ts +2 -2
  111. package/dist/types/actions/wallet/sendTransaction.d.ts.map +1 -1
  112. package/dist/types/actions/wallet/writeContract.d.ts +4 -2
  113. package/dist/types/actions/wallet/writeContract.d.ts.map +1 -1
  114. package/dist/types/chains/{formatters/celo.d.ts → celo/formatters.d.ts} +26 -85
  115. package/dist/types/chains/celo/formatters.d.ts.map +1 -0
  116. package/dist/types/chains/{serializers/celo.d.ts → celo/serializers.d.ts} +4 -4
  117. package/dist/types/chains/celo/serializers.d.ts.map +1 -0
  118. package/dist/types/chains/celo/types.d.ts +60 -0
  119. package/dist/types/chains/celo/types.d.ts.map +1 -0
  120. package/dist/types/chains/index.d.ts +2527 -2754
  121. package/dist/types/chains/index.d.ts.map +1 -1
  122. package/dist/types/chains/optimism/fees.d.ts +4 -0
  123. package/dist/types/chains/optimism/fees.d.ts.map +1 -0
  124. package/dist/types/chains/{formatters/optimism.d.ts → optimism/formatters.d.ts} +77 -54
  125. package/dist/types/chains/optimism/formatters.d.ts.map +1 -0
  126. package/dist/types/chains/optimism/types.d.ts +53 -0
  127. package/dist/types/chains/optimism/types.d.ts.map +1 -0
  128. package/dist/types/chains/utils.d.ts +6 -0
  129. package/dist/types/chains/utils.d.ts.map +1 -0
  130. package/dist/types/clients/decorators/public.d.ts +1 -1
  131. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  132. package/dist/types/errors/node.d.ts.map +1 -1
  133. package/dist/types/errors/version.d.ts +1 -1
  134. package/dist/types/index.d.ts +13 -3
  135. package/dist/types/index.d.ts.map +1 -1
  136. package/dist/types/types/chain.d.ts +52 -8
  137. package/dist/types/types/chain.d.ts.map +1 -1
  138. package/dist/types/types/rpc.d.ts +1 -1
  139. package/dist/types/types/rpc.d.ts.map +1 -1
  140. package/dist/types/types/utils.d.ts +10 -0
  141. package/dist/types/types/utils.d.ts.map +1 -1
  142. package/dist/types/utils/chain.d.ts +3 -6
  143. package/dist/types/utils/chain.d.ts.map +1 -1
  144. package/dist/types/utils/formatters/block.d.ts +7 -3
  145. package/dist/types/utils/formatters/block.d.ts.map +1 -1
  146. package/dist/types/utils/formatters/extract.d.ts +2 -2
  147. package/dist/types/utils/formatters/extract.d.ts.map +1 -1
  148. package/dist/types/utils/formatters/formatter.d.ts +1 -1
  149. package/dist/types/utils/formatters/transaction.d.ts +8 -4
  150. package/dist/types/utils/formatters/transaction.d.ts.map +1 -1
  151. package/dist/types/utils/formatters/transactionReceipt.d.ts +3 -4
  152. package/dist/types/utils/formatters/transactionReceipt.d.ts.map +1 -1
  153. package/dist/types/utils/formatters/transactionRequest.d.ts +4 -5
  154. package/dist/types/utils/formatters/transactionRequest.d.ts.map +1 -1
  155. package/dist/types/utils/transaction/prepareRequest.d.ts +6 -11
  156. package/dist/types/utils/transaction/prepareRequest.d.ts.map +1 -1
  157. package/package.json +8 -2
  158. package/src/accounts/index.ts +6 -0
  159. package/src/accounts/utils/privateKeyToAddress.ts +20 -0
  160. package/src/accounts/utils/signTransaction.ts +2 -2
  161. package/src/actions/public/estimateContractGas.ts +1 -1
  162. package/src/actions/public/estimateGas.ts +11 -2
  163. package/src/actions/public/simulateContract.ts +2 -2
  164. package/src/actions/public/watchContractEvent.ts +201 -87
  165. package/src/actions/public/watchEvent.ts +230 -109
  166. package/src/actions/wallet/deployContract.ts +1 -1
  167. package/src/actions/wallet/sendTransaction.ts +9 -6
  168. package/src/actions/wallet/writeContract.ts +11 -7
  169. package/src/chains/{formatters/celo.ts → celo/formatters.ts} +29 -48
  170. package/src/chains/{serializers/celo.ts → celo/serializers.ts} +5 -5
  171. package/src/chains/celo/types.ts +111 -0
  172. package/src/chains/index.ts +22 -7
  173. package/src/chains/optimism/fees.ts +5 -0
  174. package/src/chains/optimism/formatters.ts +74 -0
  175. package/src/chains/optimism/types.ts +102 -0
  176. package/src/chains/utils.ts +41 -0
  177. package/src/clients/decorators/public.ts +3 -3
  178. package/src/errors/node.ts +2 -1
  179. package/src/errors/version.ts +1 -1
  180. package/src/index.ts +24 -8
  181. package/src/types/chain.ts +91 -14
  182. package/src/types/rpc.ts +2 -6
  183. package/src/types/utils.ts +11 -0
  184. package/src/utils/chain.ts +21 -10
  185. package/src/utils/formatters/block.ts +8 -6
  186. package/src/utils/formatters/extract.ts +2 -2
  187. package/src/utils/formatters/formatter.ts +2 -2
  188. package/src/utils/formatters/transaction.ts +8 -6
  189. package/src/utils/formatters/transactionReceipt.ts +9 -3
  190. package/src/utils/formatters/transactionRequest.ts +9 -3
  191. package/src/utils/transaction/prepareRequest.ts +55 -30
  192. package/dist/cjs/chains/formatters/celo.js.map +0 -1
  193. package/dist/cjs/chains/formatters/optimism.js.map +0 -1
  194. package/dist/cjs/chains/serializers/celo.js.map +0 -1
  195. package/dist/cjs/types/formatter.js.map +0 -1
  196. package/dist/cjs/types/serializer.js.map +0 -1
  197. package/dist/esm/chains/formatters/celo.js.map +0 -1
  198. package/dist/esm/chains/formatters/optimism.js.map +0 -1
  199. package/dist/esm/chains/serializers/celo.js.map +0 -1
  200. package/dist/esm/types/formatter.js +0 -2
  201. package/dist/esm/types/formatter.js.map +0 -1
  202. package/dist/esm/types/serializer.js +0 -2
  203. package/dist/esm/types/serializer.js.map +0 -1
  204. package/dist/types/chains/formatters/celo.d.ts.map +0 -1
  205. package/dist/types/chains/formatters/optimism.d.ts.map +0 -1
  206. package/dist/types/chains/serializers/celo.d.ts.map +0 -1
  207. package/dist/types/types/formatter.d.ts +0 -17
  208. package/dist/types/types/formatter.d.ts.map +0 -1
  209. package/dist/types/types/serializer.d.ts +0 -7
  210. package/dist/types/types/serializer.d.ts.map +0 -1
  211. package/src/chains/formatters/optimism.ts +0 -91
  212. package/src/types/formatter.ts +0 -42
  213. package/src/types/serializer.ts +0 -19
@@ -0,0 +1,111 @@
1
+ import type { Address } from 'abitype'
2
+
3
+ import type { Block, BlockTag } from '../../types/block.js'
4
+ import type { Hex } from '../../types/misc.js'
5
+ import type {
6
+ RpcBlock,
7
+ RpcTransaction,
8
+ RpcTransactionReceipt,
9
+ RpcTransactionRequest,
10
+ } from '../../types/rpc.js'
11
+ import type {
12
+ Transaction,
13
+ TransactionReceipt,
14
+ TransactionRequest,
15
+ } from '../../types/transaction.js'
16
+ import type { NeverBy } from '../../types/utils.js'
17
+ import type { OptimismRpcTransaction } from '../optimism/types.js'
18
+
19
+ type CeloBlockExclude =
20
+ | 'difficulty'
21
+ | 'gasLimit'
22
+ | 'mixHash'
23
+ | 'nonce'
24
+ | 'uncles'
25
+
26
+ export type CeloBlockOverrides = {
27
+ randomness: {
28
+ committed: Hex
29
+ revealed: Hex
30
+ }
31
+ }
32
+ export type CeloBlock<
33
+ TIncludeTransactions extends boolean = boolean,
34
+ TBlockTag extends BlockTag = BlockTag,
35
+ > = NeverBy<
36
+ Block<
37
+ bigint,
38
+ TIncludeTransactions,
39
+ TBlockTag,
40
+ CeloTransaction<TBlockTag extends 'pending' ? true : false>
41
+ >,
42
+ CeloBlockExclude
43
+ > &
44
+ CeloBlockOverrides
45
+
46
+ export type CeloRpcBlockOverrides = {
47
+ randomness: {
48
+ committed: Hex
49
+ revealed: Hex
50
+ }
51
+ }
52
+ export type CeloRpcBlock<
53
+ TBlockTag extends BlockTag = BlockTag,
54
+ TIncludeTransactions extends boolean = boolean,
55
+ > = NeverBy<
56
+ RpcBlock<
57
+ TBlockTag,
58
+ TIncludeTransactions,
59
+ OptimismRpcTransaction<TBlockTag extends 'pending' ? true : false>
60
+ >,
61
+ CeloBlockExclude
62
+ > &
63
+ CeloRpcBlockOverrides
64
+
65
+ export type CeloRpcTransactionOverrides = {
66
+ feeCurrency: Address | null
67
+ gatewayFee: Hex | null
68
+ gatewayFeeRecipient: Address | null
69
+ }
70
+ export type CeloRpcTransaction<TPending extends boolean = boolean> =
71
+ RpcTransaction<TPending> & CeloRpcTransactionOverrides
72
+
73
+ export type CeloRpcTransactionReceiptOverrides = {
74
+ feeCurrency: Address | null
75
+ gatewayFee: Hex | null
76
+ gatewayFeeRecipient: Address | null
77
+ }
78
+ export type CeloRpcTransactionReceipt = RpcTransactionReceipt &
79
+ CeloRpcTransactionReceiptOverrides
80
+
81
+ export type CeloRpcTransactionRequestOverrides = {
82
+ feeCurrency?: Address
83
+ gatewayFee?: Hex
84
+ gatewayFeeRecipient?: Address
85
+ }
86
+ export type CeloRpcTransactionRequest = RpcTransactionRequest &
87
+ CeloRpcTransactionRequestOverrides
88
+
89
+ export type CeloTransactionOverrides = {
90
+ feeCurrency: Address | null
91
+ gatewayFee: bigint | null
92
+ gatewayFeeRecipient: Address | null
93
+ }
94
+ export type CeloTransaction<TPending extends boolean = boolean> =
95
+ Transaction<TPending> & CeloTransactionOverrides
96
+
97
+ export type CeloTransactionReceiptOverrides = {
98
+ feeCurrency: Address | null
99
+ gatewayFee: bigint | null
100
+ gatewayFeeRecipient: Address | null
101
+ }
102
+ export type CeloTransactionReceipt = TransactionReceipt &
103
+ CeloTransactionReceiptOverrides
104
+
105
+ export type CeloTransactionRequestOverrides = {
106
+ feeCurrency?: Address
107
+ gatewayFee?: bigint
108
+ gatewayFeeRecipient?: Address
109
+ }
110
+ export type CeloTransactionRequest = TransactionRequest &
111
+ CeloTransactionRequestOverrides
@@ -1,9 +1,10 @@
1
1
  import * as chains from '@wagmi/chains'
2
2
 
3
3
  import { defineChain } from '../utils/chain.js'
4
- import { formattersCelo } from './formatters/celo.js'
5
- import { formattersOptimism } from './formatters/optimism.js'
6
- import { serializersCelo } from './serializers/celo.js'
4
+ import { formattersCelo } from './celo/formatters.js'
5
+ import { serializersCelo } from './celo/serializers.js'
6
+ import { feesOptimism } from './optimism/fees.js'
7
+ import { formattersOptimism } from './optimism/formatters.js'
7
8
 
8
9
  export const arbitrum = /*#__PURE__*/ defineChain(chains.arbitrum)
9
10
  export const arbitrumGoerli = /*#__PURE__*/ defineChain(chains.arbitrumGoerli)
@@ -11,8 +12,14 @@ export const aurora = /*#__PURE__*/ defineChain(chains.aurora)
11
12
  export const auroraTestnet = /*#__PURE__*/ defineChain(chains.auroraTestnet)
12
13
  export const avalanche = /*#__PURE__*/ defineChain(chains.avalanche)
13
14
  export const avalancheFuji = /*#__PURE__*/ defineChain(chains.avalancheFuji)
14
- export const base = /*#__PURE__*/ defineChain(chains.base)
15
- export const baseGoerli = /*#__PURE__*/ defineChain(chains.baseGoerli)
15
+ export const base = /*#__PURE__*/ defineChain(chains.base, {
16
+ fees: feesOptimism,
17
+ formatters: formattersOptimism,
18
+ })
19
+ export const baseGoerli = /*#__PURE__*/ defineChain(chains.baseGoerli, {
20
+ fees: feesOptimism,
21
+ formatters: formattersOptimism,
22
+ })
16
23
  export const boba = /*#__PURE__*/ defineChain(chains.boba)
17
24
  export const bronos = /*#__PURE__*/ defineChain(chains.bronos)
18
25
  export const bronosTestnet = /*#__PURE__*/ defineChain(chains.bronosTestnet)
@@ -72,9 +79,11 @@ export const moonriver = /*#__PURE__*/ defineChain(chains.moonriver)
72
79
  export const nexi = /*#__PURE__*/ defineChain(chains.nexi)
73
80
  export const okc = /*#__PURE__*/ defineChain(chains.okc)
74
81
  export const optimism = /*#__PURE__*/ defineChain(chains.optimism, {
82
+ fees: feesOptimism,
75
83
  formatters: formattersOptimism,
76
84
  })
77
85
  export const optimismGoerli = /*#__PURE__*/ defineChain(chains.optimismGoerli, {
86
+ fees: feesOptimism,
78
87
  formatters: formattersOptimism,
79
88
  })
80
89
  export const polygon = /*#__PURE__*/ defineChain(chains.polygon)
@@ -136,7 +145,13 @@ export const xdcTestnet = /*#__PURE__*/ defineChain(chains.xdcTestnet)
136
145
  export const zhejiang = /*#__PURE__*/ defineChain(chains.zhejiang)
137
146
  export const zkSync = /*#__PURE__*/ defineChain(chains.zkSync)
138
147
  export const zkSyncTestnet = /*#__PURE__*/ defineChain(chains.zkSyncTestnet)
139
- export const zora = /*#__PURE__*/ defineChain(chains.zora)
140
- export const zoraTestnet = /*#__PURE__*/ defineChain(chains.zoraTestnet)
148
+ export const zora = /*#__PURE__*/ defineChain(chains.zora, {
149
+ fees: feesOptimism,
150
+ formatters: formattersOptimism,
151
+ })
152
+ export const zoraTestnet = /*#__PURE__*/ defineChain(chains.zoraTestnet, {
153
+ fees: feesOptimism,
154
+ formatters: formattersOptimism,
155
+ })
141
156
 
142
157
  export type { Chain } from '../types/chain.js'
@@ -0,0 +1,5 @@
1
+ import type { ChainFees } from '../../types/chain.js'
2
+
3
+ export const feesOptimism = {
4
+ defaultPriorityFee: 1_000_000n, // 0.001 gwei
5
+ } as const satisfies ChainFees
@@ -0,0 +1,74 @@
1
+ import { type ChainFormatters } from '../../types/chain.js'
2
+ import type { Hash } from '../../types/misc.js'
3
+ import { type RpcTransaction } from '../../types/rpc.js'
4
+ import { hexToBigInt } from '../../utils/encoding/fromHex.js'
5
+ import { defineBlock } from '../../utils/formatters/block.js'
6
+ import {
7
+ defineTransaction,
8
+ formatTransaction,
9
+ } from '../../utils/formatters/transaction.js'
10
+ import { defineTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'
11
+ import type {
12
+ OptimismBlockOverrides,
13
+ OptimismRpcBlockOverrides,
14
+ OptimismRpcTransaction,
15
+ OptimismRpcTransactionReceiptOverrides,
16
+ OptimismTransaction,
17
+ OptimismTransactionReceiptOverrides,
18
+ } from './types.js'
19
+
20
+ export const formattersOptimism = {
21
+ block: /*#__PURE__*/ defineBlock({
22
+ format(
23
+ args: OptimismRpcBlockOverrides & {
24
+ transactions: Hash[] | OptimismRpcTransaction[]
25
+ },
26
+ ): OptimismBlockOverrides & {
27
+ transactions: Hash[] | OptimismTransaction[]
28
+ } {
29
+ const transactions = args.transactions?.map((transaction) => {
30
+ if (typeof transaction === 'string') return transaction
31
+ const formatted = formatTransaction(
32
+ transaction as RpcTransaction,
33
+ ) as OptimismTransaction
34
+ if (formatted.typeHex === '0x7e') {
35
+ formatted.isSystemTx = transaction.isSystemTx
36
+ formatted.mint = transaction.mint
37
+ ? hexToBigInt(transaction.mint)
38
+ : undefined
39
+ formatted.sourceHash = transaction.sourceHash
40
+ formatted.type = 'deposit'
41
+ }
42
+ return formatted
43
+ }) as Hash[] | OptimismTransaction[]
44
+ return {
45
+ transactions,
46
+ stateRoot: args.stateRoot,
47
+ }
48
+ },
49
+ }),
50
+ transaction: /*#__PURE__*/ defineTransaction({
51
+ format(args: OptimismRpcTransaction): OptimismTransaction {
52
+ const transaction = {} as OptimismTransaction
53
+ if (args.type === '0x7e') {
54
+ transaction.isSystemTx = args.isSystemTx
55
+ transaction.mint = args.mint ? hexToBigInt(args.mint) : undefined
56
+ transaction.sourceHash = args.sourceHash
57
+ transaction.type = 'deposit'
58
+ }
59
+ return transaction
60
+ },
61
+ }),
62
+ transactionReceipt: /*#__PURE__*/ defineTransactionReceipt({
63
+ format(
64
+ args: OptimismRpcTransactionReceiptOverrides,
65
+ ): OptimismTransactionReceiptOverrides {
66
+ return {
67
+ l1GasPrice: args.l1GasPrice ? hexToBigInt(args.l1GasPrice) : null,
68
+ l1GasUsed: args.l1GasUsed ? hexToBigInt(args.l1GasUsed) : null,
69
+ l1Fee: args.l1Fee ? hexToBigInt(args.l1Fee) : null,
70
+ l1FeeScalar: args.l1FeeScalar ? Number(args.l1FeeScalar) : null,
71
+ }
72
+ },
73
+ }),
74
+ } as const satisfies ChainFormatters
@@ -0,0 +1,102 @@
1
+ import type { Block, BlockTag } from '../../types/block.js'
2
+ import type { FeeValuesEIP1559 } from '../../types/fee.js'
3
+ import type { Hash, Hex } from '../../types/misc.js'
4
+ import type {
5
+ Index,
6
+ Quantity,
7
+ RpcBlock,
8
+ RpcTransaction as RpcTransaction_,
9
+ RpcTransactionReceipt,
10
+ } from '../../types/rpc.js'
11
+ import type {
12
+ Transaction as Transaction_,
13
+ TransactionBase,
14
+ TransactionReceipt,
15
+ } from '../../types/transaction.js'
16
+
17
+ export type OptimismBlockOverrides = {
18
+ stateRoot: Hash
19
+ }
20
+ export type OptimismBlock<
21
+ TIncludeTransactions extends boolean = boolean,
22
+ TBlockTag extends BlockTag = BlockTag,
23
+ > = Block<
24
+ bigint,
25
+ TIncludeTransactions,
26
+ TBlockTag,
27
+ OptimismTransaction<TBlockTag extends 'pending' ? true : false>
28
+ > &
29
+ OptimismBlockOverrides
30
+
31
+ export type OptimismRpcBlockOverrides = {
32
+ stateRoot: Hash
33
+ }
34
+ export type OptimismRpcBlock<
35
+ TBlockTag extends BlockTag = BlockTag,
36
+ TIncludeTransactions extends boolean = boolean,
37
+ > = RpcBlock<
38
+ TBlockTag,
39
+ TIncludeTransactions,
40
+ OptimismRpcTransaction<TBlockTag extends 'pending' ? true : false>
41
+ > &
42
+ OptimismRpcBlockOverrides
43
+
44
+ type RpcTransaction<TPending extends boolean = boolean> =
45
+ RpcTransaction_<TPending> & {
46
+ isSystemTx?: undefined
47
+ mint?: undefined
48
+ sourceHash?: undefined
49
+ }
50
+
51
+ export type OptimismRpcDepositTransaction<TPending extends boolean = boolean> =
52
+ Omit<TransactionBase<Quantity, Index, TPending>, 'typeHex'> &
53
+ FeeValuesEIP1559<Quantity> & {
54
+ isSystemTx?: boolean
55
+ mint?: Hex
56
+ sourceHash: Hex
57
+ type: '0x7e'
58
+ }
59
+ export type OptimismRpcTransaction<TPending extends boolean = boolean> =
60
+ | RpcTransaction<TPending>
61
+ | OptimismRpcDepositTransaction<TPending>
62
+
63
+ export type OptimismRpcTransactionReceiptOverrides = {
64
+ l1GasPrice: Hex | null
65
+ l1GasUsed: Hex | null
66
+ l1Fee: Hex | null
67
+ l1FeeScalar: `${number}` | null
68
+ }
69
+ export type OptimismRpcTransactionReceipt = RpcTransactionReceipt &
70
+ OptimismRpcTransactionReceiptOverrides
71
+
72
+ type Transaction<TPending extends boolean = boolean> = Transaction_<
73
+ bigint,
74
+ number,
75
+ TPending
76
+ > & {
77
+ isSystemTx?: undefined
78
+ mint?: undefined
79
+ sourceHash?: undefined
80
+ }
81
+
82
+ export type OptimismDepositTransaction<TPending extends boolean = boolean> =
83
+ TransactionBase<bigint, number, TPending> &
84
+ FeeValuesEIP1559 & {
85
+ isSystemTx?: boolean
86
+ mint?: bigint
87
+ sourceHash: Hex
88
+ type: 'deposit'
89
+ }
90
+
91
+ export type OptimismTransaction<TPending extends boolean = boolean> =
92
+ | Transaction<TPending>
93
+ | OptimismDepositTransaction<TPending>
94
+
95
+ export type OptimismTransactionReceiptOverrides = {
96
+ l1GasPrice: bigint | null
97
+ l1GasUsed: bigint | null
98
+ l1Fee: bigint | null
99
+ l1FeeScalar: number | null
100
+ }
101
+ export type OptimismTransactionReceipt = TransactionReceipt &
102
+ OptimismTransactionReceiptOverrides
@@ -0,0 +1,41 @@
1
+ export { formattersCelo } from './celo/formatters.js'
2
+ export {
3
+ type CeloTransactionSerializable,
4
+ type TransactionSerializableCIP42,
5
+ serializeTransactionCelo,
6
+ serializersCelo,
7
+ } from './celo/serializers.js'
8
+ export type {
9
+ CeloBlock,
10
+ CeloBlockOverrides,
11
+ CeloRpcBlock,
12
+ CeloRpcBlockOverrides,
13
+ CeloRpcTransaction,
14
+ CeloRpcTransactionOverrides,
15
+ CeloRpcTransactionReceipt,
16
+ CeloRpcTransactionReceiptOverrides,
17
+ CeloRpcTransactionRequest,
18
+ CeloRpcTransactionRequestOverrides,
19
+ CeloTransaction,
20
+ CeloTransactionOverrides,
21
+ CeloTransactionReceipt,
22
+ CeloTransactionReceiptOverrides,
23
+ CeloTransactionRequest,
24
+ CeloTransactionRequestOverrides,
25
+ } from './celo/types.js'
26
+
27
+ export { formattersOptimism } from './optimism/formatters.js'
28
+ export type {
29
+ OptimismBlock,
30
+ OptimismBlockOverrides,
31
+ OptimismDepositTransaction,
32
+ OptimismRpcBlock,
33
+ OptimismRpcBlockOverrides,
34
+ OptimismRpcDepositTransaction,
35
+ OptimismRpcTransaction,
36
+ OptimismRpcTransactionReceipt,
37
+ OptimismRpcTransactionReceiptOverrides,
38
+ OptimismTransaction,
39
+ OptimismTransactionReceipt,
40
+ OptimismTransactionReceiptOverrides,
41
+ } from './optimism/types.js'
@@ -1206,9 +1206,9 @@ export type PublicActions<
1206
1206
  * })
1207
1207
  */
1208
1208
  simulateContract: <
1209
- TAbi extends Abi | readonly unknown[] = Abi,
1210
- TFunctionName extends string = any,
1211
- TChainOverride extends Chain | undefined = undefined,
1209
+ TAbi extends Abi | readonly unknown[],
1210
+ TFunctionName extends string,
1211
+ TChainOverride extends Chain | undefined,
1212
1212
  >(
1213
1213
  args: SimulateContractParameters<
1214
1214
  TAbi,
@@ -88,7 +88,8 @@ export class NonceTooHighError extends BaseError {
88
88
  }
89
89
 
90
90
  export class NonceTooLowError extends BaseError {
91
- static nodeMessage = /nonce too low|transaction already imported/
91
+ static nodeMessage =
92
+ /nonce too low|transaction already imported|already known/
92
93
  override name = 'NonceTooLowError'
93
94
  constructor({ cause, nonce }: { cause?: BaseError; nonce?: number } = {}) {
94
95
  super(
@@ -1 +1 @@
1
- export const version = '1.5.3'
1
+ export const version = '1.5.4'
package/src/index.ts CHANGED
@@ -571,7 +571,30 @@ export type {
571
571
  Signature,
572
572
  SignableMessage,
573
573
  } from './types/misc.js'
574
- export type { Chain } from './types/chain.js'
574
+ export type {
575
+ Chain,
576
+ ChainContract,
577
+ ChainFees,
578
+ ChainFormatter,
579
+ /** @deprecated use `ChainFormatter` instead. */
580
+ ChainFormatter as Formatter,
581
+ ChainFormatters,
582
+ /** @deprecated use `ChainFormatters` instead. */
583
+ ChainFormatters as Formatters,
584
+ ChainSerializers,
585
+ /** @deprecated use `ChainSerializers` instead. */
586
+ ChainSerializers as Serializers,
587
+ ExtractChainFormatterExclude,
588
+ /** @deprecated use `ExtractChainFormatterExclude` instead. */
589
+ ExtractChainFormatterExclude as ExtractFormatterExclude,
590
+ ExtractChainFormatterParameters,
591
+ /** @deprecated use `ExtractChainFormatterParameters` instead. */
592
+ ExtractChainFormatterParameters as ExtractFormatterParameters,
593
+ ExtractChainFormatterReturnType,
594
+ /** @deprecated use `ExtractChainFormatterReturnType` instead. */
595
+ ExtractChainFormatterReturnType as ExtractFormatterReturnType,
596
+ GetChain,
597
+ } from './types/chain.js'
575
598
  export type {
576
599
  AddEthereumChainParameter,
577
600
  EIP1193Events,
@@ -599,13 +622,6 @@ export type {
599
622
  FeeValuesLegacy,
600
623
  } from './types/fee.js'
601
624
  export type { Filter } from './types/filter.js'
602
- export type {
603
- Formatter,
604
- Formatters,
605
- ExtractFormatterParameters,
606
- ExtractFormatterReturnType,
607
- } from './types/formatter.js'
608
- export type { Serializers } from './types/serializer.js'
609
625
  export type {
610
626
  GetTypedDataDomain,
611
627
  GetTypedDataMessage,
@@ -1,17 +1,24 @@
1
1
  import type { Address } from 'abitype'
2
2
 
3
- import type { Formatters } from './formatter.js'
4
- import type { Serializers } from './serializer.js'
5
- import type { IsUndefined } from './utils.js'
3
+ import type { FormattedBlock } from '../utils/formatters/block.js'
4
+ import type { PrepareRequestParameters } from '../utils/transaction/prepareRequest.js'
5
+ import type { SerializeTransactionFn } from '../utils/transaction/serializeTransaction.js'
6
+ import type {
7
+ TransactionSerializable,
8
+ TransactionSerializableGeneric,
9
+ } from './transaction.js'
10
+ import type { IsUndefined, Prettify } from './utils.js'
6
11
 
7
12
  export type Chain<
8
- formatters extends Formatters | undefined = Formatters | undefined,
9
- serializers extends Serializers<formatters> | undefined =
10
- | Serializers<formatters>
11
- | undefined,
12
- > = import('@wagmi/chains').Chain & {
13
+ formatters extends ChainFormatters | undefined = ChainFormatters | undefined,
14
+ > = import('@wagmi/chains').Chain & ChainConfig<formatters>
15
+
16
+ export type ChainConfig<
17
+ formatters extends ChainFormatters | undefined = ChainFormatters | undefined,
18
+ > = {
13
19
  formatters?: formatters | undefined
14
- serializers?: serializers | undefined
20
+ serializers?: ChainSerializers<formatters> | undefined
21
+ fees?: ChainFees<formatters> | undefined
15
22
  }
16
23
 
17
24
  export type ChainContract = {
@@ -19,9 +26,79 @@ export type ChainContract = {
19
26
  blockCreated?: number
20
27
  }
21
28
 
29
+ export type ChainFees<
30
+ formatters extends ChainFormatters | undefined = ChainFormatters | undefined,
31
+ > = {
32
+ defaultPriorityFee:
33
+ | bigint
34
+ | ((args: {
35
+ block: Prettify<FormattedBlock<{ formatters: formatters }>>
36
+ request: PrepareRequestParameters<
37
+ Omit<Chain, 'formatters'> & { formatters: formatters }
38
+ >
39
+ }) => Promise<bigint> | bigint)
40
+ }
41
+
42
+ export type ChainFormatters = {
43
+ block?: ChainFormatter<'block'>
44
+ transaction?: ChainFormatter<'transaction'>
45
+ transactionReceipt?: ChainFormatter<'transactionReceipt'>
46
+ transactionRequest?: ChainFormatter<'transactionRequest'>
47
+ }
48
+
49
+ export type ChainFormatter<type extends string = string> = {
50
+ format: (args: any) => any
51
+ type: type
52
+ }
53
+
54
+ export type ChainSerializers<
55
+ formatters extends ChainFormatters | undefined = undefined,
56
+ > = {
57
+ transaction?: SerializeTransactionFn<
58
+ formatters extends ChainFormatters
59
+ ? formatters['transactionRequest'] extends ChainFormatter
60
+ ? TransactionSerializableGeneric &
61
+ Parameters<formatters['transactionRequest']['format']>[0]
62
+ : TransactionSerializable
63
+ : TransactionSerializable
64
+ >
65
+ }
66
+
67
+ /////////////////////////////////////////////////////////////////////
68
+ // Utils
69
+
70
+ export type ExtractChainFormatterExclude<
71
+ chain extends { formatters?: Chain['formatters'] } | undefined,
72
+ type extends keyof ChainFormatters,
73
+ > = chain extends { formatters?: infer _Formatters extends ChainFormatters }
74
+ ? _Formatters[type] extends { exclude: infer Exclude }
75
+ ? Extract<Exclude, string[]>[number]
76
+ : ''
77
+ : ''
78
+
79
+ export type ExtractChainFormatterParameters<
80
+ chain extends { formatters?: Chain['formatters'] } | undefined,
81
+ type extends keyof ChainFormatters,
82
+ fallback,
83
+ > = chain extends { formatters?: infer _Formatters extends ChainFormatters }
84
+ ? _Formatters[type] extends ChainFormatter
85
+ ? Parameters<_Formatters[type]['format']>[0]
86
+ : fallback
87
+ : fallback
88
+
89
+ export type ExtractChainFormatterReturnType<
90
+ chain extends { formatters?: Chain['formatters'] } | undefined,
91
+ type extends keyof ChainFormatters,
92
+ fallback,
93
+ > = chain extends { formatters?: infer _Formatters extends ChainFormatters }
94
+ ? _Formatters[type] extends ChainFormatter
95
+ ? ReturnType<_Formatters[type]['format']>
96
+ : fallback
97
+ : fallback
98
+
22
99
  export type GetChain<
23
- TChain extends Chain | undefined,
24
- TChainOverride extends Chain | undefined = undefined,
25
- > = IsUndefined<TChain> extends true
26
- ? { chain: TChainOverride | null }
27
- : { chain?: TChainOverride | null }
100
+ chain extends Chain | undefined,
101
+ chainOverride extends Chain | undefined = undefined,
102
+ > = IsUndefined<chain> extends true
103
+ ? { chain: chainOverride | null }
104
+ : { chain?: chainOverride | null }
package/src/types/rpc.ts CHANGED
@@ -26,12 +26,8 @@ export type TransactionType = '0x0' | '0x1' | '0x2' | (string & {})
26
26
  export type RpcBlock<
27
27
  TBlockTag extends BlockTag = BlockTag,
28
28
  TIncludeTransactions extends boolean = boolean,
29
- > = Block<
30
- Quantity,
31
- TIncludeTransactions,
32
- TBlockTag,
33
- RpcTransaction<TBlockTag extends 'pending' ? true : false>
34
- >
29
+ TTransaction = RpcTransaction<TBlockTag extends 'pending' ? true : false>,
30
+ > = Block<Quantity, TIncludeTransactions, TBlockTag, TTransaction>
35
31
  export type RpcBlockNumber = BlockNumber<Quantity>
36
32
  export type RpcBlockIdentifier = BlockIdentifier<Quantity>
37
33
  export type RpcUncle = Uncle<Quantity>
@@ -155,6 +155,17 @@ export type OptionalNullable<T> = {
155
155
  [K in keyof T as T[K] extends NonNullable<unknown> ? never : K]?: T[K]
156
156
  }
157
157
 
158
+ /**
159
+ * @description Make properties K of type T never.
160
+ *
161
+ * @example
162
+ * NeverBy<{ a: string, b: boolean, c: number }, 'a' | 'c'>
163
+ * => { a: never, b: boolean, c: never }
164
+ */
165
+ export type NeverBy<T, K extends keyof T> = {
166
+ [U in keyof T]: U extends K ? never : T[U]
167
+ }
168
+
158
169
  /**
159
170
  * @description Constructs a type by excluding `undefined` from `T`.
160
171
  *
@@ -3,8 +3,13 @@ import {
3
3
  ChainMismatchError,
4
4
  ChainNotFoundError,
5
5
  } from '../errors/chain.js'
6
- import type { Chain, ChainContract } from '../types/chain.js'
7
- import type { Formatters } from '../types/formatter.js'
6
+ import type {
7
+ Chain,
8
+ ChainConfig,
9
+ ChainContract,
10
+ ChainFormatters,
11
+ } from '../types/chain.js'
12
+ import type { Assign } from '../types/utils.js'
8
13
 
9
14
  export type AssertCurrentChainParameters = {
10
15
  chain?: Chain
@@ -21,17 +26,23 @@ export function assertCurrentChain({
21
26
  }
22
27
 
23
28
  export function defineChain<
24
- TChain extends Chain,
25
- TFormatters extends Formatters,
29
+ chain extends Chain,
30
+ formatters extends ChainFormatters,
26
31
  >(
27
- chain: TChain,
28
- config?: Pick<Chain<TFormatters>, 'formatters' | 'serializers'>,
29
- ) {
32
+ chain: chain,
33
+ config: ChainConfig<formatters> = {},
34
+ ): Assign<chain, ChainConfig<formatters>> {
35
+ const {
36
+ fees = chain.fees,
37
+ formatters = chain.formatters,
38
+ serializers = chain.serializers,
39
+ } = config
30
40
  return {
31
41
  ...chain,
32
- formatters: config?.formatters,
33
- serializers: config?.serializers,
34
- }
42
+ fees,
43
+ formatters,
44
+ serializers,
45
+ } as unknown as Assign<chain, ChainConfig<formatters>>
35
46
  }
36
47
 
37
48
  export function getChainContractAddress({