Skip to content

feat(accounts-controller): add new typed options for InternalAccounts #6147

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 19 commits into from
Jul 22, 2025

Conversation

ccharly
Copy link
Contributor

@ccharly ccharly commented Jul 18, 2025

Explanation

Properly populate entropy options for EVM accounts and also add new typed options for every InternalAccounts.

Test PR:

References

N/A

Changelog

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, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@ccharly ccharly force-pushed the feat/use-keyring-typed-options branch from 9d952f6 to 254e0a5 Compare July 18, 2025 11:34
@ccharly
Copy link
Contributor Author

ccharly commented Jul 21, 2025

@metamaskbot publish-preview

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": "0.4.0-preview-97b5829f",
  "@metamask-previews/accounts-controller": "31.0.0-preview-97b5829f",
  "@metamask-previews/address-book-controller": "6.1.1-preview-97b5829f",
  "@metamask-previews/announcement-controller": "7.0.3-preview-97b5829f",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-97b5829f",
  "@metamask-previews/approval-controller": "7.1.3-preview-97b5829f",
  "@metamask-previews/assets-controllers": "72.0.0-preview-97b5829f",
  "@metamask-previews/base-controller": "8.0.1-preview-97b5829f",
  "@metamask-previews/bridge-controller": "36.1.0-preview-97b5829f",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-97b5829f",
  "@metamask-previews/build-utils": "3.0.3-preview-97b5829f",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-97b5829f",
  "@metamask-previews/composable-controller": "11.0.0-preview-97b5829f",
  "@metamask-previews/controller-utils": "11.11.0-preview-97b5829f",
  "@metamask-previews/delegation-controller": "0.5.0-preview-97b5829f",
  "@metamask-previews/earn-controller": "3.0.0-preview-97b5829f",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-97b5829f",
  "@metamask-previews/ens-controller": "17.0.1-preview-97b5829f",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-97b5829f",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-97b5829f",
  "@metamask-previews/foundryup": "1.0.0-preview-97b5829f",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-97b5829f",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-97b5829f",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-97b5829f",
  "@metamask-previews/keyring-controller": "22.1.0-preview-97b5829f",
  "@metamask-previews/logging-controller": "6.0.4-preview-97b5829f",
  "@metamask-previews/message-manager": "12.0.2-preview-97b5829f",
  "@metamask-previews/messenger": "0.0.0-preview-97b5829f",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-97b5829f",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-97b5829f",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-97b5829f",
  "@metamask-previews/name-controller": "8.0.3-preview-97b5829f",
  "@metamask-previews/network-controller": "24.0.0-preview-97b5829f",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-97b5829f",
  "@metamask-previews/permission-controller": "11.0.6-preview-97b5829f",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-97b5829f",
  "@metamask-previews/phishing-controller": "13.1.0-preview-97b5829f",
  "@metamask-previews/polling-controller": "14.0.0-preview-97b5829f",
  "@metamask-previews/preferences-controller": "18.4.1-preview-97b5829f",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-97b5829f",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-97b5829f",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-97b5829f",
  "@metamask-previews/sample-controllers": "1.0.0-preview-97b5829f",
  "@metamask-previews/seedless-onboarding-controller": "2.3.0-preview-97b5829f",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-97b5829f",
  "@metamask-previews/signature-controller": "31.0.1-preview-97b5829f",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-97b5829f",
  "@metamask-previews/transaction-controller": "58.1.1-preview-97b5829f",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-97b5829f"
}

@ccharly ccharly marked this pull request as ready for review July 21, 2025 18:32
@ccharly ccharly requested review from a team as code owners July 21, 2025 18:32
@ccharly
Copy link
Contributor Author

ccharly commented Jul 21, 2025

cursor[bot]

This comment was marked as outdated.

Comment on lines +157 to +159
// If for some reason, we cannot find this address, then the caller made a mistake
// and it did not use the proper keyring object. For now, we do not fail and just
// consider this account as "simple account".
Copy link
Contributor

Choose a reason for hiding this comment

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

undefined would be equivalent to a simple account? That doesn't seem correct.

Copy link
Contributor Author

@ccharly ccharly Jul 22, 2025

Choose a reason for hiding this comment

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

The other option would be to throw here. But that could be really risky and could brick wallets if not handled I guess 🤔

Also, this should NEVER happen, truly 😅 but I need to handle the error case.

Do you have anything else in mind for this case?

Comment on lines 582 to 584
} else {
keyringTypes.set(keyringTypeName, 1);
keyringAccountIndexes.set(keyringTypeName, 1);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Don't we start at 0 index?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Well, for "account naming" we do start at 1 (and I just re-used the previous logic, I just renamed the variables to make it more clear.

That being said, with the current logic, the keyringAccountIndexes will always be 1 and I think the if is not necessary actually, because:

const keyringAccountIndex = 0;
keyringAccountIndexes.set(keyringTypeName, keyringAccountIndex + 1);
// Would set `keyringAccountIndexes` to 1.

const keyringAccountIndex = 0;
if (keyringAccountIndex) {
  keyringTypes.set(keyringTypeName, keyringAccountIndex + 1);
} else {
  // This branch will get executed.
  keyringTypes.set(keyringTypeName, 1);
  // Would set `keyringAccountIndexes` to 1.
}

So they do seem similar.

Lastly, we mostly use those indexes to compute the account name, but I do believe we never end up using this one, cause we ALWAYS set a name when creating an account 🤔 So this fallback is probably never executed and probably buggy too 🙃

I'll try to fix it still.

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe we can add a deprecation notice to the name property in the internal account. The account name will come from the account group.

Copy link
Contributor Author

@ccharly ccharly Jul 22, 2025

Choose a reason for hiding this comment

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

Maybe we can add a deprecation notice to the name property in the internal account. The account name will come from the account group.

Sounds like a good idea, but IMO we should do that once we truly introduce account group naming!

@ccharly
Copy link
Contributor Author

ccharly commented Jul 22, 2025

@metamaskbot publish-preview

cursor[bot]

This comment was marked as outdated.

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": "0.4.0-preview-31e2b13a",
  "@metamask-previews/accounts-controller": "31.0.0-preview-31e2b13a",
  "@metamask-previews/address-book-controller": "6.1.1-preview-31e2b13a",
  "@metamask-previews/announcement-controller": "7.0.3-preview-31e2b13a",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-31e2b13a",
  "@metamask-previews/approval-controller": "7.1.3-preview-31e2b13a",
  "@metamask-previews/assets-controllers": "72.0.0-preview-31e2b13a",
  "@metamask-previews/base-controller": "8.0.1-preview-31e2b13a",
  "@metamask-previews/bridge-controller": "36.1.0-preview-31e2b13a",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-31e2b13a",
  "@metamask-previews/build-utils": "3.0.3-preview-31e2b13a",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-31e2b13a",
  "@metamask-previews/composable-controller": "11.0.0-preview-31e2b13a",
  "@metamask-previews/controller-utils": "11.11.0-preview-31e2b13a",
  "@metamask-previews/delegation-controller": "0.5.0-preview-31e2b13a",
  "@metamask-previews/earn-controller": "3.0.0-preview-31e2b13a",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-31e2b13a",
  "@metamask-previews/ens-controller": "17.0.1-preview-31e2b13a",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-31e2b13a",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-31e2b13a",
  "@metamask-previews/foundryup": "1.0.0-preview-31e2b13a",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-31e2b13a",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-31e2b13a",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-31e2b13a",
  "@metamask-previews/keyring-controller": "22.1.0-preview-31e2b13a",
  "@metamask-previews/logging-controller": "6.0.4-preview-31e2b13a",
  "@metamask-previews/message-manager": "12.0.2-preview-31e2b13a",
  "@metamask-previews/messenger": "0.0.0-preview-31e2b13a",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-31e2b13a",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-31e2b13a",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-31e2b13a",
  "@metamask-previews/name-controller": "8.0.3-preview-31e2b13a",
  "@metamask-previews/network-controller": "24.0.0-preview-31e2b13a",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-31e2b13a",
  "@metamask-previews/permission-controller": "11.0.6-preview-31e2b13a",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-31e2b13a",
  "@metamask-previews/phishing-controller": "13.1.0-preview-31e2b13a",
  "@metamask-previews/polling-controller": "14.0.0-preview-31e2b13a",
  "@metamask-previews/preferences-controller": "18.4.1-preview-31e2b13a",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-31e2b13a",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-31e2b13a",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-31e2b13a",
  "@metamask-previews/sample-controllers": "1.0.0-preview-31e2b13a",
  "@metamask-previews/seedless-onboarding-controller": "2.3.0-preview-31e2b13a",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-31e2b13a",
  "@metamask-previews/signature-controller": "31.0.1-preview-31e2b13a",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-31e2b13a",
  "@metamask-previews/transaction-controller": "58.1.1-preview-31e2b13a",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-31e2b13a"
}

@ccharly
Copy link
Contributor Author

ccharly commented Jul 22, 2025

@metamaskbot publish-preview

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": "0.4.0-preview-1d5c2cf9",
  "@metamask-previews/accounts-controller": "31.0.0-preview-1d5c2cf9",
  "@metamask-previews/address-book-controller": "6.1.1-preview-1d5c2cf9",
  "@metamask-previews/announcement-controller": "7.0.3-preview-1d5c2cf9",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-1d5c2cf9",
  "@metamask-previews/approval-controller": "7.1.3-preview-1d5c2cf9",
  "@metamask-previews/assets-controllers": "72.0.0-preview-1d5c2cf9",
  "@metamask-previews/base-controller": "8.0.1-preview-1d5c2cf9",
  "@metamask-previews/bridge-controller": "36.1.0-preview-1d5c2cf9",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-1d5c2cf9",
  "@metamask-previews/build-utils": "3.0.3-preview-1d5c2cf9",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-1d5c2cf9",
  "@metamask-previews/composable-controller": "11.0.0-preview-1d5c2cf9",
  "@metamask-previews/controller-utils": "11.11.0-preview-1d5c2cf9",
  "@metamask-previews/delegation-controller": "0.5.0-preview-1d5c2cf9",
  "@metamask-previews/earn-controller": "3.0.0-preview-1d5c2cf9",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-1d5c2cf9",
  "@metamask-previews/ens-controller": "17.0.1-preview-1d5c2cf9",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-1d5c2cf9",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-1d5c2cf9",
  "@metamask-previews/foundryup": "1.0.0-preview-1d5c2cf9",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-1d5c2cf9",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-1d5c2cf9",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-1d5c2cf9",
  "@metamask-previews/keyring-controller": "22.1.0-preview-1d5c2cf9",
  "@metamask-previews/logging-controller": "6.0.4-preview-1d5c2cf9",
  "@metamask-previews/message-manager": "12.0.2-preview-1d5c2cf9",
  "@metamask-previews/messenger": "0.0.0-preview-1d5c2cf9",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-1d5c2cf9",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-1d5c2cf9",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-1d5c2cf9",
  "@metamask-previews/name-controller": "8.0.3-preview-1d5c2cf9",
  "@metamask-previews/network-controller": "24.0.0-preview-1d5c2cf9",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-1d5c2cf9",
  "@metamask-previews/permission-controller": "11.0.6-preview-1d5c2cf9",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-1d5c2cf9",
  "@metamask-previews/phishing-controller": "13.1.0-preview-1d5c2cf9",
  "@metamask-previews/polling-controller": "14.0.0-preview-1d5c2cf9",
  "@metamask-previews/preferences-controller": "18.4.1-preview-1d5c2cf9",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-1d5c2cf9",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-1d5c2cf9",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-1d5c2cf9",
  "@metamask-previews/sample-controllers": "1.0.0-preview-1d5c2cf9",
  "@metamask-previews/seedless-onboarding-controller": "2.3.0-preview-1d5c2cf9",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-1d5c2cf9",
  "@metamask-previews/signature-controller": "31.0.1-preview-1d5c2cf9",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-1d5c2cf9",
  "@metamask-previews/transaction-controller": "58.1.1-preview-1d5c2cf9",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-1d5c2cf9"
}

@ccharly
Copy link
Contributor Author

ccharly commented Jul 22, 2025

@metamaskbot publish-preview

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": "0.4.0-preview-74230359",
  "@metamask-previews/accounts-controller": "31.0.0-preview-74230359",
  "@metamask-previews/address-book-controller": "6.1.1-preview-74230359",
  "@metamask-previews/announcement-controller": "7.0.3-preview-74230359",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-74230359",
  "@metamask-previews/approval-controller": "7.1.3-preview-74230359",
  "@metamask-previews/assets-controllers": "72.0.0-preview-74230359",
  "@metamask-previews/base-controller": "8.0.1-preview-74230359",
  "@metamask-previews/bridge-controller": "36.1.0-preview-74230359",
  "@metamask-previews/bridge-status-controller": "36.0.0-preview-74230359",
  "@metamask-previews/build-utils": "3.0.3-preview-74230359",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-74230359",
  "@metamask-previews/composable-controller": "11.0.0-preview-74230359",
  "@metamask-previews/controller-utils": "11.11.0-preview-74230359",
  "@metamask-previews/delegation-controller": "0.5.0-preview-74230359",
  "@metamask-previews/earn-controller": "3.0.0-preview-74230359",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-74230359",
  "@metamask-previews/ens-controller": "17.0.1-preview-74230359",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-74230359",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-74230359",
  "@metamask-previews/foundryup": "1.0.0-preview-74230359",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-74230359",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-74230359",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-74230359",
  "@metamask-previews/keyring-controller": "22.1.0-preview-74230359",
  "@metamask-previews/logging-controller": "6.0.4-preview-74230359",
  "@metamask-previews/message-manager": "12.0.2-preview-74230359",
  "@metamask-previews/messenger": "0.0.0-preview-74230359",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-74230359",
  "@metamask-previews/multichain-network-controller": "0.10.0-preview-74230359",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-74230359",
  "@metamask-previews/name-controller": "8.0.3-preview-74230359",
  "@metamask-previews/network-controller": "24.0.0-preview-74230359",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-74230359",
  "@metamask-previews/permission-controller": "11.0.6-preview-74230359",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-74230359",
  "@metamask-previews/phishing-controller": "13.1.0-preview-74230359",
  "@metamask-previews/polling-controller": "14.0.0-preview-74230359",
  "@metamask-previews/preferences-controller": "18.4.1-preview-74230359",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-74230359",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-74230359",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-74230359",
  "@metamask-previews/sample-controllers": "1.0.0-preview-74230359",
  "@metamask-previews/seedless-onboarding-controller": "2.3.0-preview-74230359",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-74230359",
  "@metamask-previews/signature-controller": "31.0.1-preview-74230359",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-74230359",
  "@metamask-previews/transaction-controller": "58.1.1-preview-74230359",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-74230359"
}

@montelaidev
Copy link
Contributor

Note:

Simple private key accounts and hardware wallets do not have their accounts options automatically populated. It is not needed for state 2, and will be addressed in a subsequent PR.

@ccharly ccharly enabled auto-merge (squash) July 22, 2025 14:56
@ccharly ccharly merged commit 5b7f673 into main Jul 22, 2025
219 checks passed
@ccharly ccharly deleted the feat/use-keyring-typed-options branch July 22, 2025 15:01
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