diff --git a/packages/keyring-api/CHANGELOG.md b/packages/keyring-api/CHANGELOG.md index d5a27d9c6..bb2aaf599 100644 --- a/packages/keyring-api/CHANGELOG.md +++ b/packages/keyring-api/CHANGELOG.md @@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add `EthAddressStrictStruct` struct and `EthAddressStrict` types ([#465](https://github.com/MetaMask/accounts/pull/465)) + - This is a stricter variant of `EthAddressStruct` which uses `Hex` instead of `string` for its inferred type. + +### Changed + +- Re-use `string` for ERC4337 address-like fields ([#465](https://github.com/MetaMask/accounts/pull/465)) + - This change reverts that and keeps using `string` for all address-like types. + - Changes in [#405](https://github.com/MetaMask/accounts/pull/405) updated the associated type for `EthAddressStruct` from `string` to `Hex`, this was actually a small breaking change that went unnoticed and that would require some effort to adapt in upstream clients/controllers, for this reason, we are undoing this change for now. + - Version [21.4.0] will be marked as **YANKED**, consumers are expected to use this new version that reverts this breaking change. + ## [21.4.0] ### Added diff --git a/packages/keyring-api/src/eth/rpc/params.ts b/packages/keyring-api/src/eth/rpc/params.ts index 2331f3818..697fc3d65 100644 --- a/packages/keyring-api/src/eth/rpc/params.ts +++ b/packages/keyring-api/src/eth/rpc/params.ts @@ -23,7 +23,11 @@ import { unknown, } from '@metamask/superstruct'; -import { EthAddressStruct, EthBytesStruct } from '../types'; +import { + EthAddressStrictStruct, + EthAddressStruct, + EthBytesStruct, +} from '../types'; /** * A struct for validating Ethereum transaction data. @@ -118,7 +122,7 @@ export type EthEncryptedData = Infer; */ export const EthEip7702AuthorizationStruct = tuple([ number(), // chainId - EthAddressStruct, // address (contract to delegate to) + EthAddressStrictStruct, // address (contract to delegate to) number(), // nonce ]); diff --git a/packages/keyring-api/src/eth/types.ts b/packages/keyring-api/src/eth/types.ts index 12c586631..02f6e39ed 100644 --- a/packages/keyring-api/src/eth/types.ts +++ b/packages/keyring-api/src/eth/types.ts @@ -12,9 +12,12 @@ import { export const EthBytesStruct = definePattern('EthBytes', /^0x[0-9a-f]*$/iu); -export const EthAddressStruct = definePattern( - 'EthAddress', - /^0x[0-9a-f]{40}$/iu, +const ETH_ADDRESS_REGEX = /^0x[0-9a-f]{40}$/iu; +export const EthAddressStruct = definePattern('EthAddress', ETH_ADDRESS_REGEX); +// Stricter struct that uses `Hex` as final type. +export const EthAddressStrictStruct = definePattern( + 'EthAddressStrict', + ETH_ADDRESS_REGEX, ); export const EthUint256Struct = definePattern(