viem 2.34.0 → 2.35.0-canary-20250821143721

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 (199) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +6 -0
  3. package/_cjs/actions/ens/getEnsAddress.js +9 -6
  4. package/_cjs/actions/ens/getEnsAddress.js.map +1 -1
  5. package/_cjs/actions/ens/getEnsName.js +16 -22
  6. package/_cjs/actions/ens/getEnsName.js.map +1 -1
  7. package/_cjs/actions/ens/getEnsResolver.js +5 -1
  8. package/_cjs/actions/ens/getEnsResolver.js.map +1 -1
  9. package/_cjs/actions/ens/getEnsText.js +2 -2
  10. package/_cjs/actions/ens/getEnsText.js.map +1 -1
  11. package/_cjs/actions/public/waitForTransactionReceipt.js +5 -5
  12. package/_cjs/actions/public/waitForTransactionReceipt.js.map +1 -1
  13. package/_cjs/chains/definitions/avalanche.js +1 -0
  14. package/_cjs/chains/definitions/avalanche.js.map +1 -1
  15. package/_cjs/chains/definitions/berachain.js +3 -2
  16. package/_cjs/chains/definitions/berachain.js.map +1 -1
  17. package/_cjs/chains/definitions/berachainBepolia.js +1 -0
  18. package/_cjs/chains/definitions/berachainBepolia.js.map +1 -1
  19. package/_cjs/chains/definitions/bsc.js +1 -0
  20. package/_cjs/chains/definitions/bsc.js.map +1 -1
  21. package/_cjs/chains/definitions/eduChain.js +6 -0
  22. package/_cjs/chains/definitions/eduChain.js.map +1 -1
  23. package/_cjs/chains/definitions/etherlink.js +1 -0
  24. package/_cjs/chains/definitions/etherlink.js.map +1 -1
  25. package/_cjs/chains/definitions/hemi.js +1 -0
  26. package/_cjs/chains/definitions/hemi.js.map +1 -1
  27. package/_cjs/chains/definitions/holesky.js +2 -6
  28. package/_cjs/chains/definitions/holesky.js.map +1 -1
  29. package/_cjs/chains/definitions/linea.js +2 -2
  30. package/_cjs/chains/definitions/linea.js.map +1 -1
  31. package/_cjs/chains/definitions/lineaSepolia.js +2 -2
  32. package/_cjs/chains/definitions/lineaSepolia.js.map +1 -1
  33. package/_cjs/chains/definitions/mainnet.js +2 -5
  34. package/_cjs/chains/definitions/mainnet.js.map +1 -1
  35. package/_cjs/chains/definitions/mantraDuKongEVMTestnet.js +24 -0
  36. package/_cjs/chains/definitions/mantraDuKongEVMTestnet.js.map +1 -0
  37. package/_cjs/chains/definitions/megaethTestnet.js +1 -0
  38. package/_cjs/chains/definitions/megaethTestnet.js.map +1 -1
  39. package/_cjs/chains/definitions/monadTestnet.js +1 -0
  40. package/_cjs/chains/definitions/monadTestnet.js.map +1 -1
  41. package/_cjs/chains/definitions/sepolia.js +2 -3
  42. package/_cjs/chains/definitions/sepolia.js.map +1 -1
  43. package/_cjs/chains/definitions/sonic.js +1 -0
  44. package/_cjs/chains/definitions/sonic.js.map +1 -1
  45. package/_cjs/chains/index.js +9 -7
  46. package/_cjs/chains/index.js.map +1 -1
  47. package/_cjs/constants/abis.js +78 -45
  48. package/_cjs/constants/abis.js.map +1 -1
  49. package/_cjs/ens/index.js +3 -1
  50. package/_cjs/ens/index.js.map +1 -1
  51. package/_cjs/errors/ens.js +9 -1
  52. package/_cjs/errors/ens.js.map +1 -1
  53. package/_cjs/errors/version.js +1 -1
  54. package/_cjs/errors/version.js.map +1 -1
  55. package/_cjs/index.js +8 -5
  56. package/_cjs/index.js.map +1 -1
  57. package/_cjs/utils/ens/errors.js +6 -9
  58. package/_cjs/utils/ens/errors.js.map +1 -1
  59. package/_cjs/utils/ens/toCoinType.js +13 -0
  60. package/_cjs/utils/ens/toCoinType.js.map +1 -0
  61. package/_esm/actions/ens/getEnsAddress.js +9 -6
  62. package/_esm/actions/ens/getEnsAddress.js.map +1 -1
  63. package/_esm/actions/ens/getEnsName.js +16 -22
  64. package/_esm/actions/ens/getEnsName.js.map +1 -1
  65. package/_esm/actions/ens/getEnsResolver.js +5 -1
  66. package/_esm/actions/ens/getEnsResolver.js.map +1 -1
  67. package/_esm/actions/ens/getEnsText.js +2 -2
  68. package/_esm/actions/ens/getEnsText.js.map +1 -1
  69. package/_esm/actions/public/waitForTransactionReceipt.js +5 -5
  70. package/_esm/actions/public/waitForTransactionReceipt.js.map +1 -1
  71. package/_esm/chains/definitions/avalanche.js +1 -0
  72. package/_esm/chains/definitions/avalanche.js.map +1 -1
  73. package/_esm/chains/definitions/berachain.js +3 -2
  74. package/_esm/chains/definitions/berachain.js.map +1 -1
  75. package/_esm/chains/definitions/berachainBepolia.js +1 -0
  76. package/_esm/chains/definitions/berachainBepolia.js.map +1 -1
  77. package/_esm/chains/definitions/bsc.js +1 -0
  78. package/_esm/chains/definitions/bsc.js.map +1 -1
  79. package/_esm/chains/definitions/eduChain.js +6 -0
  80. package/_esm/chains/definitions/eduChain.js.map +1 -1
  81. package/_esm/chains/definitions/etherlink.js +1 -0
  82. package/_esm/chains/definitions/etherlink.js.map +1 -1
  83. package/_esm/chains/definitions/hemi.js +1 -0
  84. package/_esm/chains/definitions/hemi.js.map +1 -1
  85. package/_esm/chains/definitions/holesky.js +2 -6
  86. package/_esm/chains/definitions/holesky.js.map +1 -1
  87. package/_esm/chains/definitions/linea.js +2 -2
  88. package/_esm/chains/definitions/linea.js.map +1 -1
  89. package/_esm/chains/definitions/lineaSepolia.js +2 -2
  90. package/_esm/chains/definitions/lineaSepolia.js.map +1 -1
  91. package/_esm/chains/definitions/mainnet.js +2 -5
  92. package/_esm/chains/definitions/mainnet.js.map +1 -1
  93. package/_esm/chains/definitions/mantraDuKongEVMTestnet.js +21 -0
  94. package/_esm/chains/definitions/mantraDuKongEVMTestnet.js.map +1 -0
  95. package/_esm/chains/definitions/megaethTestnet.js +1 -0
  96. package/_esm/chains/definitions/megaethTestnet.js.map +1 -1
  97. package/_esm/chains/definitions/monadTestnet.js +1 -0
  98. package/_esm/chains/definitions/monadTestnet.js.map +1 -1
  99. package/_esm/chains/definitions/sepolia.js +2 -3
  100. package/_esm/chains/definitions/sepolia.js.map +1 -1
  101. package/_esm/chains/definitions/sonic.js +1 -0
  102. package/_esm/chains/definitions/sonic.js.map +1 -1
  103. package/_esm/chains/index.js +1 -0
  104. package/_esm/chains/index.js.map +1 -1
  105. package/_esm/constants/abis.js +78 -45
  106. package/_esm/constants/abis.js.map +1 -1
  107. package/_esm/ens/index.js +1 -0
  108. package/_esm/ens/index.js.map +1 -1
  109. package/_esm/errors/ens.js +7 -0
  110. package/_esm/errors/ens.js.map +1 -1
  111. package/_esm/errors/version.js +1 -1
  112. package/_esm/errors/version.js.map +1 -1
  113. package/_esm/index.js +2 -1
  114. package/_esm/index.js.map +1 -1
  115. package/_esm/utils/ens/errors.js +6 -11
  116. package/_esm/utils/ens/errors.js.map +1 -1
  117. package/_esm/utils/ens/toCoinType.js +17 -0
  118. package/_esm/utils/ens/toCoinType.js.map +1 -0
  119. package/_types/actions/ens/getEnsAddress.d.ts +26 -6
  120. package/_types/actions/ens/getEnsAddress.d.ts.map +1 -1
  121. package/_types/actions/ens/getEnsName.d.ts +29 -8
  122. package/_types/actions/ens/getEnsName.d.ts.map +1 -1
  123. package/_types/actions/ens/getEnsResolver.d.ts.map +1 -1
  124. package/_types/chains/definitions/avalanche.d.ts +1 -1
  125. package/_types/chains/definitions/avalanche.d.ts.map +1 -1
  126. package/_types/chains/definitions/berachain.d.ts +3 -3
  127. package/_types/chains/definitions/berachain.d.ts.map +1 -1
  128. package/_types/chains/definitions/berachainBepolia.d.ts +1 -1
  129. package/_types/chains/definitions/berachainBepolia.d.ts.map +1 -1
  130. package/_types/chains/definitions/bsc.d.ts +1 -1
  131. package/_types/chains/definitions/bsc.d.ts.map +1 -1
  132. package/_types/chains/definitions/eduChain.d.ts +6 -9
  133. package/_types/chains/definitions/eduChain.d.ts.map +1 -1
  134. package/_types/chains/definitions/etherlink.d.ts +1 -1
  135. package/_types/chains/definitions/etherlink.d.ts.map +1 -1
  136. package/_types/chains/definitions/hemi.d.ts +1 -1
  137. package/_types/chains/definitions/hemi.d.ts.map +1 -1
  138. package/_types/chains/definitions/holesky.d.ts +2 -6
  139. package/_types/chains/definitions/holesky.d.ts.map +1 -1
  140. package/_types/chains/definitions/linea.d.ts +2 -2
  141. package/_types/chains/definitions/lineaSepolia.d.ts +2 -2
  142. package/_types/chains/definitions/mainnet.d.ts +2 -5
  143. package/_types/chains/definitions/mainnet.d.ts.map +1 -1
  144. package/_types/chains/definitions/mantraDuKongEVMTestnet.d.ts +39 -0
  145. package/_types/chains/definitions/mantraDuKongEVMTestnet.d.ts.map +1 -0
  146. package/_types/chains/definitions/megaethTestnet.d.ts +1 -1
  147. package/_types/chains/definitions/megaethTestnet.d.ts.map +1 -1
  148. package/_types/chains/definitions/monadTestnet.d.ts +1 -1
  149. package/_types/chains/definitions/monadTestnet.d.ts.map +1 -1
  150. package/_types/chains/definitions/sepolia.d.ts +2 -5
  151. package/_types/chains/definitions/sepolia.d.ts.map +1 -1
  152. package/_types/chains/definitions/sonic.d.ts +1 -1
  153. package/_types/chains/definitions/sonic.d.ts.map +1 -1
  154. package/_types/chains/index.d.ts +1 -0
  155. package/_types/chains/index.d.ts.map +1 -1
  156. package/_types/constants/abis.d.ts +103 -60
  157. package/_types/constants/abis.d.ts.map +1 -1
  158. package/_types/ens/index.d.ts +1 -0
  159. package/_types/ens/index.d.ts.map +1 -1
  160. package/_types/errors/ens.d.ts +8 -0
  161. package/_types/errors/ens.d.ts.map +1 -1
  162. package/_types/errors/version.d.ts +1 -1
  163. package/_types/errors/version.d.ts.map +1 -1
  164. package/_types/index.d.ts +2 -1
  165. package/_types/index.d.ts.map +1 -1
  166. package/_types/utils/ens/errors.d.ts +1 -1
  167. package/_types/utils/ens/errors.d.ts.map +1 -1
  168. package/_types/utils/ens/toCoinType.d.ts +12 -0
  169. package/_types/utils/ens/toCoinType.d.ts.map +1 -0
  170. package/actions/ens/getEnsAddress.ts +35 -12
  171. package/actions/ens/getEnsName.ts +47 -33
  172. package/actions/ens/getEnsResolver.ts +5 -1
  173. package/actions/ens/getEnsText.ts +2 -2
  174. package/actions/public/waitForTransactionReceipt.ts +5 -5
  175. package/chains/definitions/avalanche.ts +1 -0
  176. package/chains/definitions/berachain.ts +4 -2
  177. package/chains/definitions/berachainBepolia.ts +1 -0
  178. package/chains/definitions/bsc.ts +1 -0
  179. package/chains/definitions/eduChain.ts +6 -0
  180. package/chains/definitions/etherlink.ts +1 -0
  181. package/chains/definitions/hemi.ts +1 -0
  182. package/chains/definitions/holesky.ts +2 -6
  183. package/chains/definitions/linea.ts +2 -2
  184. package/chains/definitions/lineaSepolia.ts +2 -2
  185. package/chains/definitions/mainnet.ts +2 -5
  186. package/chains/definitions/mantraDuKongEVMTestnet.ts +21 -0
  187. package/chains/definitions/megaethTestnet.ts +1 -0
  188. package/chains/definitions/monadTestnet.ts +1 -0
  189. package/chains/definitions/sepolia.ts +2 -3
  190. package/chains/definitions/sonic.ts +1 -0
  191. package/chains/index.ts +1 -0
  192. package/constants/abis.ts +79 -46
  193. package/ens/index.ts +4 -0
  194. package/errors/ens.ts +14 -0
  195. package/errors/version.ts +1 -1
  196. package/index.ts +6 -0
  197. package/package.json +1 -1
  198. package/utils/ens/errors.ts +8 -18
  199. package/utils/ens/toCoinType.ts +23 -0
package/constants/abis.ts CHANGED
@@ -97,24 +97,53 @@ export const batchGatewayAbi = [
97
97
 
98
98
  const universalResolverErrors = [
99
99
  {
100
- inputs: [],
101
- name: 'ResolverNotFound',
100
+ inputs: [
101
+ {
102
+ name: 'dns',
103
+ type: 'bytes',
104
+ },
105
+ ],
106
+ name: 'DNSDecodingFailed',
107
+ type: 'error',
108
+ },
109
+ {
110
+ inputs: [
111
+ {
112
+ name: 'ens',
113
+ type: 'string',
114
+ },
115
+ ],
116
+ name: 'DNSEncodingFailed',
102
117
  type: 'error',
103
118
  },
104
119
  {
105
120
  inputs: [],
106
- name: 'ResolverWildcardNotSupported',
121
+ name: 'EmptyAddress',
122
+ type: 'error',
123
+ },
124
+ {
125
+ inputs: [
126
+ {
127
+ name: 'status',
128
+ type: 'uint16',
129
+ },
130
+ {
131
+ name: 'message',
132
+ type: 'string',
133
+ },
134
+ ],
135
+ name: 'HttpError',
107
136
  type: 'error',
108
137
  },
109
138
  {
110
139
  inputs: [],
111
- name: 'ResolverNotContract',
140
+ name: 'InvalidBatchGatewayResponse',
112
141
  type: 'error',
113
142
  },
114
143
  {
115
144
  inputs: [
116
145
  {
117
- name: 'returnData',
146
+ name: 'errorData',
118
147
  type: 'bytes',
119
148
  },
120
149
  ],
@@ -124,42 +153,58 @@ const universalResolverErrors = [
124
153
  {
125
154
  inputs: [
126
155
  {
127
- components: [
128
- {
129
- name: 'status',
130
- type: 'uint16',
131
- },
132
- {
133
- name: 'message',
134
- type: 'string',
135
- },
136
- ],
137
- name: 'errors',
138
- type: 'tuple[]',
156
+ name: 'name',
157
+ type: 'bytes',
158
+ },
159
+ {
160
+ name: 'resolver',
161
+ type: 'address',
139
162
  },
140
163
  ],
141
- name: 'HttpError',
164
+ name: 'ResolverNotContract',
142
165
  type: 'error',
143
166
  },
144
- ] as const
145
-
146
- export const universalResolverResolveAbi = [
147
- ...universalResolverErrors,
148
167
  {
149
- name: 'resolve',
150
- type: 'function',
151
- stateMutability: 'view',
152
168
  inputs: [
153
- { name: 'name', type: 'bytes' },
154
- { name: 'data', type: 'bytes' },
169
+ {
170
+ name: 'name',
171
+ type: 'bytes',
172
+ },
155
173
  ],
156
- outputs: [
157
- { name: '', type: 'bytes' },
158
- { name: 'address', type: 'address' },
174
+ name: 'ResolverNotFound',
175
+ type: 'error',
176
+ },
177
+ {
178
+ inputs: [
179
+ {
180
+ name: 'primary',
181
+ type: 'string',
182
+ },
183
+ {
184
+ name: 'primaryAddress',
185
+ type: 'bytes',
186
+ },
159
187
  ],
188
+ name: 'ReverseAddressMismatch',
189
+ type: 'error',
160
190
  },
161
191
  {
162
- name: 'resolve',
192
+ inputs: [
193
+ {
194
+ internalType: 'bytes4',
195
+ name: 'selector',
196
+ type: 'bytes4',
197
+ },
198
+ ],
199
+ name: 'UnsupportedResolverProfile',
200
+ type: 'error',
201
+ },
202
+ ] as const
203
+
204
+ export const universalResolverResolveAbi = [
205
+ ...universalResolverErrors,
206
+ {
207
+ name: 'resolveWithGateways',
163
208
  type: 'function',
164
209
  stateMutability: 'view',
165
210
  inputs: [
@@ -177,30 +222,18 @@ export const universalResolverResolveAbi = [
177
222
  export const universalResolverReverseAbi = [
178
223
  ...universalResolverErrors,
179
224
  {
180
- name: 'reverse',
181
- type: 'function',
182
- stateMutability: 'view',
183
- inputs: [{ type: 'bytes', name: 'reverseName' }],
184
- outputs: [
185
- { type: 'string', name: 'resolvedName' },
186
- { type: 'address', name: 'resolvedAddress' },
187
- { type: 'address', name: 'reverseResolver' },
188
- { type: 'address', name: 'resolver' },
189
- ],
190
- },
191
- {
192
- name: 'reverse',
225
+ name: 'reverseWithGateways',
193
226
  type: 'function',
194
227
  stateMutability: 'view',
195
228
  inputs: [
196
229
  { type: 'bytes', name: 'reverseName' },
230
+ { type: 'uint256', name: 'coinType' },
197
231
  { type: 'string[]', name: 'gateways' },
198
232
  ],
199
233
  outputs: [
200
234
  { type: 'string', name: 'resolvedName' },
201
- { type: 'address', name: 'resolvedAddress' },
202
- { type: 'address', name: 'reverseResolver' },
203
235
  { type: 'address', name: 'resolver' },
236
+ { type: 'address', name: 'reverseResolver' },
204
237
  ],
205
238
  },
206
239
  ] as const
package/ens/index.ts CHANGED
@@ -30,6 +30,10 @@ export {
30
30
  type GetEnsTextReturnType,
31
31
  getEnsText,
32
32
  } from '../actions/ens/getEnsText.js'
33
+ export {
34
+ type ToCoinTypeError,
35
+ toCoinType,
36
+ } from '../utils/ens/toCoinType.js'
33
37
  export { type LabelhashErrorType, labelhash } from '../utils/ens/labelhash.js'
34
38
  export { type NamehashErrorType, namehash } from '../utils/ens/namehash.js'
35
39
  export {
package/errors/ens.ts CHANGED
@@ -55,3 +55,17 @@ export class EnsAvatarUnsupportedNamespaceError extends BaseError {
55
55
  )
56
56
  }
57
57
  }
58
+
59
+ export type EnsInvalidChainIdErrorType = EnsInvalidChainIdError & {
60
+ name: 'EnsInvalidChainIdError'
61
+ }
62
+ export class EnsInvalidChainIdError extends BaseError {
63
+ constructor({ chainId }: { chainId: number }) {
64
+ super(
65
+ `Invalid ENSIP-11 chainId: ${chainId}. Must be between 0 and 0x7fffffff, or 1.`,
66
+ {
67
+ name: 'EnsInvalidChainIdError',
68
+ },
69
+ )
70
+ }
71
+ }
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.34.0'
1
+ export const version = '2.35.0-canary-20250821143721'
package/index.ts CHANGED
@@ -901,6 +901,8 @@ export {
901
901
  EnsAvatarUnsupportedNamespaceError,
902
902
  type EnsAvatarUnsupportedNamespaceErrorType,
903
903
  type EnsAvatarUriResolutionErrorType,
904
+ EnsInvalidChainIdError,
905
+ type EnsInvalidChainIdErrorType,
904
906
  } from './errors/ens.js'
905
907
  export {
906
908
  type InvalidDecimalNumberErrorType,
@@ -1229,6 +1231,10 @@ export type {
1229
1231
  StateMapping,
1230
1232
  StateOverride,
1231
1233
  } from './types/stateOverride.js'
1234
+ export {
1235
+ toCoinType,
1236
+ type ToCoinTypeError,
1237
+ } from './utils/ens/toCoinType.js'
1232
1238
  export { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'
1233
1239
  export { namehash, type NamehashErrorType } from './utils/ens/namehash.js'
1234
1240
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viem",
3
3
  "description": "TypeScript Interface for Ethereum",
4
- "version": "2.34.0",
4
+ "version": "2.35.0-canary-20250821143721",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -1,4 +1,3 @@
1
- import { panicReasons } from '../../constants/solidity.js'
2
1
  import { BaseError } from '../../errors/base.js'
3
2
  import { ContractFunctionRevertedError } from '../../errors/contract.js'
4
3
  import type { ErrorType } from '../../errors/utils.js'
@@ -9,26 +8,17 @@ export type IsNullUniversalResolverErrorErrorType = ErrorType
9
8
  /*
10
9
  * @description Checks if error is a valid null result UniversalResolver error
11
10
  */
12
- export function isNullUniversalResolverError(
13
- err: unknown,
14
- callType: 'resolve' | 'reverse',
15
- ): boolean {
11
+ export function isNullUniversalResolverError(err: unknown): boolean {
16
12
  if (!(err instanceof BaseError)) return false
17
13
  const cause = err.walk((e) => e instanceof ContractFunctionRevertedError)
18
14
  if (!(cause instanceof ContractFunctionRevertedError)) return false
19
- if (cause.data?.errorName === 'ResolverNotFound') return true
20
- if (cause.data?.errorName === 'ResolverWildcardNotSupported') return true
21
- if (cause.data?.errorName === 'ResolverNotContract') return true
22
- if (cause.data?.errorName === 'ResolverError') return true
15
+
23
16
  if (cause.data?.errorName === 'HttpError') return true
24
- // Backwards compatibility for older UniversalResolver contracts
25
- if (
26
- cause.reason?.includes(
27
- 'Wildcard on non-extended resolvers is not supported',
28
- )
29
- )
30
- return true
31
- // No primary name set for address.
32
- if (callType === 'reverse' && cause.reason === panicReasons[50]) return true
17
+ if (cause.data?.errorName === 'ResolverError') return true
18
+ if (cause.data?.errorName === 'ResolverNotContract') return true
19
+ if (cause.data?.errorName === 'ResolverNotFound') return true
20
+ if (cause.data?.errorName === 'ReverseAddressMismatch') return true
21
+ if (cause.data?.errorName === 'UnsupportedResolverProfile') return true
22
+
33
23
  return false
34
24
  }
@@ -0,0 +1,23 @@
1
+ import {
2
+ EnsInvalidChainIdError,
3
+ type EnsInvalidChainIdErrorType,
4
+ } from '../../errors/ens.js'
5
+ import type { ErrorType } from '../../errors/utils.js'
6
+
7
+ export type ToCoinTypeError = EnsInvalidChainIdErrorType | ErrorType
8
+
9
+ const SLIP44_MSB = 0x80000000
10
+
11
+ /**
12
+ * @description Converts a chainId to a ENSIP-9 compliant coinType
13
+ *
14
+ * @example
15
+ * toCoinType(10)
16
+ * 2147483658n
17
+ */
18
+ export function toCoinType(chainId: number): bigint {
19
+ if (chainId === 1) return 60n
20
+ if (chainId >= SLIP44_MSB || chainId < 0)
21
+ throw new EnsInvalidChainIdError({ chainId })
22
+ return BigInt((0x80000000 | chainId) >>> 0)
23
+ }