Skip to content

Conversation

bergarces
Copy link
Contributor

@bergarces bergarces commented Oct 21, 2025

Explanation

Adds single address balance refresh based on transaction events to make up for removing them on extension client side during migration.

Previews:
MetaMask/metamask-extension#36808
MetaMask/metamask-mobile#21465

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

Note

AccountTrackerController now subscribes to transaction events to trigger targeted (single-address) balance refreshes, with internal refresh refactor and accompanying tests; changelog updated (breaking note).

  • AccountTrackerController:
    • Event subscriptions (BREAKING): Listen to TransactionController:unapprovedTransactionAdded and TransactionController:transactionConfirmed to refresh balances.
    • Targeted refresh: Add #refreshAddress and refactor refresh into #refreshAccounts for single-address updates; pass queryAllAccounts, checksum selectedAccount, and allAccounts to fetchers.
    • Messaging/types: Extend AllowedEvents to include transaction events; wire subscriptions in constructor.
  • Tests (packages/assets-controllers/src/AccountTrackerController.test.ts):
    • Add tests that publish the above transaction events and assert balance refresh; update helper to expose messenger and allow new events.
  • Changelog: Note breaking addition of new transaction event listeners under [Unreleased].

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

@bergarces bergarces requested a review from a team as a code owner October 21, 2025 10:55
cursor[bot]

This comment was marked as outdated.

@bergarces bergarces requested a review from a team as a code owner October 21, 2025 10:59
@bergarces
Copy link
Contributor Author

@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": "1.5.0-preview-8504447",
  "@metamask-previews/accounts-controller": "33.1.1-preview-8504447",
  "@metamask-previews/address-book-controller": "6.2.0-preview-8504447",
  "@metamask-previews/announcement-controller": "7.1.0-preview-8504447",
  "@metamask-previews/app-metadata-controller": "1.1.0-preview-8504447",
  "@metamask-previews/approval-controller": "7.2.0-preview-8504447",
  "@metamask-previews/assets-controllers": "81.0.1-preview-8504447",
  "@metamask-previews/base-controller": "8.4.1-preview-8504447",
  "@metamask-previews/bridge-controller": "53.0.0-preview-8504447",
  "@metamask-previews/bridge-status-controller": "52.1.0-preview-8504447",
  "@metamask-previews/build-utils": "3.0.4-preview-8504447",
  "@metamask-previews/chain-agnostic-permission": "1.2.0-preview-8504447",
  "@metamask-previews/composable-controller": "11.1.0-preview-8504447",
  "@metamask-previews/controller-utils": "11.14.1-preview-8504447",
  "@metamask-previews/core-backend": "2.1.0-preview-8504447",
  "@metamask-previews/delegation-controller": "0.8.0-preview-8504447",
  "@metamask-previews/earn-controller": "8.0.1-preview-8504447",
  "@metamask-previews/eip-5792-middleware": "1.2.3-preview-8504447",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.0.0-preview-8504447",
  "@metamask-previews/eip1193-permission-middleware": "1.0.1-preview-8504447",
  "@metamask-previews/ens-controller": "17.1.0-preview-8504447",
  "@metamask-previews/error-reporting-service": "2.2.1-preview-8504447",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-8504447",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-8504447",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-8504447",
  "@metamask-previews/foundryup": "1.0.1-preview-8504447",
  "@metamask-previews/gas-fee-controller": "24.1.0-preview-8504447",
  "@metamask-previews/gator-permissions-controller": "0.2.1-preview-8504447",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-8504447",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-8504447",
  "@metamask-previews/keyring-controller": "23.1.1-preview-8504447",
  "@metamask-previews/logging-controller": "6.1.0-preview-8504447",
  "@metamask-previews/message-manager": "13.0.1-preview-8504447",
  "@metamask-previews/messenger": "0.3.0-preview-8504447",
  "@metamask-previews/multichain-account-service": "1.6.1-preview-8504447",
  "@metamask-previews/multichain-api-middleware": "1.2.1-preview-8504447",
  "@metamask-previews/multichain-network-controller": "1.0.1-preview-8504447",
  "@metamask-previews/multichain-transactions-controller": "5.1.0-preview-8504447",
  "@metamask-previews/name-controller": "8.1.0-preview-8504447",
  "@metamask-previews/network-controller": "24.3.0-preview-8504447",
  "@metamask-previews/network-enablement-controller": "2.1.1-preview-8504447",
  "@metamask-previews/notification-services-controller": "18.3.0-preview-8504447",
  "@metamask-previews/permission-controller": "11.1.0-preview-8504447",
  "@metamask-previews/permission-log-controller": "4.1.0-preview-8504447",
  "@metamask-previews/phishing-controller": "14.1.2-preview-8504447",
  "@metamask-previews/polling-controller": "14.0.1-preview-8504447",
  "@metamask-previews/preferences-controller": "20.0.2-preview-8504447",
  "@metamask-previews/profile-sync-controller": "25.1.1-preview-8504447",
  "@metamask-previews/rate-limit-controller": "6.1.0-preview-8504447",
  "@metamask-previews/remote-feature-flag-controller": "1.9.0-preview-8504447",
  "@metamask-previews/sample-controllers": "2.0.1-preview-8504447",
  "@metamask-previews/seedless-onboarding-controller": "4.1.0-preview-8504447",
  "@metamask-previews/selected-network-controller": "24.0.1-preview-8504447",
  "@metamask-previews/shield-controller": "0.3.2-preview-8504447",
  "@metamask-previews/signature-controller": "34.0.1-preview-8504447",
  "@metamask-previews/subscription-controller": "2.0.0-preview-8504447",
  "@metamask-previews/token-search-discovery-controller": "3.5.0-preview-8504447",
  "@metamask-previews/transaction-controller": "60.9.0-preview-8504447",
  "@metamask-previews/user-operation-controller": "39.2.0-preview-8504447"
}

) as ChecksumAddress,
queryAllAccounts,
selectedAccount,
allAccounts,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I didn't want to make any further changes here in case we have to end up cherrypicking this as a patch, but we should not defer this logic to the fetchers.

The fetchers should receive just an array of chainIds and an array of addresses (which could be one address). The only thing both of them do internally is use allAccounts (only the address) or selectedAccount depending on whether queryAllAccounts is true or false.

@bergarces bergarces enabled auto-merge (squash) October 21, 2025 15:21
@bergarces bergarces merged commit b610ba9 into main Oct 21, 2025
255 checks passed
@bergarces bergarces deleted the add-account-tracker-controller-refresh-events branch October 21, 2025 15:28
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