Skip to content
Draft
Show file tree
Hide file tree
Changes from 18 commits
Commits
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
18 changes: 0 additions & 18 deletions .storybook/test-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -792,20 +792,6 @@ 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' },
Expand All @@ -829,10 +815,6 @@ const state = {
},
},
},
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
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,
},
AddressBookController: {
addressBook: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
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 Down
70 changes: 26 additions & 44 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: true,
allowExternalServices: () => {
const { useExternalServices } = initMessenger.call(
'PreferencesController:getState',
);
return useExternalServices;
},
accountsApiChainIds: () => {
const state = initMessenger.call('RemoteFeatureFlagController:getState');
Expand All @@ -59,15 +41,15 @@ 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();
});
// initMessenger.subscribe('NetworkController:networkDidChange', () => {
// controller.updateAccounts();
// });

return {
persistedStateKey: null,
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'];
Original file line number Diff line number Diff line change
@@ -1,20 +1,34 @@
import { Messenger } from '@metamask/base-controller';
import {
NetworkControllerGetSelectedNetworkClientAction,
NetworkControllerGetNetworkClientByIdAction,
NetworkControllerGetStateAction,
NetworkControllerNetworkDidChangeEvent,
} from '@metamask/network-controller';
import { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';
import { PreferencesControllerGetStateAction } from '../../controllers/preferences-controller';
import {
AllowedActions,
AllowedEvents,
} from '../../controllers/account-tracker-controller';
AccountsControllerGetSelectedAccountAction,
AccountsControllerListAccountsAction,
AccountsControllerSelectedAccountChangeEvent,
AccountsControllerSelectedEvmAccountChangeEvent,
} from '@metamask/accounts-controller';
import { PreferencesControllerGetStateAction } from '@metamask/preferences-controller';
import { PreferencesControllerGetStateAction as InternalPreferencesControllerGetStateAction } from '../../controllers/preferences-controller';

export type AccountTrackerControllerMessenger = ReturnType<
typeof getAccountTrackerControllerMessenger
>;

type AllowedActions =
| AccountsControllerGetSelectedAccountAction
| AccountsControllerListAccountsAction
| NetworkControllerGetNetworkClientByIdAction
| NetworkControllerGetStateAction
| PreferencesControllerGetStateAction;

type AllowedEvents =
| AccountsControllerSelectedAccountChangeEvent
| AccountsControllerSelectedEvmAccountChangeEvent;

/**
* Create a messenger restricted to the allowed actions and events of the
* account tracker controller.
Expand All @@ -29,25 +43,21 @@ export function getAccountTrackerControllerMessenger(
name: 'AccountTrackerController',
allowedActions: [
'AccountsController:getSelectedAccount',
'NetworkController:getState',
'AccountsController:listAccounts',
'NetworkController:getNetworkClientById',
'OnboardingController:getState',
'NetworkController:getState',
'PreferencesController:getState',
'RemoteFeatureFlagController:getState',
],
allowedEvents: [
'AccountsController:selectedAccountChange',
'AccountsController:selectedEvmAccountChange',
'OnboardingController:stateChange',
'KeyringController:accountRemoved',
],
});
}

type AllowedInitializationActions =
| NetworkControllerGetSelectedNetworkClientAction
| NetworkControllerGetStateAction
| RemoteFeatureFlagControllerGetStateAction
| PreferencesControllerGetStateAction;
| InternalPreferencesControllerGetStateAction;

type AllowedInitializationEvents = NetworkControllerNetworkDidChangeEvent;

Expand All @@ -71,8 +81,6 @@ export function getAccountTrackerControllerInitMessenger(
return messenger.getRestricted({
name: 'AccountTrackerControllerInit',
allowedActions: [
'NetworkController:getSelectedNetworkClient',
'NetworkController:getState',
'RemoteFeatureFlagController:getState',
'PreferencesController:getState',
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import { Messenger } from '@metamask/base-controller';
import {
AllowedActions,
AllowedEvents,
} from '../../controllers/account-tracker-controller';
import { AppStateControllerRequestQrCodeScanAction } from '../../controllers/app-state-controller';

export type KeyringControllerMessenger = ReturnType<
Expand All @@ -17,7 +13,7 @@ export type KeyringControllerMessenger = ReturnType<
* messenger.
*/
export function getKeyringControllerMessenger(
messenger: Messenger<AllowedActions, AllowedEvents>,
messenger: Messenger<never, never>,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

It was using the wrong types from a different controller. KeyringController does not require any AllowedActions or AllowedEvents

) {
return messenger.getRestricted({
name: 'KeyringController',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ import {
import {
AccountTrackerUpdateNativeBalancesAction,
AccountTrackerUpdateStakedBalancesAction,
AccountTrackerControllerGetStateAction,
TokensControllerState,
type TokenDetectionControllerAddDetectedTokensViaWsAction,
} from '@metamask/assets-controllers';
import { KeyringControllerAccountRemovedEvent } from '@metamask/keyring-controller';
import { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';
import type {
AccountActivityServiceStatusChangedEvent,
AccountActivityServiceBalanceUpdatedEvent,
} from '@metamask/core-backend';
import type { TokenDetectionControllerAddDetectedTokensViaWsAction } from '@metamask/assets-controllers';
import { AccountTrackerControllerGetStateAction } from '../../controllers/account-tracker-controller';
import {
PreferencesControllerGetStateAction,
PreferencesControllerStateChangeEvent,
Expand Down
1 change: 1 addition & 0 deletions app/scripts/controller-init/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ type ControllerMessengerCallback = (
) => BaseRestrictedControllerMessenger;

export type ControllersToInitialize =
| 'AccountTrackerController'
| 'AuthenticationController'
| 'CronjobController'
| 'DeFiPositionsController'
Expand Down
Loading
Loading