Releases: MetaMask/core
Releases · MetaMask/core
946.0.0
@metamask/keyring-controller 25.3.0
Added
- Expose
KeyringController:exportSeedPhrasemethod throughKeyringControllermessenger (#8587) - Expose
KeyringController:isUnlockedmethod throughKeyringControllermessenger (#8573)- Returns
truewhen the vault is unlocked,falseotherwise. Mirrorsstate.isUnlockedand theisUnlocked()instance method, allowing consumers to check lock status via the messenger without holding a controller reference.
- Returns
- Add
withControlleraction to run atomic operations on multiple keyrings (within a single transaction) (#8416)- This action uses a
RestrictedControllerobject that exposesaddNewKeyringandremoveKeyringmethods to add and remove keyring during the transaction (atomic) call.
- This action uses a
- Expose
KeyringController:signTransactionmethod throughKeyringControllermessenger (#8408) - Persist vault when keyring state changes during unlock (#8415)
- If a keyring's serialized state differs after deserialization (e.g. a migration ran, or metadata was missing), the vault is now re-persisted so the change is not lost on the next unlock.
- Added
KeyringV2support (#8390)- The controller now maintains a list of
KeyringV2instance in memory alongside previousKeyringinstance. - This new keyring interface is more generic and will become the new standard to interact with keyring (creating accounts, executing logic that involves accounts like signing, etc...).
- For now, most
KeyringV2are wrappers (read adapters) around existingKeyringinstance.
- The controller now maintains a list of
- Added
withKeyringV2Unsafemethod andKeyringController:withKeyringV2Unsafemessenger action for lock-free read-only access toKeyringV2adapters (#8390)- Mirrors
withKeyringUnsafesemantics: no mutex acquired, no persistence or rollback. - Caller is responsible for ensuring the operation is read-only and accesses only immutable keyring data.
- Mirrors
- Added
withKeyringV2method andKeyringController:withKeyringV2messenger action for atomic operations using theKeyringV2API (#8390)- Accepts a
KeyringSelectorV2to select keyrings bytype,address,id, orfilter. - Ships with default V2 builders for HD (
HdKeyringV2) and Simple (SimpleKeyringV2) keyrings; additional builders can be registered via thekeyringV2Buildersconstructor option.
- Accepts a
Changed
- Bump
@metamask/messengerfrom^1.0.0to^1.2.0(#8364, #8373, #8632) - Bump
@metamask/base-controllerfrom^9.0.1to^9.1.0(#8457) - Bump
@metamask/eth-hd-keyringfrom^13.1.1to^14.0.1(#8464) - Bump
@metamask/eth-simple-keyringfrom^11.1.2to^12.0.1(#8464) - Bump
@metamask/keyring-apifrom^21.6.0to^23.0.1(#8464) - Bump
@metamask/keyring-internal-apifrom^10.0.0to^11.0.0(#8464, #8584)
945.0.0
@metamask/messenger 1.2.0
Added
- Allow overriding action handler in subclass (#8617)
- The
Messengerclass now has a protectedgetActionmethod which returns the action handler for a given action name.
- The
- Add
subscribeOnceandwaitUntilutility methods toMessenger(#8575)
Deprecated
- Deprecate
generate-action-typesCLI tool andmessenger-generate-action-typesbinary (#8378)- The CLI has been extracted to
@metamask/messenger-cli. Usemessenger-action-typesfrom this package instead.
- The CLI has been extracted to
Fixed
- Throw different error for missing delegated actions (#8557)
944.0.0
@metamask/assets-controller 6.2.1
Changed
- Bump
@metamask/transaction-controllerfrom^64.4.0to^65.0.0(#8613) - Bump
@metamask/assets-controllersfrom^104.3.0to^105.0.0(#8622)
@metamask/assets-controllers 105.0.0
Added
- Expose missing public
CurrencyRateControllermethods through its messenger (#8561)- The following actions are now available:
CurrencyRateController:setCurrentCurrencyCurrencyRateController:updateExchangeRate
- Corresponding action types (e.g.
CurrencyRateControllerSetCurrentCurrencyAction) are available as well.
- The following actions are now available:
Changed
- BREAKING: Standardize names of
CurrencyRateControllermessenger action types (#8561)- The
GetCurrencyRateStatemessenger action has been renamed toCurrencyRateControllerGetStateActionto follow the convention. You will need to update imports appropriately. - These changes only affect the types. The action type strings themselves have not changed, so you do not need to update the list of actions you pass when initializing
CurrencyRateControllermessenger.
- The
MultichainAssetsController: Restore fail-open behavior for Blockaid spam token filter (#8580)- Uses blacklist approach: only rejects tokens explicitly marked as malicious by Blockaid
- When Blockaid bulk token scan API calls fail or return no results, tokens are allowed through
- This prevents legitimate tokens from being blocked due to API outages, network issues, or missing token data
- Malicious tokens that slip through are caught by the periodic rescan (runs daily by default)
- Bump
@metamask/transaction-controllerfrom^64.3.0to^65.0.0(#8585, #8613)
Fixed
- Fix
selectAssetsBySelectedAccountGroupcrashing when an account referenced in the account tree is missing from internal accounts (#8604)
@metamask/bridge-controller 71.0.0
Added
- BREAKING: Add
quickBuyanddappSwapFeatureIds for external swap quote consumers (#8598) - BREAKING: Add
market_closedandquote_expiredQuoteWarning (#8598) - Add
tokenSecurityTypeDestination: string | nulltoBridgeControllerState(defaultnull), set viaupdateBridgeQuoteRequestParamsand reset byresetState(#8595)
Changed
- BREAKING: Add required
token_security_type_destination: string \| nulltoRequestParams,RequiredEventContextFromClient[InputSourceDestinationSwitched], and thecontextarg ofupdateBridgeQuoteRequestParams; emitted on every analytics event that includestoken_address_destination(#8595) - BREAKING:
getRequestParamsnow takes a second positional argumenttokenSecurityTypeDestination: string \| null(#8595) - Bump
@metamask/transaction-controllerfrom^64.3.0to^65.0.0(#8585, #8613) - Bump
@metamask/assets-controllerfrom^6.1.0to^6.2.1(#8590, #8622) - Bump
@metamask/assets-controllersfrom^104.3.0to^105.0.0(#8622)
@metamask/bridge-status-controller 71.1.0
Added
- Add optional
tokenSecurityTypeDestination?: string \| nulltoBridgeHistoryItem,StartPollingForBridgeTxStatusArgs[Serialized], and thesubmitTx/submitIntentarguments; when provided, it's persisted on the history item and emitted astoken_security_type_destinationon post-submit analytics events (#8595)
Changed
- Bump
@metamask/transaction-controllerfrom^64.3.0to^65.0.0(#8585, #8613) - Bump
@metamask/bridge-controllerfrom^70.2.0to^71.0.0(#8622)
@metamask/transaction-pay-controller 20.0.1
Changed
943.0.0
@metamask/chomp-api-service 2.0.0
Changed
- BREAKING: Change
AssociateAddressParams.timestamptype fromstringtonumber. (#8610)
@metamask/money-account-upgrade-controller 1.2.0
Changed
- Bump
@metamask/chomp-api-servicefrom^1.0.0to^2.0.0(#8618)
Fixed
- Send the CHOMP authentication timestamp as a number instead of a string in the associate-address step. (#8610)
942.0.0
@metamask/transaction-controller 65.0.0
Added
- Expose
TransactionController:wipeTransactionsmethod throughTransactionControllermessenger (#8592)
Changed
estimateGasBatchnow skips the EIP-7702 path when the account's keyring does not support it, falling back to per-transaction gas estimation (#8388)doesAccountSupportEIP7702now returnsfalseinstead oftruewhen the account is not found in any keyring (#8388)- BREAKING: Add
KeyringControllerGetStateActiontoAllowedActionsto enable keyring-based EIP-7702 account compatibility checks inaddTransactionBatch(#8388)addTransactionBatchnow automatically checks whether the account's keyring supports EIP-7702 before attempting the 7702 batch path, falling back to STX/sequential when unsupported- Clients must add
KeyringController:getStateto the TransactionController messenger's allowed actions
Fixed
- Fix batch transaction signing so each transaction is signed sequentially, preventing remaining hardware wallet prompts from appearing after a rejection (#8388)
@metamask/transaction-pay-controller 20.0.0
Changed
- Rename
executeEnabledfeature flag togaslessEnabled(#8607) - Bump
@metamask/transaction-controllerfrom^64.3.0to^65.0.0(#8585, #8613) - Bump
@metamask/assets-controllerfrom^6.1.0to^6.2.0(#8590)
Fixed
- Fall back from Across to later pay strategies when Across quotes would require a first-time EIP-7702 authorization list (#8577)
- BREAKING: Fix mUSD conversion for hardware wallets on EIP-7702 chains by gating relay and Across 7702 paths on the account keyring type via
KeyringController:getState(#8388)- The
TransactionPayControllerMessengernow requiresKeyringController:getStatepermission.
- The
941.0.0
940.0.0
939.0.0
938.0.0
@metamask/passkey-controller 1.0.0
Added
- Initial
@metamask/passkey-controller(#8422):PasskeyControllerfor WebAuthn passkey vault key protection (HKDF-derived keys, AES-256-GCM wrap/unwrap), PRF oruserHandlederivation, challenge-keyedCeremonyManager, enrollment/unlock/renewal flows,verifyPasskeyAuthentication, selectors, and exported ceremony timing constants. PasskeyControllerErrorwith stablecode, optionalcause/context,toJSON, andtoString;PasskeyControllerErrorCode,PasskeyControllerErrorMessage, andcontrollerName. ReplacesPasskeyAuthenticationRejectedError—usePasskeyControllerErrorandcodefor auth failures.- BREAKING: Operational error messages are prefixed with
PasskeyController -; prefercodeorinstanceof PasskeyControllerErrorover matching raw strings. renewVaultKeyProtectionuses the samevault_key_decryption_failedcode asretrieveVaultKeyWithPasskeywhen AES-GCM decrypt fails.- Thrown failures from
verifyRegistrationResponse/verifyAuthenticationResponseare wrapped inPasskeyControllerErrorwithregistration_verification_failed/authentication_verification_failedand the underlying error ascause(aligned with theverified: falsepath). - Debug logging (via
@metamask/utils) for registration/authentication verification failures, missing ceremony state, vault decrypt failures, and vault key mismatch during renewal.
Fixed
- Registration verification requires the credential
id/rawIdto match the credential id in authenticator data; vault wrapping key derivation uses that verified credential id so enrollment keys align with the stored credential. - Registration options request attestation conveyance
'none'so clients are not asked for direct attestation formats the verifier does not implement (noneand self-attestedpackedonly).
937.0.0
@metamask/assets-controller 6.2.0
Added
- Add
CustomAssetGraduationMiddlewarethat removes an EVM asset fromcustomAssets[selectedAccount]whenAccountsApiDataSourceorBackendWebsocketDataSourcereports a balance for it (#8582)- Non-EVM custom assets (Solana, BTC, Tron) are not affected.
RpcDataSourcecontinues to be the sole balance fetcher for assets still incustomAssets.
- Add
RpcFallbackMiddlewareto the fast pipeline so chains that error inresponse.errors(network error,unprocessedNetworks, timeout) fall back toRpcDataSource(#8582)- Successful RPC results are merged into the response and recovered chains are cleared from
response.errors.
- Successful RPC results are merged into the response and recovered chains are cleared from
- Add a configurable
fetchTimeoutMsoption (default15000) toAccountsApiDataSource,PriceDataSource, andTokenDataSource(#8582)- On timeout, AccountsAPI marks every requested chain as errored so
RpcFallbackMiddlewarepicks them up; price and token enrichment degrade gracefully.
- On timeout, AccountsAPI marks every requested chain as errored so
- Add
fetchWithTimeoututility that races an async task against a timeout (#8582)
Changed
- Bump
@metamask/transaction-controllerfrom^64.3.0to^64.4.0(#8585)
Fixed
- Handle trace callback returning
undefinedwithout throwing (#8586)