Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TokensController: providerConfig -> selectedNetworkClientId #4353

Merged
merged 3 commits into from
Jun 4, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
69 changes: 32 additions & 37 deletions packages/assets-controllers/src/TokensController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,11 @@ import {
ChainId,
ORIGIN_METAMASK,
convertHexToDecimal,
NetworkType,
toHex,
NetworksTicker,
InfuraNetworkType,
} from '@metamask/controller-utils';
import type {
NetworkClientConfiguration,
NetworkClientId,
ProviderConfig,
} from '@metamask/network-controller';
import { defaultState as defaultNetworkState } from '@metamask/network-controller';
import type { PreferencesState } from '@metamask/preferences-controller';
Expand Down Expand Up @@ -61,17 +58,6 @@ const uuidV1Mock = jest.mocked(uuidV1);
const ERC20StandardMock = jest.mocked(ERC20Standard);
const ERC1155StandardMock = jest.mocked(ERC1155Standard);

const SEPOLIA = {
chainId: toHex(11155111),
type: NetworkType.sepolia,
ticker: NetworksTicker.sepolia,
};
const GOERLI = {
chainId: toHex(5),
type: NetworkType.goerli,
ticker: NetworksTicker.goerli,
};

describe('TokensController', () => {
beforeEach(() => {
uuidV1Mock.mockReturnValue('9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d');
Expand Down Expand Up @@ -321,17 +307,17 @@ describe('TokensController', () => {

it('should add token by network', async () => {
await withController(async ({ controller, changeNetwork }) => {
changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
await controller.addToken({
address: '0x01',
symbol: 'bar',
decimals: 2,
});

changeNetwork(GOERLI);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.goerli });
expect(controller.state.tokens).toHaveLength(0);

changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
expect(controller.state.tokens[0]).toStrictEqual({
address: '0x01',
decimals: 2,
Expand Down Expand Up @@ -472,13 +458,13 @@ describe('TokensController', () => {
ContractMock.mockReturnValue(
buildMockEthersERC721Contract({ supportsInterface: false }),
);
changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
await controller.addToken({
address: '0x02',
symbol: 'baz',
decimals: 2,
});
changeNetwork(GOERLI);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.goerli });
await controller.addToken({
address: '0x01',
symbol: 'bar',
Expand All @@ -488,7 +474,7 @@ describe('TokensController', () => {
controller.ignoreTokens(['0x01']);
expect(controller.state.tokens).toHaveLength(0);

changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
expect(controller.state.tokens[0]).toStrictEqual({
address: '0x02',
decimals: 2,
Expand Down Expand Up @@ -544,7 +530,7 @@ describe('TokensController', () => {
...getDefaultPreferencesState(),
selectedAddress,
});
changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
await controller.addToken({
address: '0x01',
symbol: 'bar',
Expand Down Expand Up @@ -591,7 +577,7 @@ describe('TokensController', () => {
...getDefaultPreferencesState(),
selectedAddress,
});
changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
await controller.addToken({
address: '0x01',
symbol: 'bar',
Expand Down Expand Up @@ -629,7 +615,7 @@ describe('TokensController', () => {
...getDefaultPreferencesState(),
selectedAddress: selectedAddress1,
});
changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
await controller.addToken({
address: '0x01',
symbol: 'bar',
Expand All @@ -641,7 +627,7 @@ describe('TokensController', () => {
expect(controller.state.tokens).toHaveLength(0);
expect(controller.state.ignoredTokens).toStrictEqual(['0x01']);

changeNetwork(GOERLI);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.goerli });
expect(controller.state.ignoredTokens).toHaveLength(0);

await controller.addToken({
Expand Down Expand Up @@ -903,7 +889,7 @@ describe('TokensController', () => {
symbol: 'LINK',
decimals: 18,
});
changeNetwork(GOERLI);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.goerli });

await expect(addTokenPromise).rejects.toThrow(
'TokensController Error: Switched networks while adding token',
Expand Down Expand Up @@ -992,9 +978,12 @@ describe('TokensController', () => {
);

// The currently configured chain + address
const CONFIGURED_CHAIN = SEPOLIA;
const CONFIGURED_CHAIN = ChainId.sepolia;
const CONFIGURED_NETWORK_CLIENT_ID = InfuraNetworkType.sepolia;
const CONFIGURED_ADDRESS = '0xConfiguredAddress';
changeNetwork(CONFIGURED_CHAIN);
changeNetwork({
selectedNetworkClientId: CONFIGURED_NETWORK_CLIENT_ID,
});
triggerPreferencesStateChange({
...getDefaultPreferencesState(),
selectedAddress: CONFIGURED_ADDRESS,
Expand Down Expand Up @@ -1046,12 +1035,12 @@ describe('TokensController', () => {

// Expect tokens under the correct chain + account
expect(controller.state.allTokens).toStrictEqual({
[CONFIGURED_CHAIN.chainId]: {
[CONFIGURED_CHAIN]: {
[CONFIGURED_ADDRESS]: [addedTokenConfiguredAccount],
},
});
expect(controller.state.allDetectedTokens).toStrictEqual({
[CONFIGURED_CHAIN.chainId]: {
[CONFIGURED_CHAIN]: {
[CONFIGURED_ADDRESS]: [detectedTokenConfiguredAccount],
},
[OTHER_CHAIN]: {
Expand Down Expand Up @@ -1939,7 +1928,7 @@ describe('TokensController', () => {
buildMockEthersERC721Contract({ supportsInterface: false }),
);

changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
await controller.addToken({
address: '0x01',
symbol: 'A',
Expand All @@ -1952,7 +1941,7 @@ describe('TokensController', () => {
});
const initialTokensFirst = controller.state.tokens;

changeNetwork(GOERLI);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.goerli });
await controller.addToken({
address: '0x03',
symbol: 'C',
Expand Down Expand Up @@ -2009,10 +1998,10 @@ describe('TokensController', () => {
},
]);

changeNetwork(SEPOLIA);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.sepolia });
expect(initialTokensFirst).toStrictEqual(controller.state.tokens);

changeNetwork(GOERLI);
changeNetwork({ selectedNetworkClientId: InfuraNetworkType.goerli });
expect(initialTokensSecond).toStrictEqual(controller.state.tokens);
});
});
Expand Down Expand Up @@ -2179,7 +2168,9 @@ type WithControllerCallback<ReturnValue> = ({
triggerPreferencesStateChange,
}: {
controller: TokensController;
changeNetwork: (providerConfig: ProviderConfig) => void;
changeNetwork: (networkControllerState: {
selectedNetworkClientId: NetworkClientId;
}) => void;
messenger: UnrestrictedMessenger;
approvalController: ApprovalController;
triggerPreferencesStateChange: (state: PreferencesState) => void;
Expand Down Expand Up @@ -2259,10 +2250,14 @@ async function withController<ReturnValue>(
messenger.publish('PreferencesController:stateChange', state, []);
};

const changeNetwork = (providerConfig: ProviderConfig) => {
const changeNetwork = ({
selectedNetworkClientId,
}: {
selectedNetworkClientId: NetworkClientId;
}) => {
messenger.publish('NetworkController:networkDidChange', {
...defaultNetworkState,
providerConfig,
selectedNetworkClientId,
});
};

Expand Down
11 changes: 8 additions & 3 deletions packages/assets-controllers/src/TokensController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,16 @@ export class TokensController extends BaseController<
* Handles the event when the network changes.
*
* @param networkState - The changed network state.
* @param networkState.providerConfig - RPC URL and network name provider settings of the currently connected network
* @param networkState.selectedNetworkClientId - The ID of the currently
* selected network client.
*/
#onNetworkDidChange({ providerConfig }: NetworkState) {
#onNetworkDidChange({ selectedNetworkClientId }: NetworkState) {
const selectedNetworkClient = this.messagingSystem.call(
'NetworkController:getNetworkClientById',
selectedNetworkClientId,
);
const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state;
const { chainId } = providerConfig;
const { chainId } = selectedNetworkClient.configuration;
this.#abortController.abort();
this.#abortController = new AbortController();
this.#chainId = chainId;
Expand Down
Loading