Skip to content

Conversation

@hmalik88
Copy link
Contributor

@hmalik88 hmalik88 commented Nov 12, 2025

Explanation

handleOnKeyringStateChange is calling this function on every account which is taking ~ 200ms. It's been determined that we can remove this call.

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

Note

Removes getNextAvailableAccountName usage from handleOnKeyringStateChange, updates tests accordingly, and documents the change.

  • Accounts Controller
    • Remove call to getNextAvailableAccountName in #handleOnKeyringStateChange, no longer setting metadata.name on add; rely on existing metadata/defaults.
  • Tests
    • Update expectations to use empty metadata.name for newly added accounts; adjust rename tests; add coverage for getNextAvailableAccountName (Ledger branch and HD/Simple grouping).
  • Docs
    • Update CHANGELOG.md under Unreleased to reflect the removal.

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

@hmalik88 hmalik88 requested a review from a team as a code owner November 12, 2025 17:35
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.

Bug: Accounts missing auto-generated names.

Newly added accounts in #handleOnKeyringStateChange no longer receive auto-generated names like "Account 1" or "Account 2". For non-Snap accounts, #getInternalAccountForNonSnapAccount returns an empty string for metadata.name when the account doesn't exist yet. Without the removed getNextAvailableAccountName call, these accounts are stored with empty names, causing them to appear nameless in the UI.

packages/accounts-controller/src/AccountsController.ts#L874-L882

internalAccounts.accounts[account.id] = {
...account,
metadata: {
...account.metadata,
importTime: Date.now(),
lastSelected,
},
};

Fix in Cursor Fix in Web


@hmalik88 hmalik88 requested a review from a team as a code owner November 12, 2025 17:45
) as InternalAccount[];

// Get next account name available for this given keyring.
const name = this.getNextAvailableAccountName(
Copy link
Member

Choose a reason for hiding this comment

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

should we also remove the action AccountsControllerGetNextAvailableAccountNameAction? And I see the method also being bind

Copy link
Contributor Author

@hmalik88 hmalik88 Nov 12, 2025

Choose a reason for hiding this comment

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

I wasn't sure if I should remove that and if it was being used in the clients. Since @danroc mentioned that we should just remove the calls.

Copy link
Member

Choose a reason for hiding this comment

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

Thats a good point, but the call would fail making this a breaking change, right?

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 think we can categorize this PR as perf: improvement for now.

I think we can keep the action and make this just a minor/patch change (not sure which yet, but we can decide later 😄)

However, I'm not 100% sure of the side-effects of this change @hmalik88, so could you make a preview build + make test/integration PRs on both clients and see how that goes?

We just got some errors around naming with another fix today, and some e2e were failing because of that (because we did not migrate everything yet to the full BIP-44 integration unfortunately!)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@gantunesr I don't think the call would fail since we didn't remove the function itself, just the call to it in the state change handler.

@ccharly yup, I can make a preview build and test.

@hmalik88 hmalik88 changed the title feat: remove call to getNextAvailableAccountName perf: remove call to getNextAvailableAccountName Nov 14, 2025
@hmalik88
Copy link
Contributor Author

@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": "3.0.0-preview-62605e1b",
  "@metamask-previews/accounts-controller": "34.0.0-preview-62605e1b",
  "@metamask-previews/address-book-controller": "7.0.0-preview-62605e1b",
  "@metamask-previews/analytics-controller": "0.0.0-preview-62605e1b",
  "@metamask-previews/announcement-controller": "8.0.0-preview-62605e1b",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-62605e1b",
  "@metamask-previews/approval-controller": "8.0.0-preview-62605e1b",
  "@metamask-previews/assets-controllers": "88.0.0-preview-62605e1b",
  "@metamask-previews/base-controller": "9.0.0-preview-62605e1b",
  "@metamask-previews/bridge-controller": "60.1.0-preview-62605e1b",
  "@metamask-previews/bridge-status-controller": "60.1.0-preview-62605e1b",
  "@metamask-previews/build-utils": "3.0.4-preview-62605e1b",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-62605e1b",
  "@metamask-previews/claims-controller": "0.2.0-preview-62605e1b",
  "@metamask-previews/composable-controller": "12.0.0-preview-62605e1b",
  "@metamask-previews/controller-utils": "11.15.0-preview-62605e1b",
  "@metamask-previews/core-backend": "4.0.0-preview-62605e1b",
  "@metamask-previews/delegation-controller": "1.0.0-preview-62605e1b",
  "@metamask-previews/earn-controller": "10.0.0-preview-62605e1b",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-62605e1b",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-62605e1b",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-62605e1b",
  "@metamask-previews/ens-controller": "18.0.0-preview-62605e1b",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-62605e1b",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-62605e1b",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-62605e1b",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-62605e1b",
  "@metamask-previews/foundryup": "1.0.1-preview-62605e1b",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-62605e1b",
  "@metamask-previews/gator-permissions-controller": "0.4.0-preview-62605e1b",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-62605e1b",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-62605e1b",
  "@metamask-previews/keyring-controller": "24.0.0-preview-62605e1b",
  "@metamask-previews/logging-controller": "7.0.0-preview-62605e1b",
  "@metamask-previews/message-manager": "14.0.0-preview-62605e1b",
  "@metamask-previews/messenger": "0.3.0-preview-62605e1b",
  "@metamask-previews/multichain-account-service": "3.0.0-preview-62605e1b",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-62605e1b",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-62605e1b",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-62605e1b",
  "@metamask-previews/name-controller": "9.0.0-preview-62605e1b",
  "@metamask-previews/network-controller": "25.0.0-preview-62605e1b",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-62605e1b",
  "@metamask-previews/notification-services-controller": "20.0.0-preview-62605e1b",
  "@metamask-previews/permission-controller": "12.1.0-preview-62605e1b",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-62605e1b",
  "@metamask-previews/phishing-controller": "15.0.0-preview-62605e1b",
  "@metamask-previews/polling-controller": "15.0.0-preview-62605e1b",
  "@metamask-previews/preferences-controller": "21.0.0-preview-62605e1b",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-62605e1b",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-62605e1b",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-62605e1b",
  "@metamask-previews/sample-controllers": "3.0.0-preview-62605e1b",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-62605e1b",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-62605e1b",
  "@metamask-previews/shield-controller": "2.1.0-preview-62605e1b",
  "@metamask-previews/signature-controller": "36.0.0-preview-62605e1b",
  "@metamask-previews/subscription-controller": "4.2.2-preview-62605e1b",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-62605e1b",
  "@metamask-previews/transaction-controller": "61.3.0-preview-62605e1b",
  "@metamask-previews/transaction-pay-controller": "6.0.0-preview-62605e1b",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-62605e1b"
}

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.

4 participants