viem 0.0.0-main.20230620T232415 → 0.0.0-main.20230621T005231

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 (198) hide show
  1. package/chains/package.json +3 -3
  2. package/dist/cjs/actions/public/call.js +3 -6
  3. package/dist/cjs/actions/public/call.js.map +1 -1
  4. package/dist/cjs/actions/public/estimateContractGas.js.map +1 -1
  5. package/dist/cjs/actions/public/estimateGas.js +3 -6
  6. package/dist/cjs/actions/public/estimateGas.js.map +1 -1
  7. package/dist/cjs/actions/public/getBlock.js +2 -4
  8. package/dist/cjs/actions/public/getBlock.js.map +1 -1
  9. package/dist/cjs/actions/public/getTransaction.js +2 -4
  10. package/dist/cjs/actions/public/getTransaction.js.map +1 -1
  11. package/dist/cjs/actions/public/getTransactionConfirmations.js.map +1 -1
  12. package/dist/cjs/actions/public/getTransactionReceipt.js +2 -4
  13. package/dist/cjs/actions/public/getTransactionReceipt.js.map +1 -1
  14. package/dist/cjs/actions/public/simulateContract.js.map +1 -1
  15. package/dist/cjs/actions/public/watchBlocks.js +2 -4
  16. package/dist/cjs/actions/public/watchBlocks.js.map +1 -1
  17. package/dist/cjs/actions/test/sendUnsignedTransaction.js +3 -6
  18. package/dist/cjs/actions/test/sendUnsignedTransaction.js.map +1 -1
  19. package/dist/cjs/actions/wallet/sendTransaction.js +3 -6
  20. package/dist/cjs/actions/wallet/sendTransaction.js.map +1 -1
  21. package/dist/cjs/chains/formatters/celo.js +62 -0
  22. package/dist/cjs/chains/formatters/celo.js.map +1 -0
  23. package/dist/cjs/chains/formatters/optimism.js +43 -0
  24. package/dist/cjs/chains/formatters/optimism.js.map +1 -0
  25. package/dist/cjs/{chains.js → chains/index.js} +16 -50
  26. package/dist/cjs/chains/index.js.map +1 -0
  27. package/dist/cjs/errors/version.js +1 -1
  28. package/dist/cjs/index.js.map +1 -1
  29. package/dist/cjs/types/serializer.js +3 -0
  30. package/dist/cjs/types/serializer.js.map +1 -0
  31. package/dist/cjs/utils/chain.js +6 -2
  32. package/dist/cjs/utils/chain.js.map +1 -1
  33. package/dist/cjs/utils/formatters/block.js +2 -4
  34. package/dist/cjs/utils/formatters/block.js.map +1 -1
  35. package/dist/cjs/utils/formatters/formatter.js +21 -0
  36. package/dist/cjs/utils/formatters/formatter.js.map +1 -0
  37. package/dist/cjs/utils/formatters/transaction.js +3 -4
  38. package/dist/cjs/utils/formatters/transaction.js.map +1 -1
  39. package/dist/cjs/utils/formatters/transactionReceipt.js +2 -4
  40. package/dist/cjs/utils/formatters/transactionReceipt.js.map +1 -1
  41. package/dist/cjs/utils/formatters/transactionRequest.js +2 -4
  42. package/dist/cjs/utils/formatters/transactionRequest.js.map +1 -1
  43. package/dist/cjs/utils/index.js +4 -5
  44. package/dist/cjs/utils/index.js.map +1 -1
  45. package/dist/cjs/wallet.js.map +1 -1
  46. package/dist/esm/actions/public/call.js +3 -6
  47. package/dist/esm/actions/public/call.js.map +1 -1
  48. package/dist/esm/actions/public/estimateContractGas.js.map +1 -1
  49. package/dist/esm/actions/public/estimateGas.js +3 -6
  50. package/dist/esm/actions/public/estimateGas.js.map +1 -1
  51. package/dist/esm/actions/public/getBlock.js +2 -4
  52. package/dist/esm/actions/public/getBlock.js.map +1 -1
  53. package/dist/esm/actions/public/getTransaction.js +2 -4
  54. package/dist/esm/actions/public/getTransaction.js.map +1 -1
  55. package/dist/esm/actions/public/getTransactionConfirmations.js.map +1 -1
  56. package/dist/esm/actions/public/getTransactionReceipt.js +2 -4
  57. package/dist/esm/actions/public/getTransactionReceipt.js.map +1 -1
  58. package/dist/esm/actions/public/simulateContract.js.map +1 -1
  59. package/dist/esm/actions/public/watchBlocks.js +2 -4
  60. package/dist/esm/actions/public/watchBlocks.js.map +1 -1
  61. package/dist/esm/actions/test/sendUnsignedTransaction.js +3 -6
  62. package/dist/esm/actions/test/sendUnsignedTransaction.js.map +1 -1
  63. package/dist/esm/actions/wallet/sendTransaction.js +3 -6
  64. package/dist/esm/actions/wallet/sendTransaction.js.map +1 -1
  65. package/dist/esm/chains/formatters/celo.js +59 -0
  66. package/dist/esm/chains/formatters/celo.js.map +1 -0
  67. package/dist/esm/chains/formatters/optimism.js +40 -0
  68. package/dist/esm/chains/formatters/optimism.js.map +1 -0
  69. package/dist/esm/{chains.js → chains/index.js} +13 -47
  70. package/dist/esm/chains/index.js.map +1 -0
  71. package/dist/esm/errors/version.js +1 -1
  72. package/dist/esm/index.js.map +1 -1
  73. package/dist/esm/types/serializer.js +2 -0
  74. package/dist/esm/types/serializer.js.map +1 -0
  75. package/dist/esm/utils/chain.js +6 -2
  76. package/dist/esm/utils/chain.js.map +1 -1
  77. package/dist/esm/utils/formatters/block.js +2 -5
  78. package/dist/esm/utils/formatters/block.js.map +1 -1
  79. package/dist/esm/utils/formatters/formatter.js +17 -0
  80. package/dist/esm/utils/formatters/formatter.js.map +1 -0
  81. package/dist/esm/utils/formatters/transaction.js +4 -4
  82. package/dist/esm/utils/formatters/transaction.js.map +1 -1
  83. package/dist/esm/utils/formatters/transactionReceipt.js +2 -4
  84. package/dist/esm/utils/formatters/transactionReceipt.js.map +1 -1
  85. package/dist/esm/utils/formatters/transactionRequest.js +2 -4
  86. package/dist/esm/utils/formatters/transactionRequest.js.map +1 -1
  87. package/dist/esm/utils/index.js +1 -1
  88. package/dist/esm/utils/index.js.map +1 -1
  89. package/dist/esm/wallet.js.map +1 -1
  90. package/dist/types/actions/public/call.d.ts +3 -7
  91. package/dist/types/actions/public/call.d.ts.map +1 -1
  92. package/dist/types/actions/public/estimateContractGas.d.ts +1 -1
  93. package/dist/types/actions/public/estimateContractGas.d.ts.map +1 -1
  94. package/dist/types/actions/public/estimateGas.d.ts +3 -7
  95. package/dist/types/actions/public/estimateGas.d.ts.map +1 -1
  96. package/dist/types/actions/public/getBlock.d.ts +2 -2
  97. package/dist/types/actions/public/getBlock.d.ts.map +1 -1
  98. package/dist/types/actions/public/getTransaction.d.ts +2 -2
  99. package/dist/types/actions/public/getTransaction.d.ts.map +1 -1
  100. package/dist/types/actions/public/getTransactionConfirmations.d.ts +2 -2
  101. package/dist/types/actions/public/getTransactionConfirmations.d.ts.map +1 -1
  102. package/dist/types/actions/public/getTransactionReceipt.d.ts +3 -3
  103. package/dist/types/actions/public/getTransactionReceipt.d.ts.map +1 -1
  104. package/dist/types/actions/public/simulateContract.d.ts +1 -1
  105. package/dist/types/actions/public/simulateContract.d.ts.map +1 -1
  106. package/dist/types/actions/public/verifyHash.d.ts +1 -1
  107. package/dist/types/actions/public/verifyHash.d.ts.map +1 -1
  108. package/dist/types/actions/public/verifyMessage.d.ts +1 -1
  109. package/dist/types/actions/public/verifyMessage.d.ts.map +1 -1
  110. package/dist/types/actions/public/verifyTypedData.d.ts +1 -1
  111. package/dist/types/actions/public/verifyTypedData.d.ts.map +1 -1
  112. package/dist/types/actions/public/watchBlocks.d.ts.map +1 -1
  113. package/dist/types/actions/test/sendUnsignedTransaction.d.ts +2 -8
  114. package/dist/types/actions/test/sendUnsignedTransaction.d.ts.map +1 -1
  115. package/dist/types/actions/wallet/sendTransaction.d.ts +2 -7
  116. package/dist/types/actions/wallet/sendTransaction.d.ts.map +1 -1
  117. package/dist/types/chains/formatters/celo.d.ts +235 -0
  118. package/dist/types/chains/formatters/celo.d.ts.map +1 -0
  119. package/dist/types/chains/formatters/optimism.d.ts +286 -0
  120. package/dist/types/chains/formatters/optimism.d.ts.map +1 -0
  121. package/dist/types/chains/index.d.ts +5246 -0
  122. package/dist/types/chains/index.d.ts.map +1 -0
  123. package/dist/types/errors/version.d.ts +1 -1
  124. package/dist/types/index.d.ts +5 -5
  125. package/dist/types/index.d.ts.map +1 -1
  126. package/dist/types/types/chain.d.ts +5 -8
  127. package/dist/types/types/chain.d.ts.map +1 -1
  128. package/dist/types/types/fee.d.ts +1 -0
  129. package/dist/types/types/fee.d.ts.map +1 -1
  130. package/dist/types/types/formatter.d.ts +8 -10
  131. package/dist/types/types/formatter.d.ts.map +1 -1
  132. package/dist/types/types/serializer.d.ts +7 -0
  133. package/dist/types/types/serializer.d.ts.map +1 -0
  134. package/dist/types/types/transaction.d.ts +2 -0
  135. package/dist/types/types/transaction.d.ts.map +1 -1
  136. package/dist/types/types/utils.d.ts +5 -5
  137. package/dist/types/types/utils.d.ts.map +1 -1
  138. package/dist/types/utils/chain.d.ts +4 -1
  139. package/dist/types/utils/chain.d.ts.map +1 -1
  140. package/dist/types/utils/formatters/block.d.ts +5 -11
  141. package/dist/types/utils/formatters/block.d.ts.map +1 -1
  142. package/dist/types/utils/formatters/formatter.d.ts +6 -0
  143. package/dist/types/utils/formatters/formatter.d.ts.map +1 -0
  144. package/dist/types/utils/formatters/transaction.d.ts +5 -11
  145. package/dist/types/utils/formatters/transaction.d.ts.map +1 -1
  146. package/dist/types/utils/formatters/transactionReceipt.d.ts +5 -11
  147. package/dist/types/utils/formatters/transactionReceipt.d.ts.map +1 -1
  148. package/dist/types/utils/formatters/transactionRequest.d.ts +5 -11
  149. package/dist/types/utils/formatters/transactionRequest.d.ts.map +1 -1
  150. package/dist/types/utils/index.d.ts +5 -5
  151. package/dist/types/utils/index.d.ts.map +1 -1
  152. package/dist/types/wallet.d.ts +1 -1
  153. package/dist/types/wallet.d.ts.map +1 -1
  154. package/package.json +5 -5
  155. package/src/actions/public/call.ts +20 -30
  156. package/src/actions/public/estimateContractGas.ts +7 -1
  157. package/src/actions/public/estimateGas.ts +20 -30
  158. package/src/actions/public/getBlock.ts +3 -6
  159. package/src/actions/public/getTransaction.ts +3 -6
  160. package/src/actions/public/getTransactionConfirmations.ts +2 -7
  161. package/src/actions/public/getTransactionReceipt.ts +4 -7
  162. package/src/actions/public/simulateContract.ts +7 -1
  163. package/src/actions/public/verifyHash.ts +1 -1
  164. package/src/actions/public/verifyMessage.ts +1 -1
  165. package/src/actions/public/verifyTypedData.ts +1 -1
  166. package/src/actions/public/watchBlocks.ts +2 -4
  167. package/src/actions/test/sendUnsignedTransaction.ts +18 -32
  168. package/src/actions/wallet/sendTransaction.ts +18 -32
  169. package/src/chains/formatters/celo.ts +102 -0
  170. package/src/chains/formatters/optimism.ts +88 -0
  171. package/src/{chains.ts → chains/index.ts} +13 -56
  172. package/src/errors/version.ts +1 -1
  173. package/src/index.ts +1 -8
  174. package/src/types/chain.ts +11 -8
  175. package/src/types/fee.ts +1 -0
  176. package/src/types/formatter.ts +26 -17
  177. package/src/types/serializer.ts +19 -0
  178. package/src/types/transaction.ts +2 -0
  179. package/src/types/utils.ts +5 -5
  180. package/src/utils/chain.ts +11 -4
  181. package/src/utils/formatters/block.ts +5 -17
  182. package/src/utils/formatters/formatter.ts +32 -0
  183. package/src/utils/formatters/transaction.ts +7 -21
  184. package/src/utils/formatters/transactionReceipt.ts +7 -21
  185. package/src/utils/formatters/transactionRequest.ts +7 -22
  186. package/src/utils/index.ts +1 -10
  187. package/src/wallet.ts +0 -1
  188. package/dist/cjs/chains.js.map +0 -1
  189. package/dist/cjs/utils/formatters/format.js +0 -23
  190. package/dist/cjs/utils/formatters/format.js.map +0 -1
  191. package/dist/esm/chains.js.map +0 -1
  192. package/dist/esm/utils/formatters/format.js +0 -21
  193. package/dist/esm/utils/formatters/format.js.map +0 -1
  194. package/dist/types/chains.d.ts +0 -2834
  195. package/dist/types/chains.d.ts.map +0 -1
  196. package/dist/types/utils/formatters/format.d.ts +0 -38
  197. package/dist/types/utils/formatters/format.d.ts.map +0 -1
  198. package/src/utils/formatters/format.ts +0 -99
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "peerDependencies": {
16
16
  "typescript": ">=5.0.4"
17
17
  },
18
- "version": "0.0.0-main.20230620T232415",
18
+ "version": "0.0.0-main.20230621T005231",
19
19
  "files": [
20
20
  "dist",
21
21
  "!dist/**/*.tsbuildinfo",
@@ -52,9 +52,9 @@
52
52
  "default": "./dist/cjs/accounts/index.js"
53
53
  },
54
54
  "./chains": {
55
- "types": "./dist/types/chains.d.ts",
56
- "import": "./dist/esm/chains.js",
57
- "default": "./dist/cjs/chains.js"
55
+ "types": "./dist/types/chains/index.d.ts",
56
+ "import": "./dist/esm/chains/index.js",
57
+ "default": "./dist/cjs/chains/index.js"
58
58
  },
59
59
  "./contract": {
60
60
  "types": "./dist/types/contract.d.ts",
@@ -106,7 +106,7 @@
106
106
  "./dist/types/accounts/index.d.ts"
107
107
  ],
108
108
  "chains": [
109
- "./dist/types/chains.d.ts"
109
+ "./dist/types/chains/index.d.ts"
110
110
  ],
111
111
  "contract": [
112
112
  "./dist/types/contract.d.ts"
@@ -14,35 +14,29 @@ import {
14
14
  import { RawContractError } from '../../errors/contract.js'
15
15
  import type { BlockTag } from '../../types/block.js'
16
16
  import type { Chain } from '../../types/chain.js'
17
- import type { Formatter } from '../../types/formatter.js'
18
17
  import type { Hex } from '../../types/misc.js'
19
18
  import type { RpcTransactionRequest } from '../../types/rpc.js'
20
19
  import type { TransactionRequest } from '../../types/transaction.js'
21
- import type { MergeIntersectionProperties } from '../../types/utils.js'
22
20
  import { decodeFunctionResult } from '../../utils/abi/decodeFunctionResult.js'
23
21
  import { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'
24
22
  import { getChainContractAddress } from '../../utils/chain.js'
25
23
  import { numberToHex } from '../../utils/encoding/toHex.js'
26
24
  import { getCallError } from '../../utils/errors/getCallError.js'
27
25
  import { extract } from '../../utils/formatters/extract.js'
28
- import { type Formatted, format } from '../../utils/formatters/format.js'
29
26
  import {
30
- type TransactionRequestFormatter,
27
+ type FormattedTransactionRequest,
31
28
  formatTransactionRequest,
32
29
  } from '../../utils/formatters/transactionRequest.js'
33
30
  import { createBatchScheduler } from '../../utils/promise/createBatchScheduler.js'
34
31
  import { assertRequest } from '../../utils/transaction/assertRequest.js'
35
32
 
36
33
  export type FormattedCall<
37
- TFormatter extends Formatter | undefined = Formatter,
38
- > = MergeIntersectionProperties<
39
- Omit<Formatted<TFormatter, TransactionRequest, true>, 'from'>,
40
- TransactionRequest
41
- >
34
+ TChain extends Chain | undefined = Chain | undefined,
35
+ > = FormattedTransactionRequest<TChain>
42
36
 
43
37
  export type CallParameters<
44
38
  TChain extends Chain | undefined = Chain | undefined,
45
- > = FormattedCall<TransactionRequestFormatter<TChain>> & {
39
+ > = Omit<FormattedCall<TChain>, 'from'> & {
46
40
  account?: Account | Address
47
41
  batch?: boolean
48
42
  } & (
@@ -116,26 +110,22 @@ export async function call<TChain extends Chain | undefined>(
116
110
  const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined
117
111
  const block = blockNumberHex || blockTag
118
112
 
119
- const formatter = client.chain?.formatters?.transactionRequest
120
- const request = format(
121
- {
122
- from: account?.address,
123
- accessList,
124
- data,
125
- gas,
126
- gasPrice,
127
- maxFeePerGas,
128
- maxPriorityFeePerGas,
129
- nonce,
130
- to,
131
- value,
132
- // Pick out extra data that might exist on the chain's transaction request type.
133
- ...extract(rest, { formatter }),
134
- } as TransactionRequest,
135
- {
136
- formatter: formatter || formatTransactionRequest,
137
- },
138
- ) as TransactionRequest
113
+ const format =
114
+ client.chain?.formatters?.transactionRequest || formatTransactionRequest
115
+ const request = format({
116
+ // Pick out extra data that might exist on the chain's transaction request type.
117
+ ...extract(rest, { formatter: format }),
118
+ from: account?.address,
119
+ accessList,
120
+ data,
121
+ gas,
122
+ gasPrice,
123
+ maxFeePerGas,
124
+ maxPriorityFeePerGas,
125
+ nonce,
126
+ to,
127
+ value,
128
+ } as TransactionRequest) as TransactionRequest
139
129
 
140
130
  if (batch && shouldPerformMulticall({ request })) {
141
131
  try {
@@ -23,7 +23,13 @@ export type EstimateContractGasParameters<
23
23
  TAccount extends Account | undefined = undefined,
24
24
  > = ContractFunctionConfig<TAbi, TFunctionName, 'payable' | 'nonpayable'> &
25
25
  Omit<EstimateGasParameters<TChain, TAccount>, 'data' | 'to' | 'value'> &
26
- GetValue<TAbi, TFunctionName, EstimateGasParameters<TChain>['value']>
26
+ GetValue<
27
+ TAbi,
28
+ TFunctionName,
29
+ EstimateGasParameters<TChain> extends EstimateGasParameters
30
+ ? EstimateGasParameters<TChain>['value']
31
+ : undefined
32
+ >
27
33
 
28
34
  export type EstimateContractGasReturnType = bigint
29
35
 
@@ -8,31 +8,25 @@ import type { BaseError } from '../../errors/base.js'
8
8
  import type { GetAccountParameter } from '../../types/account.js'
9
9
  import type { BlockTag } from '../../types/block.js'
10
10
  import type { Chain } from '../../types/chain.js'
11
- import type { Formatter } from '../../types/formatter.js'
12
11
  import type { TransactionRequest } from '../../types/transaction.js'
13
- import type { MergeIntersectionProperties } from '../../types/utils.js'
14
12
  import { numberToHex } from '../../utils/encoding/toHex.js'
15
13
  import { getEstimateGasError } from '../../utils/errors/getEstimateGasError.js'
16
14
  import { extract } from '../../utils/formatters/extract.js'
17
- import { type Formatted, format } from '../../utils/formatters/format.js'
18
15
  import {
19
- type TransactionRequestFormatter,
16
+ type FormattedTransactionRequest,
20
17
  formatTransactionRequest,
21
18
  } from '../../utils/formatters/transactionRequest.js'
22
19
  import { assertRequest } from '../../utils/transaction/assertRequest.js'
23
20
  import { prepareRequest } from '../../utils/transaction/prepareRequest.js'
24
21
 
25
22
  export type FormattedEstimateGas<
26
- TFormatter extends Formatter | undefined = Formatter,
27
- > = MergeIntersectionProperties<
28
- Omit<Formatted<TFormatter, TransactionRequest, true>, 'from'>,
29
- TransactionRequest
30
- >
23
+ TChain extends Chain | undefined = Chain | undefined,
24
+ > = FormattedTransactionRequest<TChain>
31
25
 
32
26
  export type EstimateGasParameters<
33
27
  TChain extends Chain | undefined = Chain | undefined,
34
28
  TAccount extends Account | undefined = undefined,
35
- > = FormattedEstimateGas<TransactionRequestFormatter<TChain>> &
29
+ > = Omit<FormattedEstimateGas<TChain>, 'from'> &
36
30
  GetAccountParameter<TAccount> &
37
31
  (
38
32
  | {
@@ -114,26 +108,22 @@ export async function estimateGas<
114
108
 
115
109
  assertRequest(args)
116
110
 
117
- const formatter = client.chain?.formatters?.transactionRequest
118
- const request = format(
119
- {
120
- from: account.address,
121
- accessList,
122
- data,
123
- gas,
124
- gasPrice,
125
- maxFeePerGas,
126
- maxPriorityFeePerGas,
127
- nonce,
128
- to,
129
- value,
130
- // Pick out extra data that might exist on the chain's transaction request type.
131
- ...extract(rest, { formatter }),
132
- } as TransactionRequest,
133
- {
134
- formatter: formatter || formatTransactionRequest,
135
- },
136
- )
111
+ const format =
112
+ client.chain?.formatters?.transactionRequest || formatTransactionRequest
113
+ const request = format({
114
+ // Pick out extra data that might exist on the chain's transaction request type.
115
+ ...extract(rest, { formatter: format }),
116
+ from: account.address,
117
+ accessList,
118
+ data,
119
+ gas,
120
+ gasPrice,
121
+ maxFeePerGas,
122
+ maxPriorityFeePerGas,
123
+ nonce,
124
+ to,
125
+ value,
126
+ } as TransactionRequest)
137
127
 
138
128
  const balance = await (client as PublicClient).request({
139
129
  method: 'eth_estimateGas',
@@ -9,11 +9,9 @@ import type { Hash } from '../../types/misc.js'
9
9
  import type { RpcBlock } from '../../types/rpc.js'
10
10
  import { numberToHex } from '../../utils/encoding/toHex.js'
11
11
  import {
12
- type BlockFormatter,
13
12
  type FormattedBlock,
14
13
  formatBlock,
15
14
  } from '../../utils/formatters/block.js'
16
- import { format } from '../../utils/formatters/format.js'
17
15
 
18
16
  export type GetBlockParameters = {
19
17
  /** Whether or not to include transaction data in the response. */
@@ -44,7 +42,7 @@ export type GetBlockParameters = {
44
42
 
45
43
  export type GetBlockReturnType<
46
44
  TChain extends Chain | undefined = Chain | undefined,
47
- > = FormattedBlock<BlockFormatter<TChain>>
45
+ > = FormattedBlock<TChain>
48
46
 
49
47
  /**
50
48
  * Returns information about a block at a block number, hash, or tag.
@@ -102,7 +100,6 @@ export async function getBlock<
102
100
 
103
101
  if (!block) throw new BlockNotFoundError({ blockHash, blockNumber })
104
102
 
105
- return format(block, {
106
- formatter: client.chain?.formatters?.block || formatBlock,
107
- })
103
+ const format = client.chain?.formatters?.block || formatBlock
104
+ return format(block)
108
105
  }
@@ -6,10 +6,8 @@ import type { Chain } from '../../types/chain.js'
6
6
  import type { Hash } from '../../types/misc.js'
7
7
  import type { RpcTransaction } from '../../types/rpc.js'
8
8
  import { numberToHex } from '../../utils/encoding/toHex.js'
9
- import { format } from '../../utils/formatters/format.js'
10
9
  import {
11
10
  type FormattedTransaction,
12
- type TransactionFormatter,
13
11
  formatTransaction,
14
12
  } from '../../utils/formatters/transaction.js'
15
13
 
@@ -51,7 +49,7 @@ export type GetTransactionParameters =
51
49
  }
52
50
 
53
51
  export type GetTransactionReturnType<TChain extends Chain | undefined = Chain> =
54
- FormattedTransaction<TransactionFormatter<TChain>>
52
+ FormattedTransaction<TChain>
55
53
 
56
54
  /**
57
55
  * Returns information about a [Transaction](https://viem.sh/docs/glossary/terms.html#transaction) given a hash or block identifier.
@@ -117,7 +115,6 @@ export async function getTransaction<TChain extends Chain | undefined>(
117
115
  index,
118
116
  })
119
117
 
120
- return format(transaction, {
121
- formatter: client.chain?.formatters?.transaction || formatTransaction,
122
- })
118
+ const format = client.chain?.formatters?.transaction || formatTransaction
119
+ return format(transaction)
123
120
  }
@@ -2,10 +2,7 @@ import type { PublicClient } from '../../clients/createPublicClient.js'
2
2
  import type { Transport } from '../../clients/transports/createTransport.js'
3
3
  import type { Chain } from '../../types/chain.js'
4
4
  import type { Hash } from '../../types/misc.js'
5
- import type {
6
- FormattedTransactionReceipt,
7
- TransactionReceiptFormatter,
8
- } from '../../utils/formatters/transactionReceipt.js'
5
+ import type { FormattedTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'
9
6
 
10
7
  import { getBlockNumber } from './getBlockNumber.js'
11
8
  import { getTransaction } from './getTransaction.js'
@@ -21,9 +18,7 @@ export type GetTransactionConfirmationsParameters<
21
18
  | {
22
19
  hash?: never
23
20
  /** The transaction receipt. */
24
- transactionReceipt: FormattedTransactionReceipt<
25
- TransactionReceiptFormatter<TChain>
26
- >
21
+ transactionReceipt: FormattedTransactionReceipt<TChain>
27
22
  }
28
23
 
29
24
  export type GetTransactionConfirmationsReturnType = bigint
@@ -3,10 +3,8 @@ import type { Transport } from '../../clients/transports/createTransport.js'
3
3
  import { TransactionReceiptNotFoundError } from '../../errors/transaction.js'
4
4
  import type { Chain } from '../../types/chain.js'
5
5
  import type { Hash } from '../../types/misc.js'
6
- import { format } from '../../utils/formatters/format.js'
7
6
  import {
8
7
  type FormattedTransactionReceipt,
9
- type TransactionReceiptFormatter,
10
8
  formatTransactionReceipt,
11
9
  } from '../../utils/formatters/transactionReceipt.js'
12
10
 
@@ -17,7 +15,7 @@ export type GetTransactionReceiptParameters = {
17
15
 
18
16
  export type GetTransactionReceiptReturnType<
19
17
  TChain extends Chain | undefined = Chain | undefined,
20
- > = FormattedTransactionReceipt<TransactionReceiptFormatter<TChain>>
18
+ > = FormattedTransactionReceipt<TChain>
21
19
 
22
20
  /**
23
21
  * Returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms.html#transaction-receipt) given a [Transaction](https://viem.sh/docs/glossary/terms.html#transaction) hash.
@@ -54,8 +52,7 @@ export async function getTransactionReceipt<TChain extends Chain | undefined>(
54
52
 
55
53
  if (!receipt) throw new TransactionReceiptNotFoundError({ hash })
56
54
 
57
- return format(receipt, {
58
- formatter:
59
- client.chain?.formatters?.transactionReceipt || formatTransactionReceipt,
60
- }) as GetTransactionReceiptReturnType<TChain>
55
+ const format =
56
+ client.chain?.formatters?.transactionReceipt || formatTransactionReceipt
57
+ return format(receipt) as GetTransactionReceiptReturnType<TChain>
61
58
  }
@@ -38,7 +38,13 @@ export type SimulateContractParameters<
38
38
  CallParameters<TChainOverride extends Chain ? TChainOverride : TChain>,
39
39
  'batch' | 'to' | 'data' | 'value'
40
40
  > &
41
- GetValue<TAbi, TFunctionName, CallParameters<TChain>['value']>
41
+ GetValue<
42
+ TAbi,
43
+ TFunctionName,
44
+ CallParameters<TChain> extends CallParameters
45
+ ? CallParameters<TChain>['value']
46
+ : undefined
47
+ >
42
48
 
43
49
  export type SimulateContractReturnType<
44
50
  TAbi extends Abi | readonly unknown[] = Abi,
@@ -1,6 +1,6 @@
1
1
  import type { Address } from 'abitype'
2
2
 
3
- import type { Chain } from '../../chains.js'
3
+ import type { Chain } from '../../chains/index.js'
4
4
  import type { PublicClient } from '../../clients/createPublicClient.js'
5
5
  import type { Transport } from '../../clients/transports/createTransport.js'
6
6
  import { universalSignatureValidatorAbi } from '../../constants/abis.js'
@@ -1,4 +1,4 @@
1
- import type { Chain } from '../../chains.js'
1
+ import type { Chain } from '../../chains/index.js'
2
2
  import type { PublicClient } from '../../clients/createPublicClient.js'
3
3
  import type { Transport } from '../../clients/transports/createTransport.js'
4
4
  import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'
@@ -1,4 +1,4 @@
1
- import type { Chain } from '../../chains.js'
1
+ import type { Chain } from '../../chains/index.js'
2
2
  import type { PublicClient } from '../../clients/createPublicClient.js'
3
3
  import type { Transport } from '../../clients/transports/createTransport.js'
4
4
  import type { ByteArray, Hex } from '../../types/misc.js'
@@ -4,7 +4,6 @@ import type { BlockTag } from '../../types/block.js'
4
4
  import type { Chain } from '../../types/chain.js'
5
5
  import type { GetTransportConfig } from '../../types/transport.js'
6
6
  import { formatBlock } from '../../utils/formatters/block.js'
7
- import { format } from '../../utils/formatters/format.js'
8
7
  import { observe } from '../../utils/observe.js'
9
8
  import { poll } from '../../utils/poll.js'
10
9
  import { stringify } from '../../utils/stringify.js'
@@ -172,9 +171,8 @@ export function watchBlocks<
172
171
  params: ['newHeads'],
173
172
  onData(data: any) {
174
173
  if (!active) return
175
- const block = format(data.result, {
176
- formatter: client.chain?.formatters?.block || formatBlock,
177
- })
174
+ const format = client.chain?.formatters?.block || formatBlock
175
+ const block = format(data.result)
178
176
  onBlock(block, prevBlock)
179
177
  prevBlock = block
180
178
  },
@@ -4,27 +4,17 @@ import type {
4
4
  } from '../../clients/createTestClient.js'
5
5
  import type { Transport } from '../../clients/transports/createTransport.js'
6
6
  import type { Chain } from '../../types/chain.js'
7
- import type { Formatter } from '../../types/formatter.js'
8
7
  import type { Hash } from '../../types/misc.js'
9
8
  import type { TransactionRequest } from '../../types/transaction.js'
10
- import type { MergeIntersectionProperties } from '../../types/utils.js'
11
9
  import { extract } from '../../utils/formatters/extract.js'
12
- import { type Formatted, format } from '../../utils/formatters/format.js'
13
10
  import {
14
- type TransactionRequestFormatter,
11
+ type FormattedTransactionRequest,
15
12
  formatTransactionRequest,
16
13
  } from '../../utils/formatters/transactionRequest.js'
17
14
 
18
- type FormattedTransactionRequest<
19
- TFormatter extends Formatter | undefined = Formatter,
20
- > = MergeIntersectionProperties<
21
- Formatted<TFormatter, TransactionRequest, true>,
22
- TransactionRequest
23
- >
24
-
25
15
  export type SendUnsignedTransactionParameters<
26
16
  TChain extends Chain | undefined = Chain | undefined,
27
- > = FormattedTransactionRequest<TransactionRequestFormatter<TChain>>
17
+ > = FormattedTransactionRequest<TChain>
28
18
 
29
19
  export type SendUnsignedTransactionReturnType = Hash
30
20
 
@@ -73,26 +63,22 @@ export async function sendUnsignedTransaction<
73
63
  ...rest
74
64
  } = args
75
65
 
76
- const formatter = client.chain?.formatters?.transactionRequest
77
- const request = format(
78
- {
79
- accessList,
80
- data,
81
- from,
82
- gas,
83
- gasPrice,
84
- maxFeePerGas,
85
- maxPriorityFeePerGas,
86
- nonce,
87
- to,
88
- value,
89
- // Pick out extra data that might exist on the chain's transaction request type.
90
- ...extract(rest, { formatter }),
91
- } as TransactionRequest,
92
- {
93
- formatter: formatter || formatTransactionRequest,
94
- },
95
- )
66
+ const format =
67
+ client.chain?.formatters?.transactionRequest || formatTransactionRequest
68
+ const request = format({
69
+ // Pick out extra data that might exist on the chain's transaction request type.
70
+ ...extract(rest, { formatter: format }),
71
+ accessList,
72
+ data,
73
+ from,
74
+ gas,
75
+ gasPrice,
76
+ maxFeePerGas,
77
+ maxPriorityFeePerGas,
78
+ nonce,
79
+ to,
80
+ value,
81
+ } as TransactionRequest)
96
82
  const hash = await client.request({
97
83
  method: 'eth_sendUnsignedTransaction',
98
84
  params: [request],
@@ -6,37 +6,27 @@ import { AccountNotFoundError } from '../../errors/account.js'
6
6
  import type { BaseError } from '../../errors/base.js'
7
7
  import type { GetAccountParameter } from '../../types/account.js'
8
8
  import type { Chain, GetChain } from '../../types/chain.js'
9
- import type { Formatter } from '../../types/formatter.js'
10
9
  import type { Hash } from '../../types/misc.js'
11
10
  import type {
12
11
  TransactionRequest,
13
12
  TransactionSerializable,
14
13
  } from '../../types/transaction.js'
15
- import type { MergeIntersectionProperties } from '../../types/utils.js'
16
14
  import { assertCurrentChain } from '../../utils/chain.js'
17
15
  import { getTransactionError } from '../../utils/errors/getTransactionError.js'
18
16
  import { extract } from '../../utils/formatters/extract.js'
19
- import { type Formatted, format } from '../../utils/formatters/format.js'
20
17
  import {
21
- type TransactionRequestFormatter,
18
+ type FormattedTransactionRequest,
22
19
  formatTransactionRequest,
23
20
  } from '../../utils/formatters/transactionRequest.js'
24
21
  import { assertRequest } from '../../utils/transaction/assertRequest.js'
25
22
  import { prepareRequest } from '../../utils/transaction/prepareRequest.js'
26
23
  import { getChainId } from '../public/getChainId.js'
27
24
 
28
- export type FormattedTransactionRequest<
29
- TFormatter extends Formatter | undefined = Formatter,
30
- > = MergeIntersectionProperties<
31
- Omit<Formatted<TFormatter, TransactionRequest, true>, 'from'>,
32
- TransactionRequest
33
- >
34
-
35
25
  export type SendTransactionParameters<
36
26
  TChain extends Chain | undefined = Chain | undefined,
37
27
  TAccount extends Account | undefined = Account | undefined,
38
28
  TChainOverride extends Chain | undefined = Chain,
39
- > = FormattedTransactionRequest<TransactionRequestFormatter<TChainOverride>> &
29
+ > = Omit<FormattedTransactionRequest<TChainOverride>, 'from'> &
40
30
  GetAccountParameter<TAccount> &
41
31
  GetChain<TChain, TChainOverride>
42
32
 
@@ -161,26 +151,22 @@ export async function sendTransaction<
161
151
  })
162
152
  }
163
153
 
164
- const formatter = chain?.formatters?.transactionRequest
165
- const request = format(
166
- {
167
- accessList,
168
- data,
169
- from: account.address,
170
- gas,
171
- gasPrice,
172
- maxFeePerGas,
173
- maxPriorityFeePerGas,
174
- nonce,
175
- to,
176
- value,
177
- // Pick out extra data that might exist on the chain's transaction request type.
178
- ...extract(rest, { formatter }),
179
- } as TransactionRequest,
180
- {
181
- formatter: formatter || formatTransactionRequest,
182
- },
183
- )
154
+ const format =
155
+ chain?.formatters?.transactionRequest || formatTransactionRequest
156
+ const request = format({
157
+ // Pick out extra data that might exist on the chain's transaction request type.
158
+ ...extract(rest, { formatter: format }),
159
+ accessList,
160
+ data,
161
+ from: account.address,
162
+ gas,
163
+ gasPrice,
164
+ maxFeePerGas,
165
+ maxPriorityFeePerGas,
166
+ nonce,
167
+ to,
168
+ value,
169
+ } as TransactionRequest)
184
170
  return await client.request({
185
171
  method: 'eth_sendTransaction',
186
172
  params: [request],
@@ -0,0 +1,102 @@
1
+ import type { Address } from 'abitype'
2
+
3
+ import type { Hash, Hex } from '../../types/misc.js'
4
+ import type { RpcTransaction } from '../../types/rpc.js'
5
+ import type { Transaction } from '../../types/transaction.js'
6
+ import { hexToBigInt } from '../../utils/encoding/fromHex.js'
7
+ import { numberToHex } from '../../utils/encoding/toHex.js'
8
+ import { defineBlock } from '../../utils/formatters/block.js'
9
+ import {
10
+ defineTransaction,
11
+ formatTransaction,
12
+ } from '../../utils/formatters/transaction.js'
13
+ import { defineTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'
14
+ import { defineTransactionRequest } from '../../utils/formatters/transactionRequest.js'
15
+
16
+ export type CeloOverrides = {
17
+ RpcBlock: {
18
+ randomness: {
19
+ committed: Hex
20
+ revealed: Hex
21
+ }
22
+ transactions:
23
+ | Hash[]
24
+ | (RpcTransaction & {
25
+ feeCurrency: Address | null
26
+ gatewayFee: Hex | null
27
+ gatewayFeeRecipient: Address | null
28
+ })[]
29
+ }
30
+ RpcTransaction: {
31
+ feeCurrency: Address | null
32
+ gatewayFee: Hex | null
33
+ gatewayFeeRecipient: Address | null
34
+ }
35
+ RpcTransactionReceipt: {
36
+ feeCurrency: Address | null
37
+ gatewayFee: Hex | null
38
+ gatewayFeeRecipient: Address | null
39
+ }
40
+ TransactionRequest: {
41
+ feeCurrency?: Address
42
+ gatewayFee?: bigint
43
+ gatewayFeeRecipient?: Address
44
+ }
45
+ Transaction: {
46
+ feeCurrency: Address | null
47
+ gatewayFee: bigint | null
48
+ gatewayFeeRecipient: Address | null
49
+ }
50
+ }
51
+ export const celoFormatters = {
52
+ block: /*#__PURE__*/ defineBlock({
53
+ exclude: ['difficulty', 'gasLimit', 'mixHash', 'nonce', 'uncles'],
54
+ format(args: CeloOverrides['RpcBlock']) {
55
+ const transactions = args.transactions?.map((transaction) => {
56
+ if (typeof transaction === 'string') return transaction
57
+ return {
58
+ ...formatTransaction(transaction),
59
+ feeCurrency: transaction.feeCurrency,
60
+ gatewayFee: transaction.gatewayFee
61
+ ? hexToBigInt(transaction.gatewayFee)
62
+ : null,
63
+ gatewayFeeRecipient: transaction.gatewayFeeRecipient,
64
+ }
65
+ }) as Hash[] | (Transaction & CeloOverrides['Transaction'])[]
66
+ return {
67
+ randomness: args.randomness,
68
+ transactions,
69
+ }
70
+ },
71
+ }),
72
+ transaction: /*#__PURE__*/ defineTransaction({
73
+ format(args: CeloOverrides['RpcTransaction']) {
74
+ return {
75
+ feeCurrency: args.feeCurrency,
76
+ gatewayFee: args.gatewayFee ? hexToBigInt(args.gatewayFee) : null,
77
+ gatewayFeeRecipient: args.gatewayFeeRecipient,
78
+ }
79
+ },
80
+ }),
81
+ transactionReceipt: /*#__PURE__*/ defineTransactionReceipt({
82
+ format(args: CeloOverrides['RpcTransactionReceipt']) {
83
+ return {
84
+ feeCurrency: args.feeCurrency,
85
+ gatewayFee: args.gatewayFee ? hexToBigInt(args.gatewayFee) : null,
86
+ gatewayFeeRecipient: args.gatewayFeeRecipient,
87
+ }
88
+ },
89
+ }),
90
+ transactionRequest: /*#__PURE__*/ defineTransactionRequest({
91
+ format(args: CeloOverrides['TransactionRequest']) {
92
+ return {
93
+ feeCurrency: args.feeCurrency,
94
+ gatewayFee:
95
+ typeof args.gatewayFee !== 'undefined'
96
+ ? numberToHex(args.gatewayFee)
97
+ : undefined,
98
+ gatewayFeeRecipient: args.gatewayFeeRecipient,
99
+ }
100
+ },
101
+ }),
102
+ } as const