Skip to content

Commit

Permalink
Merge branch 'main' into remove-provider-config-from-token-list-contr…
Browse files Browse the repository at this point in the history
…oller
  • Loading branch information
mcmire authored Jun 4, 2024
2 parents 45a90a6 + 73953b8 commit 36ecf0d
Show file tree
Hide file tree
Showing 4 changed files with 272 additions and 173 deletions.
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

0 comments on commit 36ecf0d

Please sign in to comment.