Skip to content

fix(snap-account-service)!: relax keyring messages/methods handling#8860

Open
ccharly wants to merge 5 commits into
mainfrom
cc/fix/snap-account-service-kering-messages-methods
Open

fix(snap-account-service)!: relax keyring messages/methods handling#8860
ccharly wants to merge 5 commits into
mainfrom
cc/fix/snap-account-service-kering-messages-methods

Conversation

@ccharly
Copy link
Copy Markdown
Contributor

@ccharly ccharly commented May 20, 2026

Explanation

We used to always auto-create the legacy Snap keyring (and in the future, Snap keyring v2 instances) automatically when handling events/methods, but this can sometimes cause some deadlock, especially with v1 events (e.g. you call keyring.removeAccount which will send a notify:accountDeleted).

This was working fine before cause a lot of consumers were creating the Snap keyring in an unsafe way (combining getKeyringsByType and addNewKeyring).

We now only delegate those calls to the Snap keyring only when this makes sense!

References

N/A

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Changes runtime behavior of handleKeyringSnapMessage and selected-account forwarding to conditionally skip/throw when the legacy Snap keyring is missing, which could affect Snap lifecycle and event handling if callers relied on implicit keyring creation.

Overview
Reduces deadlock risk by stopping implicit legacy Snap keyring creation in most code paths: handleKeyringSnapMessage now checks keyring availability via KeyringController:withKeyringUnsafe and only auto-creates the keyring for KeyringEvent.AccountCreated.

Adds special handling for SnapManageAccountsMethod.GetSelectedAccounts (returns [] if the keyring doesn’t exist yet) and updates selected-account forwarding to silently skip when the keyring is missing instead of creating it. Tests, changelog, and dependencies are updated accordingly (new @metamask/keyring-api / @metamask/keyring-snap-sdk).

Reviewed by Cursor Bugbot for commit bfa94c0. Bugbot is set up for automated code reviews on this repo. Configure here.

@ccharly ccharly marked this pull request as ready for review May 20, 2026 13:17
@ccharly ccharly requested review from a team as code owners May 20, 2026 13:17
@ccharly
Copy link
Copy Markdown
Contributor Author

ccharly commented May 20, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.4.0-preview-bfa94c060
@metamask-previews/accounts-controller@38.1.1-preview-bfa94c060
@metamask-previews/address-book-controller@7.1.2-preview-bfa94c060
@metamask-previews/ai-controllers@0.6.3-preview-bfa94c060
@metamask-previews/analytics-controller@1.0.1-preview-bfa94c060
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-bfa94c060
@metamask-previews/announcement-controller@8.1.0-preview-bfa94c060
@metamask-previews/app-metadata-controller@2.0.1-preview-bfa94c060
@metamask-previews/approval-controller@9.0.1-preview-bfa94c060
@metamask-previews/assets-controller@7.1.2-preview-bfa94c060
@metamask-previews/assets-controllers@108.1.0-preview-bfa94c060
@metamask-previews/authenticated-user-storage@2.0.0-preview-bfa94c060
@metamask-previews/base-controller@9.1.0-preview-bfa94c060
@metamask-previews/base-data-service@0.1.3-preview-bfa94c060
@metamask-previews/bridge-controller@72.0.4-preview-bfa94c060
@metamask-previews/bridge-status-controller@71.1.4-preview-bfa94c060
@metamask-previews/build-utils@3.0.4-preview-bfa94c060
@metamask-previews/chain-agnostic-permission@1.6.1-preview-bfa94c060
@metamask-previews/chomp-api-service@3.1.0-preview-bfa94c060
@metamask-previews/claims-controller@0.5.1-preview-bfa94c060
@metamask-previews/client-controller@1.0.1-preview-bfa94c060
@metamask-previews/compliance-controller@2.0.1-preview-bfa94c060
@metamask-previews/composable-controller@12.0.1-preview-bfa94c060
@metamask-previews/config-registry-controller@0.3.1-preview-bfa94c060
@metamask-previews/connectivity-controller@0.2.0-preview-bfa94c060
@metamask-previews/controller-utils@12.1.0-preview-bfa94c060
@metamask-previews/core-backend@6.3.0-preview-bfa94c060
@metamask-previews/delegation-controller@3.0.0-preview-bfa94c060
@metamask-previews/earn-controller@12.1.2-preview-bfa94c060
@metamask-previews/eip-5792-middleware@3.0.4-preview-bfa94c060
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-bfa94c060
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-bfa94c060
@metamask-previews/ens-controller@19.1.3-preview-bfa94c060
@metamask-previews/eth-block-tracker@15.0.1-preview-bfa94c060
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-bfa94c060
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-bfa94c060
@metamask-previews/foundryup@1.0.1-preview-bfa94c060
@metamask-previews/gas-fee-controller@26.2.2-preview-bfa94c060
@metamask-previews/gator-permissions-controller@4.1.2-preview-bfa94c060
@metamask-previews/geolocation-controller@0.1.3-preview-bfa94c060
@metamask-previews/json-rpc-engine@10.5.0-preview-bfa94c060
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-bfa94c060
@metamask-previews/keyring-controller@25.5.0-preview-bfa94c060
@metamask-previews/logging-controller@8.0.2-preview-bfa94c060
@metamask-previews/message-manager@14.1.2-preview-bfa94c060
@metamask-previews/messenger@1.2.0-preview-bfa94c060
@metamask-previews/messenger-cli@0.2.0-preview-bfa94c060
@metamask-previews/money-account-balance-service@1.0.2-preview-bfa94c060
@metamask-previews/money-account-controller@0.3.0-preview-bfa94c060
@metamask-previews/money-account-upgrade-controller@2.0.2-preview-bfa94c060
@metamask-previews/multichain-account-service@10.0.0-preview-bfa94c060
@metamask-previews/multichain-api-middleware@3.1.2-preview-bfa94c060
@metamask-previews/multichain-network-controller@3.1.2-preview-bfa94c060
@metamask-previews/multichain-transactions-controller@7.1.0-preview-bfa94c060
@metamask-previews/name-controller@9.1.2-preview-bfa94c060
@metamask-previews/network-controller@32.0.0-preview-bfa94c060
@metamask-previews/network-enablement-controller@5.2.0-preview-bfa94c060
@metamask-previews/notification-services-controller@24.1.0-preview-bfa94c060
@metamask-previews/passkey-controller@2.0.1-preview-bfa94c060
@metamask-previews/permission-controller@13.1.1-preview-bfa94c060
@metamask-previews/permission-log-controller@5.1.0-preview-bfa94c060
@metamask-previews/perps-controller@6.1.0-preview-bfa94c060
@metamask-previews/phishing-controller@17.2.0-preview-bfa94c060
@metamask-previews/polling-controller@16.0.6-preview-bfa94c060
@metamask-previews/preferences-controller@23.1.0-preview-bfa94c060
@metamask-previews/profile-metrics-controller@3.1.4-preview-bfa94c060
@metamask-previews/profile-sync-controller@28.1.0-preview-bfa94c060
@metamask-previews/ramps-controller@13.3.1-preview-bfa94c060
@metamask-previews/rate-limit-controller@7.0.1-preview-bfa94c060
@metamask-previews/react-data-query@0.2.1-preview-bfa94c060
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-bfa94c060
@metamask-previews/sample-controllers@5.0.1-preview-bfa94c060
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-bfa94c060
@metamask-previews/selected-network-controller@26.1.3-preview-bfa94c060
@metamask-previews/shield-controller@5.1.2-preview-bfa94c060
@metamask-previews/signature-controller@39.2.2-preview-bfa94c060
@metamask-previews/snap-account-service@0.2.0-preview-bfa94c060
@metamask-previews/social-controllers@2.2.1-preview-bfa94c060
@metamask-previews/storage-service@1.0.1-preview-bfa94c060
@metamask-previews/subscription-controller@6.1.3-preview-bfa94c060
@metamask-previews/transaction-controller@65.4.0-preview-bfa94c060
@metamask-previews/transaction-pay-controller@22.5.0-preview-bfa94c060
@metamask-previews/user-operation-controller@41.2.2-preview-bfa94c060
@metamask-previews/wallet@0.0.0-preview-bfa94c060

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant