Skip to content

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

Merged
ccharly merged 8 commits into
mainfrom
cc/feat/snap-account-service-faster-get-keyring
Jun 2, 2026
Merged

fix(snap-account-service): faster :getLegacySnapKeyring#8865
ccharly merged 8 commits into
mainfrom
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
Touches legacy keyring access and mutex usage; creation still goes through withController, but the unsafe read path must not regress concurrency or error handling.

Overview
getLegacySnapKeyring now tries a KeyringController:withKeyringUnsafe fast path when the legacy Snap keyring already exists, so it can return without taking the withController mutex. If the keyring is missing, behavior is unchanged: it still uses withController to find or create the keyring safely.

Tests were updated to cover the fast path (no withController), creation and lookup fallbacks after KeyringNotFound, and propagation of non–not-found errors from the unsafe path without calling withController. The unreleased changelog documents the performance change.

Reviewed by Cursor Bugbot for commit 6fcadb7. 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
Base automatically changed from cc/fix/snap-account-service-kering-messages-methods to main June 2, 2026 16:08
@ccharly ccharly enabled auto-merge June 2, 2026 16:29
@ccharly ccharly added this pull request to the merge queue Jun 2, 2026
Merged via the queue into main with commit 6977326 Jun 2, 2026
370 checks passed
@ccharly ccharly deleted the cc/feat/snap-account-service-faster-get-keyring branch June 2, 2026 16:30
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.

2 participants