Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
7 changes: 6 additions & 1 deletion app/core/Engine/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import {
NativeEventSubscription,
} from 'react-native';
///: END:ONLY_INCLUDE_IF
import { CodefiTokenPricesServiceV2 } from '@metamask/assets-controllers';
import {
CodefiTokenPricesServiceV2,
TokenListService,
} from '@metamask/assets-controllers';
import { AccountsController } from '@metamask/accounts-controller';
import {
KeyringController,
Expand Down Expand Up @@ -285,6 +288,7 @@ export class Engine {
this.controllerMessenger = getRootExtendedMessenger();

const codefiTokenApiV2 = new CodefiTokenPricesServiceV2();
const tokenListService = new TokenListService();
Comment thread
juanmigdr marked this conversation as resolved.

const initRequest = {
getState: () => store.getState(),
Expand All @@ -296,6 +300,7 @@ export class Engine {
initialKeyringState: keyringState,
qrKeyringScanner: this.qrKeyringScanner,
codefiTokenApiV2,
tokenListService,
};
const { messengerClientsByName } = initMessengerClients({
initFunctions: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ describe('TokenDetectionControllerInit', () => {
messenger: expect.any(Object),
disabled: false,
getBalancesInSingleCall: expect.any(Function),
tokenListService: expect.any(Object),
useTokenDetection: expect.any(Function),
useExternalServices: expect.any(Function),
trackMetaMetricsEvent: expect.any(Function),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ export const tokenDetectionControllerInit: MessengerClientInitFunction<
TokenDetectionController,
TokenDetectionControllerMessenger,
TokenDetectionControllerInitMessenger
> = ({ controllerMessenger, initMessenger, getMessengerClient, getState }) => {
> = ({
controllerMessenger,
initMessenger,
getMessengerClient,
getState,
tokenListService,
}) => {
const networkController = getMessengerClient('NetworkController');

const getBalancesInSingleCall = (
Expand All @@ -44,6 +50,7 @@ export const tokenDetectionControllerInit: MessengerClientInitFunction<
messenger: controllerMessenger,
disabled: false,
getBalancesInSingleCall,
tokenListService,
useTokenDetection: () => selectUseTokenDetection(getState()),
useExternalServices: () => selectBasicFunctionalityEnabled(getState()),
trackMetaMetricsEvent: () => {
Expand Down
1 change: 1 addition & 0 deletions app/core/Engine/controllers/tokens-controller-init.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ describe('tokensControllerInit', () => {
state: undefined,
chainId: '0x1',
provider: {},
tokenListService: expect.any(Object),
});
});
});
2 changes: 2 additions & 0 deletions app/core/Engine/controllers/tokens-controller-init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export const tokensControllerInit: MessengerClientInitFunction<
initMessenger,
persistedState,
getMessengerClient,
tokenListService,
}) => {
const networkController = getMessengerClient('NetworkController');
const { provider } =
Expand All @@ -35,6 +36,7 @@ export const tokensControllerInit: MessengerClientInitFunction<
messenger: controllerMessenger,
chainId: getGlobalChainId(networkController),
provider,
tokenListService,
});

return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ export function getTokenDetectionControllerMessenger(
'NetworkController:getState',
'TokensController:getState',
'TokensController:addDetectedTokens',
'TokenListController:getState',
'PreferencesController:getState',
'TokensController:addTokens',
'NetworkController:findNetworkClientIdByChainId',
Expand All @@ -49,7 +48,6 @@ export function getTokenDetectionControllerMessenger(
'KeyringController:lock',
'KeyringController:unlock',
'NetworkController:networkDidChange',
'TokenListController:stateChange',
'PreferencesController:stateChange',
'TransactionController:transactionConfirmed',
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ export function getTokensControllerMessenger(
events: [
'NetworkController:networkDidChange',
'NetworkController:stateChange',
'TokenListController:stateChange',
'AccountsController:selectedEvmAccountChange',
'KeyringController:accountRemoved',
],
Expand Down
10 changes: 10 additions & 0 deletions app/core/Engine/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import {
TokenListControllerActions,
TokenListControllerEvents,
TokenListState,
TokenListService,
TokensController,
TokensControllerActions,
TokensControllerEvents,
Expand Down Expand Up @@ -1045,6 +1046,14 @@ export type MessengerClientInitRequest<
*/
codefiTokenApiV2: CodefiTokenPricesServiceV2;

/**
* Shared token list service instance.
* Owns a TanStack Query cache (4-hour stale time) so that both
* TokenDetectionController and TokensController share the same in-memory
* cache without redundant network requests.
*/
tokenListService: TokenListService;

/**
* Controller messenger for the client.
* Used to generate controller for each controller.
Expand Down Expand Up @@ -1150,6 +1159,7 @@ export interface InitMessengerClientsFunctionRequest {
initialKeyringState?: KeyringControllerState | null;
qrKeyringScanner: QrKeyringDeferredPromiseBridge;
codefiTokenApiV2: CodefiTokenPricesServiceV2;
tokenListService: TokenListService;
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
removeAccount: (address: string) => Promise<void>;
///: END:ONLY_INCLUDE_IF
Expand Down
9 changes: 8 additions & 1 deletion app/core/Engine/utils/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import {
MessengerClientInitRequest,
} from '../types';
import { QrKeyringDeferredPromiseBridge } from '@metamask/eth-qr-keyring';
import { CodefiTokenPricesServiceV2 } from '@metamask/assets-controllers';
import {
CodefiTokenPricesServiceV2,
TokenListService,
} from '@metamask/assets-controllers';

/**
* Build a mock for the MessengerClientInitRequest.
Expand All @@ -20,6 +23,10 @@ export function buildMessengerClientInitRequestMock(
): jest.Mocked<MessengerClientInitRequest<ControllerMessenger>> {
return {
codefiTokenApiV2: jest.fn() as unknown as CodefiTokenPricesServiceV2,
tokenListService: {
fetchTokensByChainId: jest.fn(),
destroy: jest.fn(),
} as unknown as TokenListService,
controllerMessenger: controllerMessenger as unknown as ControllerMessenger,
getMessengerClient: jest.fn(),
getGlobalChainId: jest.fn(),
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@
"@metamask/app-metadata-controller": "^2.0.0",
"@metamask/approval-controller": "^9.0.0",
"@metamask/assets-controller": "^6.2.1",
"@metamask/assets-controllers": "^105.0.0",
"@metamask/assets-controllers": "^106.0.0",
"@metamask/authenticated-user-storage": "^1.0.0",
"@metamask/base-controller": "^9.0.1",
"@metamask/bitcoin-wallet-snap": "^1.10.1",
Expand Down
59 changes: 58 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7975,6 +7975,63 @@ __metadata:
languageName: node
linkType: hard

"@metamask/assets-controllers@npm:^106.0.0":
version: 106.0.0
resolution: "@metamask/assets-controllers@npm:106.0.0"
dependencies:
"@ethereumjs/util": "npm:^9.1.0"
"@ethersproject/abi": "npm:^5.7.0"
"@ethersproject/address": "npm:^5.7.0"
"@ethersproject/bignumber": "npm:^5.7.0"
"@ethersproject/contracts": "npm:^5.7.0"
"@ethersproject/providers": "npm:^5.7.0"
"@metamask/abi-utils": "npm:^2.0.3"
"@metamask/account-tree-controller": "npm:^7.2.0"
"@metamask/accounts-controller": "npm:^38.0.0"
"@metamask/approval-controller": "npm:^9.0.1"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/contract-metadata": "npm:^2.4.0"
"@metamask/controller-utils": "npm:^11.20.0"
"@metamask/core-backend": "npm:^6.2.1"
"@metamask/eth-query": "npm:^4.0.0"
"@metamask/keyring-api": "npm:^23.1.0"
"@metamask/keyring-controller": "npm:^25.4.0"
"@metamask/messenger": "npm:^1.2.0"
"@metamask/metamask-eth-abis": "npm:^3.1.1"
"@metamask/multichain-account-service": "npm:^8.0.1"
"@metamask/network-controller": "npm:^30.1.0"
"@metamask/network-enablement-controller": "npm:^5.1.0"
"@metamask/permission-controller": "npm:^13.0.0"
"@metamask/phishing-controller": "npm:^17.1.1"
"@metamask/polling-controller": "npm:^16.0.4"
"@metamask/preferences-controller": "npm:^23.1.0"
"@metamask/profile-sync-controller": "npm:^28.0.2"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/snaps-controllers": "npm:^19.0.0"
"@metamask/snaps-sdk": "npm:^11.0.0"
"@metamask/snaps-utils": "npm:^12.1.2"
"@metamask/storage-service": "npm:^1.0.1"
"@metamask/transaction-controller": "npm:^65.1.0"
"@metamask/utils": "npm:^11.9.0"
"@tanstack/query-core": "npm:^5.62.16"
"@types/bn.js": "npm:^5.1.5"
"@types/uuid": "npm:^8.3.0"
async-mutex: "npm:^0.5.0"
bitcoin-address-validation: "npm:^2.2.3"
bn.js: "npm:^5.2.1"
immer: "npm:^9.0.6"
lodash: "npm:^4.17.21"
multiformats: "npm:^9.9.0"
reselect: "npm:^5.1.1"
single-call-balance-checker-abi: "npm:^1.0.0"
uuid: "npm:^8.3.2"
peerDependencies:
"@metamask/providers": ^22.0.0
webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0
checksum: 10/85538e7c8c4f98ddbd843c8c55bcfacc05b70f0e1708aea6602a7408c381cb31c3c48a93070db56993d2f12bbcfafd58a4741c1a132a91a82e0e9d08889f8485
languageName: node
linkType: hard

"@metamask/auth-network-utils@npm:^0.3.0":
version: 0.3.1
resolution: "@metamask/auth-network-utils@npm:0.3.1"
Expand Down Expand Up @@ -35628,7 +35685,7 @@ __metadata:
"@metamask/app-metadata-controller": "npm:^2.0.0"
"@metamask/approval-controller": "npm:^9.0.0"
"@metamask/assets-controller": "npm:^6.2.1"
"@metamask/assets-controllers": "npm:^105.0.0"
"@metamask/assets-controllers": "npm:^106.0.0"
"@metamask/authenticated-user-storage": "npm:^1.0.0"
"@metamask/auto-changelog": "npm:^5.3.0"
"@metamask/base-controller": "npm:^9.0.1"
Expand Down
Loading