Skip to content
Open
Show file tree
Hide file tree
Changes from 47 commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
102687b
migrate controller
bergarces Oct 8, 2025
c130949
more adjustments
bergarces Oct 13, 2025
d7a8983
progress
bergarces Oct 14, 2025
35700fc
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 15, 2025
f7624cf
remove logs
bergarces Oct 15, 2025
bf14880
remnove logs
bergarces Oct 15, 2025
025f486
remove logs
bergarces Oct 15, 2025
49f553d
rename file
bergarces Oct 15, 2025
f631510
Add missing state
bergarces Oct 15, 2025
791b24c
comments
bergarces Oct 16, 2025
2012727
revert
bergarces Oct 16, 2025
c4a696f
easy fix for preferences controller
bergarces Oct 16, 2025
8d2e86c
test file
bergarces Oct 17, 2025
eae81ee
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 17, 2025
53290e8
better comment
bergarces Oct 17, 2025
a18994c
remove keyringcontroller wrong allowed actions and events
bergarces Oct 17, 2025
7e745db
linting
bergarces Oct 17, 2025
970d100
revert changes
bergarces Oct 17, 2025
5302bed
do not include staked assets
bergarces Oct 17, 2025
22cb1c7
remove comment
bergarces Oct 17, 2025
4d6060c
revert
bergarces Oct 17, 2025
8013943
fix
bergarces Oct 17, 2025
cdd10c6
more comments removed
bergarces Oct 17, 2025
1749a1e
more comments
bergarces Oct 17, 2025
7cea266
remove hw balance sync
bergarces Oct 17, 2025
c3bca42
remove comment
bergarces Oct 17, 2025
9b7192f
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 20, 2025
2804fe0
checksum when needed
bergarces Oct 20, 2025
ef8aba5
remove comment
bergarces Oct 20, 2025
a47e0a9
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 20, 2025
809974b
better test
bergarces Oct 20, 2025
e724c58
remove subscriptions outside the controller
bergarces Oct 20, 2025
1d66063
console log
bergarces Oct 20, 2025
98e4e16
change to checksum
bergarces Oct 20, 2025
57bab48
remove code
bergarces Oct 20, 2025
77e1769
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 20, 2025
3d2c66f
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 21, 2025
7a3305a
preview package
bergarces Oct 21, 2025
20e0309
remove redundant code
bergarces Oct 21, 2025
2df6aa5
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 21, 2025
9f4bdc5
test fix
bergarces Oct 21, 2025
f54abe9
fix for rpc method
bergarces Oct 21, 2025
47dadc2
test fix
bergarces Oct 21, 2025
6047fba
fix test
bergarces Oct 21, 2025
fd8906f
fix
bergarces Oct 21, 2025
142e9d9
correct case for mock stores
bergarces Oct 21, 2025
b96ae8e
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 21, 2025
0392b88
more test fixes
bergarces Oct 21, 2025
105d8af
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 21, 2025
3fbd97d
migration
bergarces Oct 21, 2025
a3868fe
updates and fixes
bergarces Oct 22, 2025
ae0cb15
missing entries in mock
bergarces Oct 22, 2025
5002a15
fix for selector
bergarces Oct 22, 2025
8e07250
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
28e8f6e
file
bergarces Oct 22, 2025
6103c55
webpack lavamoat
bergarces Oct 22, 2025
394a657
more test fixes
bergarces Oct 22, 2025
b83e654
remove code from legacy send flow
bergarces Oct 22, 2025
a9d29fd
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
e734416
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
2f89104
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
8c5178c
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
b66d349
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
29d80bd
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 22, 2025
9b20aec
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 23, 2025
60ddebb
fix test
bergarces Oct 23, 2025
8ee380e
Merge branch 'main' into account-tracker-controller-migration
bergarces Oct 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 6 additions & 27 deletions .storybook/test-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -792,47 +792,26 @@ const state = {
swapsWelcomeMessageHasBeenShown: true,
defaultHomeActiveTabName: 'Tokens',
network: '5',
accounts: {
'0x64a845a5b02460acf8a3d84503b0d68d028b4bb4': {
address: '0x64a845a5b02460acf8a3d84503b0d68d028b4bb4',
balance: '0x176e5b6f173ebe66',
},
'0xb19ac54efa18cc3a14a5b821bfec73d284bf0c5e': {
address: '0xb19ac54efa18cc3a14a5b821bfec73d284bf0c5e',
balance: '0x2d3142f5000',
},
'0x9d0ba4ddac06032527b140912ec808ab9451b788': {
address: '0x9d0ba4ddac06032527b140912ec808ab9451b788',
balance: '0x15f6f0b9d4f8d000',
},
},
accountsByChainId: {
'0x1': {
'0x64a845a5b02460acf8a3d84503b0d68d028b4bb4': { balance: '0x0' },
'0xb19ac54efa18cc3a14a5b821bfec73d284bf0c5e': {
'0x64A845a5b02460ACf8a3D84503b0D68d028B4bb4': { balance: '0x0' },
'0xb19Ac54EfA18CC3A14A5B821bFeC73d284Bf0c5e': {
balance: '0xcaf5317161f400',
},
'0x9d0ba4ddac06032527b140912ec808ab9451b788': { balance: '0x0' },
'0x9D0ba4DDAC06032527B140912EC808ab9451b788': { balance: '0x0' },
},
'0x5': {
'0x64a845a5b02460acf8a3d84503b0d68d028b4bb4': {
address: '0x64a845a5b02460acf8a3d84503b0d68d028b4bb4',
'0x64A845a5b02460ACf8a3D84503b0D68d028B4bb4': {
balance: '0x176e5b6f173ebe66',
},
'0xb19ac54efa18cc3a14a5b821bfec73d284bf0c5e': {
address: '0xb19ac54efa18cc3a14a5b821bfec73d284bf0c5e',
'0xb19Ac54EfA18CC3A14A5B821bFeC73d284Bf0c5e': {
balance: '0x2d3142f5000',
},
'0x9d0ba4ddac06032527b140912ec808ab9451b788': {
address: '0x9d0ba4ddac06032527b140912ec808ab9451b788',
'0x9D0ba4DDAC06032527B140912EC808ab9451b788': {
balance: '0x15f6f0b9d4f8d000',
},
},
},
currentBlockGasLimit: '0x793af4',
currentBlockGasLimitByChainId: {
'0x5': '0x793af4',
},
transactions: [
{
chainId: '0x38',
Expand Down
3 changes: 0 additions & 3 deletions app/scripts/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -556,10 +556,7 @@ function saveTimestamp() {
* @property {boolean} welcomeScreen - True if welcome screen should be shown.
* @property {string} currentLocale - A locale string matching the user's preferred display language.
* @property {string} networkStatus - Either "unknown", "available", "unavailable", or "blocked", depending on the status of the currently selected network.
* @property {object} accounts - An object mapping lower-case hex addresses to objects with "balance" and "address" keys, both storing hex string values.
* @property {object} accountsByChainId - An object mapping lower-case hex addresses to objects with "balance" and "address" keys, both storing hex string values keyed by chain id.
* @property {hex} currentBlockGasLimit - The most recently seen block gas limit, in a lower case hex prefixed string.
* @property {object} currentBlockGasLimitByChainId - The most recently seen block gas limit, in a lower case hex prefixed string keyed by chain id.
* @property {object} unapprovedPersonalMsgs - An object of messages pending approval, mapping a unique ID to the options.
* @property {number} unapprovedPersonalMsgCount - The number of messages in unapprovedPersonalMsgs.
* @property {object} unapprovedEncryptionPublicKeyMsgs - An object of messages pending approval, mapping a unique ID to the options.
Expand Down
20 changes: 0 additions & 20 deletions app/scripts/constants/contracts.ts

This file was deleted.

3 changes: 0 additions & 3 deletions app/scripts/constants/sentry-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@ export const SENTRY_BACKGROUND_STATE = {
},
},
AccountTracker: {
accounts: false,
accountsByChainId: false,
currentBlockGasLimit: true,
currentBlockGasLimitByChainId: true,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

TODO: Add migration to remove them from state before merging

},
AddressBookController: {
addressBook: false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { ActionConstraint, Messenger } from '@metamask/base-controller';
import {
NetworkControllerGetSelectedNetworkClientAction,
NetworkControllerNetworkDidChangeEvent,
} from '@metamask/network-controller';
import { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';
import AccountTrackerController from '../controllers/account-tracker-controller';
import { AccountTrackerController } from '@metamask/assets-controllers';
import { ControllerInitRequest } from './types';
import { buildControllerInitRequestMock } from './test/utils';
import {
Expand All @@ -19,9 +15,7 @@ jest.mock('../controllers/account-tracker-controller');

function getInitRequestMock(
baseMessenger = new Messenger<
| NetworkControllerGetSelectedNetworkClientAction
| RemoteFeatureFlagControllerGetStateAction
| ActionConstraint,
RemoteFeatureFlagControllerGetStateAction | ActionConstraint,
never
>(),
): jest.Mocked<
Expand All @@ -30,17 +24,6 @@ function getInitRequestMock(
AccountTrackerControllerInitMessenger
>
> {
baseMessenger.registerActionHandler(
'NetworkController:getSelectedNetworkClient',
() => ({
// @ts-expect-error: Partial mock.
provider: {},

// @ts-expect-error: Partial mock.
blockTracker: {},
}),
);

baseMessenger.registerActionHandler(
'RemoteFeatureFlagController:getState',
() => ({
Expand Down Expand Up @@ -93,26 +76,4 @@ describe('AccountTrackerControllerInit', () => {
expect(chainIds).toContain('0x38'); // BSC
expect(chainIds).toContain('0xe708'); // Linea
});

it('calls `updateAccounts` when `NetworkController:networkDidChange` is emitted', () => {
const messenger = new Messenger<
| NetworkControllerGetSelectedNetworkClientAction
| RemoteFeatureFlagControllerGetStateAction
| ActionConstraint,
NetworkControllerNetworkDidChangeEvent
>();

const request = getInitRequestMock(messenger);
const { controller } = AccountTrackerControllerInit(request);

expect(controller.updateAccounts).not.toHaveBeenCalled();

messenger.publish('NetworkController:networkDidChange', {
selectedNetworkClientId: 'test',
networkConfigurationsByChainId: {},
networksMetadata: {},
});

expect(controller.updateAccounts).toHaveBeenCalledTimes(1);
});
});
69 changes: 23 additions & 46 deletions app/scripts/controller-init/account-tracker-controller-init.ts
Original file line number Diff line number Diff line change
@@ -1,56 +1,38 @@
import { assert } from '@metamask/utils';
import { getProviderConfig } from '../../../shared/modules/selectors/networks';
import { NETWORK_TYPES } from '../../../shared/constants/network';
import AccountTrackerController from '../controllers/account-tracker-controller';
import { AccountTrackerController } from '@metamask/assets-controllers';
import { NetworkClientId } from '@metamask/network-controller';
import { ControllerInitFunction } from './types';
import {
AccountTrackerControllerInitMessenger,
AccountTrackerControllerMessenger,
} from './messengers';

/**
* Initialize the account tracker controller.
*
* @param request - The request object.
* @param request.controllerMessenger - The messenger to use for the controller.
* @param request.initMessenger - The messenger to use for initialization.
* @returns The initialized controller.
*/
export const AccountTrackerControllerInit: ControllerInitFunction<
AccountTrackerController,
AccountTrackerControllerMessenger,
AccountTrackerControllerInitMessenger
> = ({ controllerMessenger, initMessenger }) => {
const { provider, blockTracker } =
initMessenger.call('NetworkController:getSelectedNetworkClient') ?? {};

assert(
provider,
'Provider is required to initialize AccountTrackerController.',
);

assert(
blockTracker,
'Block tracker is required to initialize AccountTrackerController.',
);
> = ({ controllerMessenger, initMessenger, persistedState, getController }) => {
const getAssetsContractController = () =>
getController('AssetsContractController');

const controller = new AccountTrackerController({
state: { accounts: {} },
state: persistedState.AccountTrackerController,
messenger: controllerMessenger,
provider,
blockTracker,
getNetworkIdentifier: (providerConfig): string => {
const metamask = initMessenger.call('NetworkController:getState');

const config =
providerConfig ??
getProviderConfig({
metamask,
});

return config.type === NETWORK_TYPES.RPC && config.rpcUrl
? config.rpcUrl
: config.type;
getStakedBalanceForChain: (
addresses: string[],
networkClientId?: NetworkClientId,
) => {
const assetsContractController = getAssetsContractController();
return assetsContractController.getStakedBalanceForChain(
addresses,
networkClientId,
);
},
includeStakedAssets: false,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Not part of this PR to include staked assets in the assets list. When we want to enable them, we can do so.

allowExternalServices: () => {
const { useExternalServices } = initMessenger.call(
'PreferencesController:getState',
);
return useExternalServices;
},
accountsApiChainIds: () => {
const state = initMessenger.call('RemoteFeatureFlagController:getState');
Expand All @@ -59,16 +41,11 @@ export const AccountTrackerControllerInit: ControllerInitFunction<
state?.remoteFeatureFlags?.assetsAccountApiBalances;

return Array.isArray(featureFlagForAccountApiBalances)
? (featureFlagForAccountApiBalances as string[])
? (featureFlagForAccountApiBalances as `0x${string}`[])
: [];
},
});

// Ensure `AccountTrackerController` updates balances after network change.
initMessenger.subscribe('NetworkController:networkDidChange', () => {
controller.updateAccounts();
});
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This needs to happen at controller level or not at all.


return {
persistedStateKey: null,
memStateKey: null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ export const TransactionControllerInit: ControllerInitFunction<
getFlatState,
getPermittedAccounts,
getTransactionMetricsRequest,
updateAccountBalanceForTransactionNetwork,
persistedState,
} = request;

Expand Down Expand Up @@ -191,7 +190,6 @@ export const TransactionControllerInit: ControllerInitFunction<
addTransactionControllerListeners(
initMessenger,
getTransactionMetricsRequest,
updateAccountBalanceForTransactionNetwork,
);

const api = getApi(controller);
Expand Down Expand Up @@ -259,22 +257,9 @@ function getExternalPendingTransactions(
function addTransactionControllerListeners(
initMessenger: TransactionControllerInitMessenger,
getTransactionMetricsRequest: () => TransactionMetricsRequest,
updateAccountBalanceForTransactionNetwork: (
transactionMeta: TransactionMeta,
) => void,
) {
const transactionMetricsRequest = getTransactionMetricsRequest();

initMessenger.subscribe(
'TransactionController:unapprovedTransactionAdded',
updateAccountBalanceForTransactionNetwork,
);

initMessenger.subscribe(
'TransactionController:transactionConfirmed',
updateAccountBalanceForTransactionNetwork,
);

initMessenger.subscribe(
'TransactionController:postTransactionBalanceUpdated',
// TODO: Fix in https://github.com/MetaMask/metamask-extension/issues/31879
Expand Down
5 changes: 3 additions & 2 deletions app/scripts/controller-init/controller-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { SmartTransactionsController } from '@metamask/smart-transactions-contro
import { TransactionController } from '@metamask/transaction-controller';
import { AccountsController } from '@metamask/accounts-controller';
import {
AccountTrackerController,
AssetsContractController,
CurrencyRateController,
DeFiPositionsController,
Expand Down Expand Up @@ -88,7 +89,6 @@ import { NetworkOrderController } from '../controllers/network-order';
import OAuthService from '../services/oauth/oauth-service';
import MetaMetricsController from '../controllers/metametrics-controller';
import { SnapsNameProvider } from '../lib/SnapsNameProvider';
import AccountTrackerController from '../controllers/account-tracker-controller';
import { AppStateController } from '../controllers/app-state-controller';
import { SnapKeyringBuilder } from '../lib/snap-keyring/snap-keyring';
import { SubscriptionService } from '../services/subscription/subscription-service';
Expand Down Expand Up @@ -257,4 +257,5 @@ export type ControllerFlatState = AccountOrderController['state'] &
TokenRatesController['state'] &
NftController['state'] &
NftDetectionController['state'] &
NetworkEnablementController['state'];
NetworkEnablementController['state'] &
AccountTrackerController['state'];
Loading
Loading