viem 2.7.9 → 2.7.10

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 (154) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/_cjs/accounts/toAccount.js +2 -2
  3. package/_cjs/accounts/toAccount.js.map +1 -1
  4. package/_cjs/actions/public/call.js +1 -1
  5. package/_cjs/actions/public/call.js.map +1 -1
  6. package/_cjs/chains/definitions/base.js +6 -0
  7. package/_cjs/chains/definitions/base.js.map +1 -1
  8. package/_cjs/chains/definitions/baseGoerli.js +5 -0
  9. package/_cjs/chains/definitions/baseGoerli.js.map +1 -1
  10. package/_cjs/chains/definitions/baseSepolia.js +6 -0
  11. package/_cjs/chains/definitions/baseSepolia.js.map +1 -1
  12. package/_cjs/chains/definitions/optimism.js +5 -0
  13. package/_cjs/chains/definitions/optimism.js.map +1 -1
  14. package/_cjs/chains/definitions/optimismGoerli.js +5 -0
  15. package/_cjs/chains/definitions/optimismGoerli.js.map +1 -1
  16. package/_cjs/chains/definitions/optimismSepolia.js +5 -0
  17. package/_cjs/chains/definitions/optimismSepolia.js.map +1 -1
  18. package/_cjs/chains/definitions/pgn.js +5 -0
  19. package/_cjs/chains/definitions/pgn.js.map +1 -1
  20. package/_cjs/chains/definitions/pgnTestnet.js +10 -0
  21. package/_cjs/chains/definitions/pgnTestnet.js.map +1 -1
  22. package/_cjs/chains/definitions/xdc.js +6 -0
  23. package/_cjs/chains/definitions/xdc.js.map +1 -1
  24. package/_cjs/chains/definitions/xdcTestnet.js +6 -0
  25. package/_cjs/chains/definitions/xdcTestnet.js.map +1 -1
  26. package/_cjs/chains/definitions/zora.js +5 -0
  27. package/_cjs/chains/definitions/zora.js.map +1 -1
  28. package/_cjs/chains/definitions/zoraSepolia.js +5 -0
  29. package/_cjs/chains/definitions/zoraSepolia.js.map +1 -1
  30. package/_cjs/chains/opStack/abis.js +458 -1
  31. package/_cjs/chains/opStack/abis.js.map +1 -1
  32. package/_cjs/errors/address.js +6 -1
  33. package/_cjs/errors/address.js.map +1 -1
  34. package/_cjs/errors/version.js +1 -1
  35. package/_cjs/errors/version.js.map +1 -1
  36. package/_cjs/utils/abi/getAbiItem.js +3 -3
  37. package/_cjs/utils/abi/getAbiItem.js.map +1 -1
  38. package/_cjs/utils/address/isAddress.js +17 -2
  39. package/_cjs/utils/address/isAddress.js.map +1 -1
  40. package/_cjs/utils/address/isAddressEqual.js +2 -2
  41. package/_cjs/utils/address/isAddressEqual.js.map +1 -1
  42. package/_cjs/utils/lru.js +23 -0
  43. package/_cjs/utils/lru.js.map +1 -0
  44. package/_cjs/utils/transaction/parseTransaction.js +1 -1
  45. package/_cjs/utils/transaction/parseTransaction.js.map +1 -1
  46. package/_cjs/utils/transaction/serializeAccessList.js +1 -1
  47. package/_cjs/utils/transaction/serializeAccessList.js.map +1 -1
  48. package/_esm/accounts/toAccount.js +2 -2
  49. package/_esm/accounts/toAccount.js.map +1 -1
  50. package/_esm/actions/public/call.js +1 -1
  51. package/_esm/actions/public/call.js.map +1 -1
  52. package/_esm/chains/definitions/base.js +6 -0
  53. package/_esm/chains/definitions/base.js.map +1 -1
  54. package/_esm/chains/definitions/baseGoerli.js +5 -0
  55. package/_esm/chains/definitions/baseGoerli.js.map +1 -1
  56. package/_esm/chains/definitions/baseSepolia.js +6 -0
  57. package/_esm/chains/definitions/baseSepolia.js.map +1 -1
  58. package/_esm/chains/definitions/optimism.js +5 -0
  59. package/_esm/chains/definitions/optimism.js.map +1 -1
  60. package/_esm/chains/definitions/optimismGoerli.js +5 -0
  61. package/_esm/chains/definitions/optimismGoerli.js.map +1 -1
  62. package/_esm/chains/definitions/optimismSepolia.js +5 -0
  63. package/_esm/chains/definitions/optimismSepolia.js.map +1 -1
  64. package/_esm/chains/definitions/pgn.js +5 -0
  65. package/_esm/chains/definitions/pgn.js.map +1 -1
  66. package/_esm/chains/definitions/pgnTestnet.js +10 -0
  67. package/_esm/chains/definitions/pgnTestnet.js.map +1 -1
  68. package/_esm/chains/definitions/xdc.js +6 -0
  69. package/_esm/chains/definitions/xdc.js.map +1 -1
  70. package/_esm/chains/definitions/xdcTestnet.js +6 -0
  71. package/_esm/chains/definitions/xdcTestnet.js.map +1 -1
  72. package/_esm/chains/definitions/zora.js +5 -0
  73. package/_esm/chains/definitions/zora.js.map +1 -1
  74. package/_esm/chains/definitions/zoraSepolia.js +5 -0
  75. package/_esm/chains/definitions/zoraSepolia.js.map +1 -1
  76. package/_esm/chains/opStack/abis.js +457 -0
  77. package/_esm/chains/opStack/abis.js.map +1 -1
  78. package/_esm/errors/address.js +6 -1
  79. package/_esm/errors/address.js.map +1 -1
  80. package/_esm/errors/version.js +1 -1
  81. package/_esm/errors/version.js.map +1 -1
  82. package/_esm/utils/abi/getAbiItem.js +3 -3
  83. package/_esm/utils/abi/getAbiItem.js.map +1 -1
  84. package/_esm/utils/address/isAddress.js +17 -2
  85. package/_esm/utils/address/isAddress.js.map +1 -1
  86. package/_esm/utils/address/isAddressEqual.js +2 -2
  87. package/_esm/utils/address/isAddressEqual.js.map +1 -1
  88. package/_esm/utils/lru.js +24 -0
  89. package/_esm/utils/lru.js.map +1 -0
  90. package/_esm/utils/transaction/parseTransaction.js +1 -1
  91. package/_esm/utils/transaction/parseTransaction.js.map +1 -1
  92. package/_esm/utils/transaction/serializeAccessList.js +1 -1
  93. package/_esm/utils/transaction/serializeAccessList.js.map +1 -1
  94. package/_types/accounts/toAccount.d.ts.map +1 -1
  95. package/_types/actions/public/call.d.ts.map +1 -1
  96. package/_types/chains/definitions/base.d.ts +6 -0
  97. package/_types/chains/definitions/base.d.ts.map +1 -1
  98. package/_types/chains/definitions/baseGoerli.d.ts +5 -0
  99. package/_types/chains/definitions/baseGoerli.d.ts.map +1 -1
  100. package/_types/chains/definitions/baseSepolia.d.ts +6 -0
  101. package/_types/chains/definitions/baseSepolia.d.ts.map +1 -1
  102. package/_types/chains/definitions/optimism.d.ts +5 -0
  103. package/_types/chains/definitions/optimism.d.ts.map +1 -1
  104. package/_types/chains/definitions/optimismGoerli.d.ts +5 -0
  105. package/_types/chains/definitions/optimismGoerli.d.ts.map +1 -1
  106. package/_types/chains/definitions/optimismSepolia.d.ts +5 -0
  107. package/_types/chains/definitions/optimismSepolia.d.ts.map +1 -1
  108. package/_types/chains/definitions/pgn.d.ts +5 -0
  109. package/_types/chains/definitions/pgn.d.ts.map +1 -1
  110. package/_types/chains/definitions/pgnTestnet.d.ts +10 -0
  111. package/_types/chains/definitions/pgnTestnet.d.ts.map +1 -1
  112. package/_types/chains/definitions/xdc.d.ts +6 -8
  113. package/_types/chains/definitions/xdc.d.ts.map +1 -1
  114. package/_types/chains/definitions/xdcTestnet.d.ts +6 -8
  115. package/_types/chains/definitions/xdcTestnet.d.ts.map +1 -1
  116. package/_types/chains/definitions/zora.d.ts +5 -0
  117. package/_types/chains/definitions/zora.d.ts.map +1 -1
  118. package/_types/chains/definitions/zoraSepolia.d.ts +5 -0
  119. package/_types/chains/definitions/zoraSepolia.d.ts.map +1 -1
  120. package/_types/chains/opStack/abis.d.ts +626 -0
  121. package/_types/chains/opStack/abis.d.ts.map +1 -1
  122. package/_types/errors/address.d.ts.map +1 -1
  123. package/_types/errors/version.d.ts +1 -1
  124. package/_types/errors/version.d.ts.map +1 -1
  125. package/_types/utils/address/isAddress.d.ts +9 -1
  126. package/_types/utils/address/isAddress.d.ts.map +1 -1
  127. package/_types/utils/address/isAddressEqual.d.ts.map +1 -1
  128. package/_types/utils/lru.d.ts +11 -0
  129. package/_types/utils/lru.d.ts.map +1 -0
  130. package/_types/utils/transaction/parseTransaction.d.ts.map +1 -1
  131. package/accounts/toAccount.ts +3 -2
  132. package/actions/public/call.ts +2 -1
  133. package/chains/definitions/base.ts +6 -0
  134. package/chains/definitions/baseGoerli.ts +5 -0
  135. package/chains/definitions/baseSepolia.ts +6 -0
  136. package/chains/definitions/optimism.ts +5 -0
  137. package/chains/definitions/optimismGoerli.ts +5 -0
  138. package/chains/definitions/optimismSepolia.ts +5 -0
  139. package/chains/definitions/pgn.ts +5 -0
  140. package/chains/definitions/pgnTestnet.ts +10 -0
  141. package/chains/definitions/xdc.ts +6 -0
  142. package/chains/definitions/xdcTestnet.ts +6 -0
  143. package/chains/definitions/zora.ts +5 -0
  144. package/chains/definitions/zoraSepolia.ts +5 -0
  145. package/chains/opStack/abis.ts +458 -0
  146. package/errors/address.ts +6 -1
  147. package/errors/version.ts +1 -1
  148. package/package.json +1 -1
  149. package/utils/abi/getAbiItem.ts +3 -3
  150. package/utils/address/isAddress.ts +27 -2
  151. package/utils/address/isAddressEqual.ts +4 -2
  152. package/utils/lru.ts +20 -0
  153. package/utils/transaction/parseTransaction.ts +2 -1
  154. package/utils/transaction/serializeAccessList.ts +1 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viem",
3
3
  "description": "TypeScript Interface for Ethereum",
4
- "version": "2.7.9",
4
+ "version": "2.7.10",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -155,7 +155,7 @@ export function isArgOfType(arg: unknown, abiParameter: AbiParameter): boolean {
155
155
  const abiParameterType = abiParameter.type
156
156
  switch (abiParameterType) {
157
157
  case 'address':
158
- return isAddress(arg as Address)
158
+ return isAddress(arg as Address, { strict: false })
159
159
  case 'bool':
160
160
  return argType === 'boolean'
161
161
  case 'function':
@@ -233,9 +233,9 @@ export function getAmbiguousTypes(
233
233
  const ambiguous = (() => {
234
234
  if (types.includes('address') && types.includes('bytes20')) return true
235
235
  if (types.includes('address') && types.includes('string'))
236
- return isAddress(args[parameterIndex] as Address)
236
+ return isAddress(args[parameterIndex] as Address, { strict: false })
237
237
  if (types.includes('address') && types.includes('bytes'))
238
- return isAddress(args[parameterIndex] as Address)
238
+ return isAddress(args[parameterIndex] as Address, { strict: false })
239
239
  return false
240
240
  })()
241
241
 
@@ -1,10 +1,35 @@
1
1
  import type { Address } from 'abitype'
2
2
  import type { ErrorType } from '../../errors/utils.js'
3
+ import { LruMap } from '../lru.js'
4
+ import { checksumAddress } from './getAddress.js'
3
5
 
4
6
  const addressRegex = /^0x[a-fA-F0-9]{40}$/
5
7
 
8
+ const isAddressCache = /*#__PURE__*/ new LruMap<boolean>(8192)
9
+
10
+ export type IsAddressOptions = {
11
+ /**
12
+ * Enables strict mode. Whether or not to compare the address against its checksum.
13
+ *
14
+ * @default true
15
+ */
16
+ strict?: boolean
17
+ }
18
+
6
19
  export type IsAddressErrorType = ErrorType
7
20
 
8
- export function isAddress(address: string): address is Address {
9
- return addressRegex.test(address)
21
+ export function isAddress(
22
+ address: string,
23
+ { strict = true }: IsAddressOptions = {},
24
+ ): address is Address {
25
+ if (isAddressCache.has(address)) return isAddressCache.get(address)!
26
+
27
+ const result = (() => {
28
+ if (!addressRegex.test(address)) return false
29
+ if (address.toLowerCase() === address) return true
30
+ if (strict) return checksumAddress(address as Address) === address
31
+ return true
32
+ })()
33
+ isAddressCache.set(address, result)
34
+ return result
10
35
  }
@@ -11,7 +11,9 @@ export type IsAddressEqualReturnType = boolean
11
11
  export type IsAddressEqualErrorType = InvalidAddressErrorType | ErrorType
12
12
 
13
13
  export function isAddressEqual(a: Address, b: Address) {
14
- if (!isAddress(a)) throw new InvalidAddressError({ address: a })
15
- if (!isAddress(b)) throw new InvalidAddressError({ address: b })
14
+ if (!isAddress(a, { strict: false }))
15
+ throw new InvalidAddressError({ address: a })
16
+ if (!isAddress(b, { strict: false }))
17
+ throw new InvalidAddressError({ address: b })
16
18
  return a.toLowerCase() === b.toLowerCase()
17
19
  }
package/utils/lru.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Map with a LRU (Least recently used) policy.
3
+ *
4
+ * @link https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU
5
+ */
6
+ export class LruMap<value = unknown> extends Map<string, value> {
7
+ maxSize: number
8
+
9
+ constructor(size: number) {
10
+ super()
11
+ this.maxSize = size
12
+ }
13
+
14
+ override set(key: string, value: value) {
15
+ super.set(key, value)
16
+ if (this.maxSize && this.size > this.maxSize)
17
+ this.delete(this.keys().next().value)
18
+ return this
19
+ }
20
+ }
@@ -326,7 +326,8 @@ export function parseAccessList(accessList_: RecursiveArray<Hex>): AccessList {
326
326
  for (let i = 0; i < accessList_.length; i++) {
327
327
  const [address, storageKeys] = accessList_[i] as [Hex, Hex[]]
328
328
 
329
- if (!isAddress(address)) throw new InvalidAddressError({ address })
329
+ if (!isAddress(address, { strict: false }))
330
+ throw new InvalidAddressError({ address })
330
331
 
331
332
  accessList.push({
332
333
  address: address,
@@ -42,7 +42,7 @@ export function serializeAccessList(
42
42
  }
43
43
  }
44
44
 
45
- if (!isAddress(address)) {
45
+ if (!isAddress(address, { strict: false })) {
46
46
  throw new InvalidAddressError({ address })
47
47
  }
48
48