Skip to content

feat: add money account keyring to keyring controller, and create cash account service#8204

Open
Jwhiles wants to merge 29 commits intomainfrom
add-cash-keyring
Open

feat: add money account keyring to keyring controller, and create cash account service#8204
Jwhiles wants to merge 29 commits intomainfrom
add-cash-keyring

Conversation

@Jwhiles
Copy link

@Jwhiles Jwhiles commented Mar 16, 2026

Explanation

This PR adds the new cash account keyring, as a well as a new service which will be used to add accounts to that keyring.

This PR is dependant on this PR in the accounts repo being merged and published.

References

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
Medium risk because it extends core keyring infrastructure (new KeyringTypes.money and default keyring builder) and introduces a service that derives new keyrings from HD mnemonics, which could affect account/key management flows if misused.

Overview
Adds support for Money accounts by introducing KeyringTypes.money and registering MoneyKeyring (from @metamask/eth-money-keyring) as a built-in default keyring in KeyringController.

Introduces a new package, @metamask/money-account-service, exposing messenger-callable methods to createMoneyAccount (derive a Money keyring from an HD keyring’s mnemonic/entropy source) and getMoneyAccount (return existing Money keyring metadata), with full unit tests and build/test/docs config.

Updates accounts-controller to display KeyringTypes.money as Money Account and extends tests accordingly, and wires repo ownership/build plumbing (CODEOWNERS, teams.json, root tsconfig.build.json, yarn.lock).

Written by Cursor Bugbot for commit 638782e. This will update automatically on new commits. Configure here.

@socket-security
Copy link

socket-security bot commented Mar 16, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​metamask/​eth-money-keyring@​1.0.0711007989100
Updated@​metamask/​eth-hd-keyring@​13.0.0 ⏵ 13.1.09910010090 +4100

View full report

@Jwhiles
Copy link
Author

Jwhiles commented Mar 16, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "5.0.1-preview-54bc644cd",
  "@metamask-previews/accounts-controller": "37.0.0-preview-54bc644cd",
  "@metamask-previews/address-book-controller": "7.0.1-preview-54bc644cd",
  "@metamask-previews/ai-controllers": "0.3.0-preview-54bc644cd",
  "@metamask-previews/analytics-controller": "1.0.0-preview-54bc644cd",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-54bc644cd",
  "@metamask-previews/announcement-controller": "8.0.0-preview-54bc644cd",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-54bc644cd",
  "@metamask-previews/approval-controller": "8.0.0-preview-54bc644cd",
  "@metamask-previews/assets-controller": "2.3.0-preview-54bc644cd",
  "@metamask-previews/assets-controllers": "100.2.1-preview-54bc644cd",
  "@metamask-previews/base-controller": "9.0.0-preview-54bc644cd",
  "@metamask-previews/base-data-service": "0.0.0-preview-54bc644cd",
  "@metamask-previews/bridge-controller": "69.1.0-preview-54bc644cd",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-54bc644cd",
  "@metamask-previews/build-utils": "3.0.4-preview-54bc644cd",
  "@metamask-previews/cash-account-service": "0.0.0-preview-54bc644cd",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-54bc644cd",
  "@metamask-previews/claims-controller": "0.4.3-preview-54bc644cd",
  "@metamask-previews/client-controller": "1.0.0-preview-54bc644cd",
  "@metamask-previews/compliance-controller": "1.0.1-preview-54bc644cd",
  "@metamask-previews/composable-controller": "12.0.0-preview-54bc644cd",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-54bc644cd",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-54bc644cd",
  "@metamask-previews/controller-utils": "11.19.0-preview-54bc644cd",
  "@metamask-previews/core-backend": "6.1.1-preview-54bc644cd",
  "@metamask-previews/delegation-controller": "2.0.2-preview-54bc644cd",
  "@metamask-previews/earn-controller": "11.1.2-preview-54bc644cd",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-54bc644cd",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-54bc644cd",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-54bc644cd",
  "@metamask-previews/ens-controller": "19.0.3-preview-54bc644cd",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-54bc644cd",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-54bc644cd",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-54bc644cd",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-54bc644cd",
  "@metamask-previews/foundryup": "1.0.1-preview-54bc644cd",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-54bc644cd",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-54bc644cd",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-54bc644cd",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-54bc644cd",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-54bc644cd",
  "@metamask-previews/keyring-controller": "25.1.0-preview-54bc644cd",
  "@metamask-previews/logging-controller": "7.0.1-preview-54bc644cd",
  "@metamask-previews/message-manager": "14.1.0-preview-54bc644cd",
  "@metamask-previews/messenger": "0.3.0-preview-54bc644cd",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-54bc644cd",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-54bc644cd",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-54bc644cd",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-54bc644cd",
  "@metamask-previews/name-controller": "9.0.0-preview-54bc644cd",
  "@metamask-previews/network-controller": "30.0.0-preview-54bc644cd",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-54bc644cd",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-54bc644cd",
  "@metamask-previews/permission-controller": "12.2.0-preview-54bc644cd",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-54bc644cd",
  "@metamask-previews/perps-controller": "1.0.1-preview-54bc644cd",
  "@metamask-previews/phishing-controller": "16.3.0-preview-54bc644cd",
  "@metamask-previews/polling-controller": "16.0.3-preview-54bc644cd",
  "@metamask-previews/preferences-controller": "23.0.0-preview-54bc644cd",
  "@metamask-previews/profile-metrics-controller": "3.0.3-preview-54bc644cd",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-54bc644cd",
  "@metamask-previews/ramps-controller": "12.0.0-preview-54bc644cd",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-54bc644cd",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-54bc644cd",
  "@metamask-previews/sample-controllers": "4.0.3-preview-54bc644cd",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-54bc644cd",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-54bc644cd",
  "@metamask-previews/shield-controller": "5.0.1-preview-54bc644cd",
  "@metamask-previews/signature-controller": "39.0.5-preview-54bc644cd",
  "@metamask-previews/storage-service": "1.0.0-preview-54bc644cd",
  "@metamask-previews/subscription-controller": "6.0.1-preview-54bc644cd",
  "@metamask-previews/transaction-controller": "62.21.0-preview-54bc644cd",
  "@metamask-previews/transaction-pay-controller": "16.5.0-preview-54bc644cd",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-54bc644cd"
}

@Jwhiles
Copy link
Author

Jwhiles commented Mar 16, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "5.0.1-preview-0dac2dc2c",
  "@metamask-previews/accounts-controller": "37.0.0-preview-0dac2dc2c",
  "@metamask-previews/address-book-controller": "7.0.1-preview-0dac2dc2c",
  "@metamask-previews/ai-controllers": "0.3.0-preview-0dac2dc2c",
  "@metamask-previews/analytics-controller": "1.0.0-preview-0dac2dc2c",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-0dac2dc2c",
  "@metamask-previews/announcement-controller": "8.0.0-preview-0dac2dc2c",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-0dac2dc2c",
  "@metamask-previews/approval-controller": "8.0.0-preview-0dac2dc2c",
  "@metamask-previews/assets-controller": "2.3.0-preview-0dac2dc2c",
  "@metamask-previews/assets-controllers": "100.2.1-preview-0dac2dc2c",
  "@metamask-previews/base-controller": "9.0.0-preview-0dac2dc2c",
  "@metamask-previews/base-data-service": "0.0.0-preview-0dac2dc2c",
  "@metamask-previews/bridge-controller": "69.1.0-preview-0dac2dc2c",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-0dac2dc2c",
  "@metamask-previews/build-utils": "3.0.4-preview-0dac2dc2c",
  "@metamask-previews/cash-account-service": "0.0.0-preview-0dac2dc2c",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-0dac2dc2c",
  "@metamask-previews/claims-controller": "0.4.3-preview-0dac2dc2c",
  "@metamask-previews/client-controller": "1.0.0-preview-0dac2dc2c",
  "@metamask-previews/compliance-controller": "1.0.1-preview-0dac2dc2c",
  "@metamask-previews/composable-controller": "12.0.0-preview-0dac2dc2c",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-0dac2dc2c",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-0dac2dc2c",
  "@metamask-previews/controller-utils": "11.19.0-preview-0dac2dc2c",
  "@metamask-previews/core-backend": "6.1.1-preview-0dac2dc2c",
  "@metamask-previews/delegation-controller": "2.0.2-preview-0dac2dc2c",
  "@metamask-previews/earn-controller": "11.1.2-preview-0dac2dc2c",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-0dac2dc2c",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-0dac2dc2c",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-0dac2dc2c",
  "@metamask-previews/ens-controller": "19.0.3-preview-0dac2dc2c",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-0dac2dc2c",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-0dac2dc2c",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-0dac2dc2c",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-0dac2dc2c",
  "@metamask-previews/foundryup": "1.0.1-preview-0dac2dc2c",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-0dac2dc2c",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-0dac2dc2c",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-0dac2dc2c",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-0dac2dc2c",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-0dac2dc2c",
  "@metamask-previews/keyring-controller": "25.1.0-preview-0dac2dc2c",
  "@metamask-previews/logging-controller": "7.0.1-preview-0dac2dc2c",
  "@metamask-previews/message-manager": "14.1.0-preview-0dac2dc2c",
  "@metamask-previews/messenger": "0.3.0-preview-0dac2dc2c",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-0dac2dc2c",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-0dac2dc2c",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-0dac2dc2c",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-0dac2dc2c",
  "@metamask-previews/name-controller": "9.0.0-preview-0dac2dc2c",
  "@metamask-previews/network-controller": "30.0.0-preview-0dac2dc2c",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-0dac2dc2c",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-0dac2dc2c",
  "@metamask-previews/permission-controller": "12.2.0-preview-0dac2dc2c",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-0dac2dc2c",
  "@metamask-previews/perps-controller": "1.0.1-preview-0dac2dc2c",
  "@metamask-previews/phishing-controller": "16.3.0-preview-0dac2dc2c",
  "@metamask-previews/polling-controller": "16.0.3-preview-0dac2dc2c",
  "@metamask-previews/preferences-controller": "23.0.0-preview-0dac2dc2c",
  "@metamask-previews/profile-metrics-controller": "3.0.3-preview-0dac2dc2c",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-0dac2dc2c",
  "@metamask-previews/ramps-controller": "12.0.0-preview-0dac2dc2c",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-0dac2dc2c",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-0dac2dc2c",
  "@metamask-previews/sample-controllers": "4.0.3-preview-0dac2dc2c",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-0dac2dc2c",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-0dac2dc2c",
  "@metamask-previews/shield-controller": "5.0.1-preview-0dac2dc2c",
  "@metamask-previews/signature-controller": "39.0.5-preview-0dac2dc2c",
  "@metamask-previews/storage-service": "1.0.0-preview-0dac2dc2c",
  "@metamask-previews/subscription-controller": "6.0.1-preview-0dac2dc2c",
  "@metamask-previews/transaction-controller": "62.21.0-preview-0dac2dc2c",
  "@metamask-previews/transaction-pay-controller": "16.5.0-preview-0dac2dc2c",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-0dac2dc2c"
}

@Jwhiles
Copy link
Author

Jwhiles commented Mar 16, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "5.0.1-preview-d86f25564",
  "@metamask-previews/accounts-controller": "37.0.0-preview-d86f25564",
  "@metamask-previews/address-book-controller": "7.0.1-preview-d86f25564",
  "@metamask-previews/ai-controllers": "0.3.0-preview-d86f25564",
  "@metamask-previews/analytics-controller": "1.0.0-preview-d86f25564",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-d86f25564",
  "@metamask-previews/announcement-controller": "8.0.0-preview-d86f25564",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-d86f25564",
  "@metamask-previews/approval-controller": "8.0.0-preview-d86f25564",
  "@metamask-previews/assets-controller": "2.3.0-preview-d86f25564",
  "@metamask-previews/assets-controllers": "100.2.1-preview-d86f25564",
  "@metamask-previews/base-controller": "9.0.0-preview-d86f25564",
  "@metamask-previews/base-data-service": "0.0.0-preview-d86f25564",
  "@metamask-previews/bridge-controller": "69.1.0-preview-d86f25564",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-d86f25564",
  "@metamask-previews/build-utils": "3.0.4-preview-d86f25564",
  "@metamask-previews/cash-account-service": "0.0.0-preview-d86f25564",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-d86f25564",
  "@metamask-previews/claims-controller": "0.4.3-preview-d86f25564",
  "@metamask-previews/client-controller": "1.0.0-preview-d86f25564",
  "@metamask-previews/compliance-controller": "1.0.1-preview-d86f25564",
  "@metamask-previews/composable-controller": "12.0.0-preview-d86f25564",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-d86f25564",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-d86f25564",
  "@metamask-previews/controller-utils": "11.19.0-preview-d86f25564",
  "@metamask-previews/core-backend": "6.1.1-preview-d86f25564",
  "@metamask-previews/delegation-controller": "2.0.2-preview-d86f25564",
  "@metamask-previews/earn-controller": "11.1.2-preview-d86f25564",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-d86f25564",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-d86f25564",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-d86f25564",
  "@metamask-previews/ens-controller": "19.0.3-preview-d86f25564",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-d86f25564",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-d86f25564",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-d86f25564",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-d86f25564",
  "@metamask-previews/foundryup": "1.0.1-preview-d86f25564",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-d86f25564",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-d86f25564",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-d86f25564",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-d86f25564",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-d86f25564",
  "@metamask-previews/keyring-controller": "25.1.0-preview-d86f25564",
  "@metamask-previews/logging-controller": "7.0.1-preview-d86f25564",
  "@metamask-previews/message-manager": "14.1.0-preview-d86f25564",
  "@metamask-previews/messenger": "0.3.0-preview-d86f25564",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-d86f25564",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-d86f25564",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-d86f25564",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-d86f25564",
  "@metamask-previews/name-controller": "9.0.0-preview-d86f25564",
  "@metamask-previews/network-controller": "30.0.0-preview-d86f25564",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-d86f25564",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-d86f25564",
  "@metamask-previews/permission-controller": "12.2.0-preview-d86f25564",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-d86f25564",
  "@metamask-previews/perps-controller": "1.0.1-preview-d86f25564",
  "@metamask-previews/phishing-controller": "16.3.0-preview-d86f25564",
  "@metamask-previews/polling-controller": "16.0.3-preview-d86f25564",
  "@metamask-previews/preferences-controller": "23.0.0-preview-d86f25564",
  "@metamask-previews/profile-metrics-controller": "3.0.3-preview-d86f25564",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-d86f25564",
  "@metamask-previews/ramps-controller": "12.0.0-preview-d86f25564",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-d86f25564",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-d86f25564",
  "@metamask-previews/sample-controllers": "4.0.3-preview-d86f25564",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-d86f25564",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-d86f25564",
  "@metamask-previews/shield-controller": "5.0.1-preview-d86f25564",
  "@metamask-previews/signature-controller": "39.0.5-preview-d86f25564",
  "@metamask-previews/storage-service": "1.0.0-preview-d86f25564",
  "@metamask-previews/subscription-controller": "6.0.1-preview-d86f25564",
  "@metamask-previews/transaction-controller": "62.21.0-preview-d86f25564",
  "@metamask-previews/transaction-pay-controller": "16.5.0-preview-d86f25564",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-d86f25564"
}

@Jwhiles
Copy link
Author

Jwhiles commented Mar 16, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "5.0.1-preview-4183330c3",
  "@metamask-previews/accounts-controller": "37.0.0-preview-4183330c3",
  "@metamask-previews/address-book-controller": "7.0.1-preview-4183330c3",
  "@metamask-previews/ai-controllers": "0.3.0-preview-4183330c3",
  "@metamask-previews/analytics-controller": "1.0.0-preview-4183330c3",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-4183330c3",
  "@metamask-previews/announcement-controller": "8.0.0-preview-4183330c3",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-4183330c3",
  "@metamask-previews/approval-controller": "8.0.0-preview-4183330c3",
  "@metamask-previews/assets-controller": "2.3.0-preview-4183330c3",
  "@metamask-previews/assets-controllers": "100.2.1-preview-4183330c3",
  "@metamask-previews/base-controller": "9.0.0-preview-4183330c3",
  "@metamask-previews/base-data-service": "0.0.0-preview-4183330c3",
  "@metamask-previews/bridge-controller": "69.1.0-preview-4183330c3",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-4183330c3",
  "@metamask-previews/build-utils": "3.0.4-preview-4183330c3",
  "@metamask-previews/cash-account-service": "0.0.0-preview-4183330c3",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-4183330c3",
  "@metamask-previews/claims-controller": "0.4.3-preview-4183330c3",
  "@metamask-previews/client-controller": "1.0.0-preview-4183330c3",
  "@metamask-previews/compliance-controller": "1.0.1-preview-4183330c3",
  "@metamask-previews/composable-controller": "12.0.0-preview-4183330c3",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-4183330c3",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-4183330c3",
  "@metamask-previews/controller-utils": "11.19.0-preview-4183330c3",
  "@metamask-previews/core-backend": "6.1.1-preview-4183330c3",
  "@metamask-previews/delegation-controller": "2.0.2-preview-4183330c3",
  "@metamask-previews/earn-controller": "11.1.2-preview-4183330c3",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-4183330c3",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-4183330c3",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-4183330c3",
  "@metamask-previews/ens-controller": "19.0.3-preview-4183330c3",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-4183330c3",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-4183330c3",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-4183330c3",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-4183330c3",
  "@metamask-previews/foundryup": "1.0.1-preview-4183330c3",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-4183330c3",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-4183330c3",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-4183330c3",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-4183330c3",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-4183330c3",
  "@metamask-previews/keyring-controller": "25.1.0-preview-4183330c3",
  "@metamask-previews/logging-controller": "7.0.1-preview-4183330c3",
  "@metamask-previews/message-manager": "14.1.0-preview-4183330c3",
  "@metamask-previews/messenger": "0.3.0-preview-4183330c3",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-4183330c3",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-4183330c3",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-4183330c3",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-4183330c3",
  "@metamask-previews/name-controller": "9.0.0-preview-4183330c3",
  "@metamask-previews/network-controller": "30.0.0-preview-4183330c3",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-4183330c3",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-4183330c3",
  "@metamask-previews/permission-controller": "12.2.0-preview-4183330c3",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-4183330c3",
  "@metamask-previews/perps-controller": "1.0.1-preview-4183330c3",
  "@metamask-previews/phishing-controller": "16.3.0-preview-4183330c3",
  "@metamask-previews/polling-controller": "16.0.3-preview-4183330c3",
  "@metamask-previews/preferences-controller": "23.0.0-preview-4183330c3",
  "@metamask-previews/profile-metrics-controller": "3.0.3-preview-4183330c3",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-4183330c3",
  "@metamask-previews/ramps-controller": "12.0.0-preview-4183330c3",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-4183330c3",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-4183330c3",
  "@metamask-previews/sample-controllers": "4.0.3-preview-4183330c3",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-4183330c3",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-4183330c3",
  "@metamask-previews/shield-controller": "5.0.1-preview-4183330c3",
  "@metamask-previews/signature-controller": "39.0.5-preview-4183330c3",
  "@metamask-previews/storage-service": "1.0.0-preview-4183330c3",
  "@metamask-previews/subscription-controller": "6.0.1-preview-4183330c3",
  "@metamask-previews/transaction-controller": "62.21.0-preview-4183330c3",
  "@metamask-previews/transaction-pay-controller": "16.5.0-preview-4183330c3",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-4183330c3"
}

@Jwhiles Jwhiles changed the title feat: add cash keyring feat: add cash account keyring to keyring controller, and create cash account service Mar 17, 2026
@Jwhiles
Copy link
Author

Jwhiles commented Mar 17, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "5.0.1-preview-a12b37cc3",
  "@metamask-previews/accounts-controller": "37.0.0-preview-a12b37cc3",
  "@metamask-previews/address-book-controller": "7.0.1-preview-a12b37cc3",
  "@metamask-previews/ai-controllers": "0.4.0-preview-a12b37cc3",
  "@metamask-previews/analytics-controller": "1.0.0-preview-a12b37cc3",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-a12b37cc3",
  "@metamask-previews/announcement-controller": "8.0.0-preview-a12b37cc3",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-a12b37cc3",
  "@metamask-previews/approval-controller": "8.0.0-preview-a12b37cc3",
  "@metamask-previews/assets-controller": "2.3.0-preview-a12b37cc3",
  "@metamask-previews/assets-controllers": "100.2.1-preview-a12b37cc3",
  "@metamask-previews/base-controller": "9.0.0-preview-a12b37cc3",
  "@metamask-previews/base-data-service": "0.0.0-preview-a12b37cc3",
  "@metamask-previews/bridge-controller": "69.1.0-preview-a12b37cc3",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-a12b37cc3",
  "@metamask-previews/build-utils": "3.0.4-preview-a12b37cc3",
  "@metamask-previews/cash-account-service": "0.0.0-preview-a12b37cc3",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-a12b37cc3",
  "@metamask-previews/claims-controller": "0.4.3-preview-a12b37cc3",
  "@metamask-previews/client-controller": "1.0.0-preview-a12b37cc3",
  "@metamask-previews/compliance-controller": "1.0.1-preview-a12b37cc3",
  "@metamask-previews/composable-controller": "12.0.0-preview-a12b37cc3",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-a12b37cc3",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-a12b37cc3",
  "@metamask-previews/controller-utils": "11.19.0-preview-a12b37cc3",
  "@metamask-previews/core-backend": "6.1.1-preview-a12b37cc3",
  "@metamask-previews/delegation-controller": "2.0.2-preview-a12b37cc3",
  "@metamask-previews/earn-controller": "11.1.2-preview-a12b37cc3",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-a12b37cc3",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-a12b37cc3",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-a12b37cc3",
  "@metamask-previews/ens-controller": "19.0.3-preview-a12b37cc3",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-a12b37cc3",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-a12b37cc3",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-a12b37cc3",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-a12b37cc3",
  "@metamask-previews/foundryup": "1.0.1-preview-a12b37cc3",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-a12b37cc3",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-a12b37cc3",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-a12b37cc3",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-a12b37cc3",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-a12b37cc3",
  "@metamask-previews/keyring-controller": "25.1.0-preview-a12b37cc3",
  "@metamask-previews/logging-controller": "7.0.1-preview-a12b37cc3",
  "@metamask-previews/message-manager": "14.1.0-preview-a12b37cc3",
  "@metamask-previews/messenger": "0.3.0-preview-a12b37cc3",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-a12b37cc3",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-a12b37cc3",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-a12b37cc3",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-a12b37cc3",
  "@metamask-previews/name-controller": "9.0.0-preview-a12b37cc3",
  "@metamask-previews/network-controller": "30.0.0-preview-a12b37cc3",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-a12b37cc3",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-a12b37cc3",
  "@metamask-previews/permission-controller": "12.2.0-preview-a12b37cc3",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-a12b37cc3",
  "@metamask-previews/perps-controller": "1.1.0-preview-a12b37cc3",
  "@metamask-previews/phishing-controller": "16.3.0-preview-a12b37cc3",
  "@metamask-previews/polling-controller": "16.0.3-preview-a12b37cc3",
  "@metamask-previews/preferences-controller": "23.0.0-preview-a12b37cc3",
  "@metamask-previews/profile-metrics-controller": "3.0.4-preview-a12b37cc3",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-a12b37cc3",
  "@metamask-previews/ramps-controller": "12.0.0-preview-a12b37cc3",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-a12b37cc3",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-a12b37cc3",
  "@metamask-previews/sample-controllers": "4.0.3-preview-a12b37cc3",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-a12b37cc3",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-a12b37cc3",
  "@metamask-previews/shield-controller": "5.0.1-preview-a12b37cc3",
  "@metamask-previews/signature-controller": "39.0.5-preview-a12b37cc3",
  "@metamask-previews/storage-service": "1.0.0-preview-a12b37cc3",
  "@metamask-previews/subscription-controller": "6.0.1-preview-a12b37cc3",
  "@metamask-previews/transaction-controller": "62.22.0-preview-a12b37cc3",
  "@metamask-previews/transaction-pay-controller": "17.0.0-preview-a12b37cc3",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-a12b37cc3"
}


export type CashAccountServiceActions = CashAccountServiceMethodActions;

type AllowedActions =
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly should export these to make it easier to instantiate this service

@Jwhiles Jwhiles marked this pull request as ready for review March 17, 2026 15:30
@Jwhiles Jwhiles requested review from a team as code owners March 17, 2026 15:30
* @param entropySource - The metadata id of the HD keyring to derive from.
* @returns The metadata of the newly created Cash keyring.
*/
async createCashAccount(entropySource: string): Promise<KeyringMetadata> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you make this method idempotent and ensure that it does not add a new keyring if one already exists?

Comment on lines +36 to +37
async ({ keyring }) => {
const hdKeyring = keyring as unknown as HdKeyring;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's add a guard here, we should probably check that keyring.type is correct.

Also, HdKeyring already implements Keyring, so we shouldn't need the as unknown I think, just up-casting is enough (and the keyring.type check should """guarantee""" that we can upcast in a safe way).

Comment on lines +43 to +45
return hdKeyring.mnemonic;
},
)) as Uint8Array;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We shouldn't need to cast here neither. We already checked for !hdKeyring.mnemonic so Uint8 | null would be inferred as Uint8 from now on?

Suggested change
return hdKeyring.mnemonic;
},
)) as Uint8Array;
return hdKeyring.mnemonic;
},
));

/* eslint-disable @typescript-eslint/naming-convention */
simple = 'Simple Key Pair',
hd = 'HD Key Tree',
cash = 'Cash Keyring',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should report this in the changelog

teams.json Outdated
"metamask/base-controller": "team-core-platform",
"metamask/base-data-service": "team-core-platform",
"metamask/build-utils": "team-core-platform",
"metamask/cash-account-service": "team-earn",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably should be owner of this too?

Suggested change
"metamask/cash-account-service": "team-earn",
"metamask/cash-account-service": "team-accounts-framework,team-earn",

Comment on lines +25 to +32
/**
* Creates a Cash keyring derived from the HD keyring identified by
* the given entropy source, and returns the new keyring's metadata.
*
* @param entropySource - The metadata id of the HD keyring to derive from.
* @returns The metadata of the newly created Cash keyring.
*/
async createCashAccount(entropySource: string): Promise<KeyringMetadata> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, I'm a bit lost with the naming here 😅

We use createCashAccount but this does not return a KeyringAccount...

From my understanding we should have those requirements:

  • Always have 1 Cash keyring per HD keyring (1-to-1 binding)
  • Always have 1 Cash account per Cash keyring

Maybe we should have 2 separate methods for this:

  • #getOrCreateCashKeyring(entropySource): Promise<CashKeyring>, this one has to be idempotent so we do not re-create the keyring everytime
  • getCashAccount(entropySource): Promise<KeyringAccount>, this would be the only public method of this service (this must also be idempotent).
    • I used get since cash accounts seems to be "implicitly" created for each HD keyrings we have, so semantically this looks more correct to me WDYT?

We could also listen for KeyringController:stateChange, but this one triggers quite a lot and might add a bit too much overhead (and we cannot use selector for this one since the state.keyrings reference is getting change on every vault update IIRC)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, do we really need the KeyringMetadata here? Do you need to reference the keyring ID somewhere else?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ccharly We possibly don't want 1 cash account per HD keyring. The user only expects to see one account. I've added that to the FAQ here

It's not necessarily wrong to have one but the additional ones are not required.

We also don't necessarily want 1 cash account per cash account keyring - we want between zero and one. The account is created when it is needed.

I mention it because you propose a getCashAccount(entropySource), but we do want to expose a method for getting the canonical one.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh then, if that's only 1 cash only no matter how many SRPs you have, then we should definitely not expose the entropySource as a parameter IMO.

We should be using the default primary SRP under the hood (that would be the service's logic)!

Like we hide all the necessary logic to create the MoneyKeyring and create the MoneyAccount. The consume can just use service.getMoneyAccount() to get it, that sounds pretty neat and simple to me.

WDYT @shane-t @Jwhiles?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That does sound neat, but there could be something valuable about having to explicitly call createMoneyAccount the first time we want to access it? I wonder if there may be some restrictions about which users we can create these accounts for - and making the creation process very explicit might help us avoid compliance issues.

That said, I don't actually know of any strict requirements along those lines. I'm just hypothesising! Happy to change the naming if you feel strongly.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think what @ccharly is saying makes sense and it's probably compatible with the stipulation @Jwhiles highlights.

It does make sense to separate account initialisation for those reasons - one reason is that some other services (Ramps, etc) might behave differently before the user has the account (and as @Jwhiles mentioned, cash accounts might be geo-restricted).

It could be possible to use the default SRP under the hood, AND have an explicit, idempotent call to create the account. We do need a getMoneyAccount() method which resolve falsily until then

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we are leaning towards two methods?

getMoneyAccount -> returns money account if one exists, else null/false/whatever
createMoneyAccount -> creates and returns money account if none exists else it either throws, returns null, or returns the account depending on what we decide

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be my view


## Earn Team
/packages/earn-controller @MetaMask/metamask-earn
/packages/cash-account-service @MetaMask/metamask-earn
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably be owner of this too, so this must be moved in the "Joint team" section


### Added

- Initial release
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Initial release
- Initial release ([#8204](https://github.com/MetaMask/core/pull/8204))

@Jwhiles
Copy link
Author

Jwhiles commented Mar 19, 2026

@metamaskbot publish-preview

"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
},
"dependencies": {
"@metamask/base-controller": "^9.0.0",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused @metamask/base-controller dependency in new package

Low Severity

@metamask/base-controller is listed as a production dependency and referenced in tsconfig.build.json, but no source file in the package imports from it. The service class does not extend BaseController (which is correct per the AGENTS.md guideline that stateless services should not be controllers). This dependency and its tsconfig reference appear to be unnecessary.

Additional Locations (1)
Fix in Cursor Fix in Web

@Jwhiles Jwhiles changed the title feat: add cash account keyring to keyring controller, and create cash account service feat: add money account keyring to keyring controller, and create cash account service Mar 20, 2026
@Jwhiles
Copy link
Author

Jwhiles commented Mar 20, 2026

@metamaskbot publish-preview

@github-actions
Copy link
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@5.0.1-preview-e9620906a
@metamask-previews/accounts-controller@37.0.0-preview-e9620906a
@metamask-previews/address-book-controller@7.1.0-preview-e9620906a
@metamask-previews/ai-controllers@0.4.0-preview-e9620906a
@metamask-previews/analytics-controller@1.0.0-preview-e9620906a
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-e9620906a
@metamask-previews/announcement-controller@8.0.0-preview-e9620906a
@metamask-previews/app-metadata-controller@2.0.0-preview-e9620906a
@metamask-previews/approval-controller@9.0.0-preview-e9620906a
@metamask-previews/assets-controller@3.0.0-preview-e9620906a
@metamask-previews/assets-controllers@101.0.1-preview-e9620906a
@metamask-previews/base-controller@9.0.0-preview-e9620906a
@metamask-previews/base-data-service@0.0.0-preview-e9620906a
@metamask-previews/bridge-controller@69.1.1-preview-e9620906a
@metamask-previews/bridge-status-controller@70.0.0-preview-e9620906a
@metamask-previews/build-utils@3.0.4-preview-e9620906a
@metamask-previews/chain-agnostic-permission@1.4.0-preview-e9620906a
@metamask-previews/claims-controller@0.4.3-preview-e9620906a
@metamask-previews/client-controller@1.0.0-preview-e9620906a
@metamask-previews/compliance-controller@1.0.1-preview-e9620906a
@metamask-previews/composable-controller@12.0.0-preview-e9620906a
@metamask-previews/config-registry-controller@0.1.1-preview-e9620906a
@metamask-previews/connectivity-controller@0.1.0-preview-e9620906a
@metamask-previews/controller-utils@11.19.0-preview-e9620906a
@metamask-previews/core-backend@6.2.0-preview-e9620906a
@metamask-previews/delegation-controller@2.0.2-preview-e9620906a
@metamask-previews/earn-controller@11.1.2-preview-e9620906a
@metamask-previews/eip-5792-middleware@3.0.1-preview-e9620906a
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-e9620906a
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-e9620906a
@metamask-previews/ens-controller@19.1.0-preview-e9620906a
@metamask-previews/error-reporting-service@3.0.1-preview-e9620906a
@metamask-previews/eth-block-tracker@15.0.1-preview-e9620906a
@metamask-previews/eth-json-rpc-middleware@23.1.0-preview-e9620906a
@metamask-previews/eth-json-rpc-provider@6.0.0-preview-e9620906a
@metamask-previews/foundryup@1.0.1-preview-e9620906a
@metamask-previews/gas-fee-controller@26.1.0-preview-e9620906a
@metamask-previews/gator-permissions-controller@2.1.1-preview-e9620906a
@metamask-previews/geolocation-controller@0.1.1-preview-e9620906a
@metamask-previews/json-rpc-engine@10.2.3-preview-e9620906a
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-e9620906a
@metamask-previews/keyring-controller@25.1.0-preview-e9620906a
@metamask-previews/logging-controller@8.0.0-preview-e9620906a
@metamask-previews/message-manager@14.1.0-preview-e9620906a
@metamask-previews/messenger@0.3.0-preview-e9620906a
@metamask-previews/money-account-service@0.0.0-preview-e9620906a
@metamask-previews/multichain-account-service@7.1.0-preview-e9620906a
@metamask-previews/multichain-api-middleware@1.2.7-preview-e9620906a
@metamask-previews/multichain-network-controller@3.0.5-preview-e9620906a
@metamask-previews/multichain-transactions-controller@7.0.2-preview-e9620906a
@metamask-previews/name-controller@9.1.0-preview-e9620906a
@metamask-previews/network-controller@30.0.0-preview-e9620906a
@metamask-previews/network-enablement-controller@5.0.0-preview-e9620906a
@metamask-previews/notification-services-controller@23.0.0-preview-e9620906a
@metamask-previews/permission-controller@12.2.1-preview-e9620906a
@metamask-previews/permission-log-controller@5.0.0-preview-e9620906a
@metamask-previews/perps-controller@1.3.0-preview-e9620906a
@metamask-previews/phishing-controller@17.0.0-preview-e9620906a
@metamask-previews/polling-controller@16.0.3-preview-e9620906a
@metamask-previews/preferences-controller@23.0.0-preview-e9620906a
@metamask-previews/profile-metrics-controller@3.1.1-preview-e9620906a
@metamask-previews/profile-sync-controller@28.0.0-preview-e9620906a
@metamask-previews/ramps-controller@12.0.0-preview-e9620906a
@metamask-previews/rate-limit-controller@7.0.0-preview-e9620906a
@metamask-previews/react-data-query@0.0.0-preview-e9620906a
@metamask-previews/remote-feature-flag-controller@4.1.0-preview-e9620906a
@metamask-previews/sample-controllers@4.0.3-preview-e9620906a
@metamask-previews/seedless-onboarding-controller@9.0.0-preview-e9620906a
@metamask-previews/selected-network-controller@26.0.3-preview-e9620906a
@metamask-previews/shield-controller@5.0.2-preview-e9620906a
@metamask-previews/signature-controller@39.1.0-preview-e9620906a
@metamask-previews/storage-service@1.0.0-preview-e9620906a
@metamask-previews/subscription-controller@6.0.2-preview-e9620906a
@metamask-previews/transaction-controller@63.0.0-preview-e9620906a
@metamask-previews/transaction-pay-controller@18.0.0-preview-e9620906a
@metamask-previews/user-operation-controller@41.1.0-preview-e9620906a

@Jwhiles
Copy link
Author

Jwhiles commented Mar 20, 2026

@metamaskbot publish-preview

@github-actions
Copy link
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@5.0.1-preview-7d53b871b
@metamask-previews/accounts-controller@37.0.0-preview-7d53b871b
@metamask-previews/address-book-controller@7.1.0-preview-7d53b871b
@metamask-previews/ai-controllers@0.4.0-preview-7d53b871b
@metamask-previews/analytics-controller@1.0.0-preview-7d53b871b
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-7d53b871b
@metamask-previews/announcement-controller@8.0.0-preview-7d53b871b
@metamask-previews/app-metadata-controller@2.0.0-preview-7d53b871b
@metamask-previews/approval-controller@9.0.0-preview-7d53b871b
@metamask-previews/assets-controller@3.0.0-preview-7d53b871b
@metamask-previews/assets-controllers@101.0.1-preview-7d53b871b
@metamask-previews/base-controller@9.0.0-preview-7d53b871b
@metamask-previews/base-data-service@0.0.0-preview-7d53b871b
@metamask-previews/bridge-controller@69.1.1-preview-7d53b871b
@metamask-previews/bridge-status-controller@70.0.0-preview-7d53b871b
@metamask-previews/build-utils@3.0.4-preview-7d53b871b
@metamask-previews/chain-agnostic-permission@1.4.0-preview-7d53b871b
@metamask-previews/claims-controller@0.4.3-preview-7d53b871b
@metamask-previews/client-controller@1.0.0-preview-7d53b871b
@metamask-previews/compliance-controller@1.0.1-preview-7d53b871b
@metamask-previews/composable-controller@12.0.0-preview-7d53b871b
@metamask-previews/config-registry-controller@0.1.1-preview-7d53b871b
@metamask-previews/connectivity-controller@0.1.0-preview-7d53b871b
@metamask-previews/controller-utils@11.19.0-preview-7d53b871b
@metamask-previews/core-backend@6.2.0-preview-7d53b871b
@metamask-previews/delegation-controller@2.0.2-preview-7d53b871b
@metamask-previews/earn-controller@11.1.2-preview-7d53b871b
@metamask-previews/eip-5792-middleware@3.0.1-preview-7d53b871b
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-7d53b871b
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-7d53b871b
@metamask-previews/ens-controller@19.1.0-preview-7d53b871b
@metamask-previews/error-reporting-service@3.0.1-preview-7d53b871b
@metamask-previews/eth-block-tracker@15.0.1-preview-7d53b871b
@metamask-previews/eth-json-rpc-middleware@23.1.0-preview-7d53b871b
@metamask-previews/eth-json-rpc-provider@6.0.0-preview-7d53b871b
@metamask-previews/foundryup@1.0.1-preview-7d53b871b
@metamask-previews/gas-fee-controller@26.1.0-preview-7d53b871b
@metamask-previews/gator-permissions-controller@2.1.1-preview-7d53b871b
@metamask-previews/geolocation-controller@0.1.1-preview-7d53b871b
@metamask-previews/json-rpc-engine@10.2.3-preview-7d53b871b
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-7d53b871b
@metamask-previews/keyring-controller@25.1.0-preview-7d53b871b
@metamask-previews/logging-controller@8.0.0-preview-7d53b871b
@metamask-previews/message-manager@14.1.0-preview-7d53b871b
@metamask-previews/messenger@0.3.0-preview-7d53b871b
@metamask-previews/money-account-service@0.0.0-preview-7d53b871b
@metamask-previews/multichain-account-service@7.1.0-preview-7d53b871b
@metamask-previews/multichain-api-middleware@1.2.7-preview-7d53b871b
@metamask-previews/multichain-network-controller@3.0.5-preview-7d53b871b
@metamask-previews/multichain-transactions-controller@7.0.2-preview-7d53b871b
@metamask-previews/name-controller@9.1.0-preview-7d53b871b
@metamask-previews/network-controller@30.0.0-preview-7d53b871b
@metamask-previews/network-enablement-controller@5.0.0-preview-7d53b871b
@metamask-previews/notification-services-controller@23.0.0-preview-7d53b871b
@metamask-previews/permission-controller@12.2.1-preview-7d53b871b
@metamask-previews/permission-log-controller@5.0.0-preview-7d53b871b
@metamask-previews/perps-controller@1.3.0-preview-7d53b871b
@metamask-previews/phishing-controller@17.0.0-preview-7d53b871b
@metamask-previews/polling-controller@16.0.3-preview-7d53b871b
@metamask-previews/preferences-controller@23.0.0-preview-7d53b871b
@metamask-previews/profile-metrics-controller@3.1.1-preview-7d53b871b
@metamask-previews/profile-sync-controller@28.0.0-preview-7d53b871b
@metamask-previews/ramps-controller@12.0.0-preview-7d53b871b
@metamask-previews/rate-limit-controller@7.0.0-preview-7d53b871b
@metamask-previews/react-data-query@0.0.0-preview-7d53b871b
@metamask-previews/remote-feature-flag-controller@4.1.0-preview-7d53b871b
@metamask-previews/sample-controllers@4.0.3-preview-7d53b871b
@metamask-previews/seedless-onboarding-controller@9.0.0-preview-7d53b871b
@metamask-previews/selected-network-controller@26.0.3-preview-7d53b871b
@metamask-previews/shield-controller@5.0.2-preview-7d53b871b
@metamask-previews/signature-controller@39.1.0-preview-7d53b871b
@metamask-previews/storage-service@1.0.0-preview-7d53b871b
@metamask-previews/subscription-controller@6.0.2-preview-7d53b871b
@metamask-previews/transaction-controller@63.0.0-preview-7d53b871b
@metamask-previews/transaction-pay-controller@18.0.0-preview-7d53b871b
@metamask-previews/user-operation-controller@41.1.0-preview-7d53b871b

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

@Jwhiles
Copy link
Author

Jwhiles commented Mar 20, 2026

@metamaskbot publish-preview

@github-actions
Copy link
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@5.0.1-preview-04f063ba1
@metamask-previews/accounts-controller@37.0.0-preview-04f063ba1
@metamask-previews/address-book-controller@7.1.0-preview-04f063ba1
@metamask-previews/ai-controllers@0.4.0-preview-04f063ba1
@metamask-previews/analytics-controller@1.0.0-preview-04f063ba1
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-04f063ba1
@metamask-previews/announcement-controller@8.0.0-preview-04f063ba1
@metamask-previews/app-metadata-controller@2.0.0-preview-04f063ba1
@metamask-previews/approval-controller@9.0.0-preview-04f063ba1
@metamask-previews/assets-controller@3.0.0-preview-04f063ba1
@metamask-previews/assets-controllers@101.0.1-preview-04f063ba1
@metamask-previews/base-controller@9.0.0-preview-04f063ba1
@metamask-previews/base-data-service@0.0.0-preview-04f063ba1
@metamask-previews/bridge-controller@69.1.1-preview-04f063ba1
@metamask-previews/bridge-status-controller@70.0.0-preview-04f063ba1
@metamask-previews/build-utils@3.0.4-preview-04f063ba1
@metamask-previews/chain-agnostic-permission@1.4.0-preview-04f063ba1
@metamask-previews/claims-controller@0.4.3-preview-04f063ba1
@metamask-previews/client-controller@1.0.0-preview-04f063ba1
@metamask-previews/compliance-controller@1.0.1-preview-04f063ba1
@metamask-previews/composable-controller@12.0.0-preview-04f063ba1
@metamask-previews/config-registry-controller@0.1.1-preview-04f063ba1
@metamask-previews/connectivity-controller@0.1.0-preview-04f063ba1
@metamask-previews/controller-utils@11.19.0-preview-04f063ba1
@metamask-previews/core-backend@6.2.0-preview-04f063ba1
@metamask-previews/delegation-controller@2.0.2-preview-04f063ba1
@metamask-previews/earn-controller@11.1.2-preview-04f063ba1
@metamask-previews/eip-5792-middleware@3.0.1-preview-04f063ba1
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-04f063ba1
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-04f063ba1
@metamask-previews/ens-controller@19.1.0-preview-04f063ba1
@metamask-previews/error-reporting-service@3.0.1-preview-04f063ba1
@metamask-previews/eth-block-tracker@15.0.1-preview-04f063ba1
@metamask-previews/eth-json-rpc-middleware@23.1.0-preview-04f063ba1
@metamask-previews/eth-json-rpc-provider@6.0.0-preview-04f063ba1
@metamask-previews/foundryup@1.0.1-preview-04f063ba1
@metamask-previews/gas-fee-controller@26.1.0-preview-04f063ba1
@metamask-previews/gator-permissions-controller@2.1.1-preview-04f063ba1
@metamask-previews/geolocation-controller@0.1.1-preview-04f063ba1
@metamask-previews/json-rpc-engine@10.2.3-preview-04f063ba1
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-04f063ba1
@metamask-previews/keyring-controller@25.1.0-preview-04f063ba1
@metamask-previews/logging-controller@8.0.0-preview-04f063ba1
@metamask-previews/message-manager@14.1.0-preview-04f063ba1
@metamask-previews/messenger@0.3.0-preview-04f063ba1
@metamask-previews/money-account-service@0.0.0-preview-04f063ba1
@metamask-previews/multichain-account-service@7.1.0-preview-04f063ba1
@metamask-previews/multichain-api-middleware@1.2.7-preview-04f063ba1
@metamask-previews/multichain-network-controller@3.0.5-preview-04f063ba1
@metamask-previews/multichain-transactions-controller@7.0.2-preview-04f063ba1
@metamask-previews/name-controller@9.1.0-preview-04f063ba1
@metamask-previews/network-controller@30.0.0-preview-04f063ba1
@metamask-previews/network-enablement-controller@5.0.0-preview-04f063ba1
@metamask-previews/notification-services-controller@23.0.0-preview-04f063ba1
@metamask-previews/permission-controller@12.2.1-preview-04f063ba1
@metamask-previews/permission-log-controller@5.0.0-preview-04f063ba1
@metamask-previews/perps-controller@1.3.0-preview-04f063ba1
@metamask-previews/phishing-controller@17.0.0-preview-04f063ba1
@metamask-previews/polling-controller@16.0.3-preview-04f063ba1
@metamask-previews/preferences-controller@23.0.0-preview-04f063ba1
@metamask-previews/profile-metrics-controller@3.1.1-preview-04f063ba1
@metamask-previews/profile-sync-controller@28.0.0-preview-04f063ba1
@metamask-previews/ramps-controller@12.0.0-preview-04f063ba1
@metamask-previews/rate-limit-controller@7.0.0-preview-04f063ba1
@metamask-previews/react-data-query@0.0.0-preview-04f063ba1
@metamask-previews/remote-feature-flag-controller@4.1.0-preview-04f063ba1
@metamask-previews/sample-controllers@4.0.3-preview-04f063ba1
@metamask-previews/seedless-onboarding-controller@9.0.0-preview-04f063ba1
@metamask-previews/selected-network-controller@26.0.3-preview-04f063ba1
@metamask-previews/shield-controller@5.0.2-preview-04f063ba1
@metamask-previews/signature-controller@39.1.0-preview-04f063ba1
@metamask-previews/storage-service@1.0.0-preview-04f063ba1
@metamask-previews/subscription-controller@6.0.2-preview-04f063ba1
@metamask-previews/transaction-controller@63.0.0-preview-04f063ba1
@metamask-previews/transaction-pay-controller@18.0.0-preview-04f063ba1
@metamask-previews/user-operation-controller@41.1.0-preview-04f063ba1

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants