Skip to content

fix(snap-account-service): faster :getLegacySnapKeyring#8865

Open
ccharly wants to merge 2 commits into
cc/fix/snap-account-service-kering-messages-methodsfrom
cc/feat/snap-account-service-faster-get-keyring
Open

fix(snap-account-service): faster :getLegacySnapKeyring#8865
ccharly wants to merge 2 commits into
cc/fix/snap-account-service-kering-messages-methodsfrom
cc/feat/snap-account-service-faster-get-keyring

Conversation

@ccharly
Copy link
Copy Markdown
Contributor

@ccharly ccharly commented May 20, 2026

Explanation

Now check if the keyring is already there without locking the KeyringController mutex (like we used to do in the clients).

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 how the legacy Snap keyring is retrieved/created by adding a pre-check that bypasses the KeyringController mutex in the common case, which could affect keyring lifecycle and error handling if assumptions are wrong. Test coverage was expanded, but behavior still depends on withKeyringUnsafe/withController semantics.

Overview
Speeds up SnapAccountService.getLegacySnapKeyring() by first attempting to fetch the existing legacy Snap keyring via KeyringController:withKeyringUnsafe and returning immediately when present, avoiding the KeyringController:withController mutex.

If the fast-path reports the keyring missing, the method falls back to withController to safely find-or-create the Snap keyring. Tests were updated to cover the fast-path, fallback creation, and error propagation, and the package changelog documents the change.

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

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

@ccharly ccharly marked this pull request as ready for review May 20, 2026 19:27
@ccharly ccharly requested review from a team as code owners May 20, 2026 19:27
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