From c11fb0a734ce63167fb93cafcd050a29faab10f8 Mon Sep 17 00:00:00 2001 From: Elliot Winkler Date: Thu, 4 May 2023 16:13:42 -0600 Subject: [PATCH 1/2] NetworkController: Remove providerConfigChange event Despite its name, the `providerConfigChange` event in NetworkController doesn't get emitted whenever the `providerConfig` property in state is changed. Rather, it gets updated as the very last step in `lookupNetwork`. This method is called: - When the provider is initialized - When the network is switched - When the network is rolled back to the previous setting - When `resetConnection` is called `lookupNetwork` can also be called on its own. If this were not enough, we already provide a way to listen for changes to a particular property in state: by passing a selector function to the `subscribe` method on the controller messenger. So, this commit removes the `providerConfigChange` event from NetworkController. Instead of the following code: ``` messenger.subscribe( 'NetworkController:providerConfigChange', (providerConfig) => { // do something with the providerConfig }, ) ``` consumers should be able to say: ``` messenger.subscribe( 'NetworkController:stateChange', (providerConfig) => { // do something with the providerConfig }, (networkControllerState) => networkControllerState.providerConfig, ) ``` --- .../src/TokenDetectionController.test.ts | 7 +- .../src/TokenListController.test.ts | 99 +++++-- .../src/TokenListController.ts | 42 +-- .../src/GasFeeController.test.ts | 25 +- .../src/GasFeeController.ts | 71 ++--- .../src/NetworkController.ts | 19 +- .../tests/NetworkController.test.ts | 266 +----------------- 7 files changed, 133 insertions(+), 396 deletions(-) diff --git a/packages/assets-controllers/src/TokenDetectionController.test.ts b/packages/assets-controllers/src/TokenDetectionController.test.ts index ea755b54dd..c541cc0f07 100644 --- a/packages/assets-controllers/src/TokenDetectionController.test.ts +++ b/packages/assets-controllers/src/TokenDetectionController.test.ts @@ -2,7 +2,6 @@ import * as sinon from 'sinon'; import nock from 'nock'; import { BN } from 'ethereumjs-util'; import { - NetworkControllerProviderConfigChangeEvent, NetworkControllerStateChangeEvent, defaultState as defaultNetworkState, NetworkState, @@ -89,9 +88,7 @@ const sampleTokenB: Token = { type MainControllerMessenger = ControllerMessenger< GetTokenListState, - | TokenListStateChange - | NetworkControllerProviderConfigChangeEvent - | NetworkControllerStateChangeEvent + TokenListStateChange | NetworkControllerStateChangeEvent >; const getControllerMessenger = (): MainControllerMessenger => { @@ -106,7 +103,7 @@ const setupTokenListController = ( allowedActions: [], allowedEvents: [ 'TokenListController:stateChange', - 'NetworkController:providerConfigChange', + 'NetworkController:stateChange', ], }); diff --git a/packages/assets-controllers/src/TokenListController.test.ts b/packages/assets-controllers/src/TokenListController.test.ts index 933bdcacd9..875f39d7eb 100644 --- a/packages/assets-controllers/src/TokenListController.test.ts +++ b/packages/assets-controllers/src/TokenListController.test.ts @@ -2,8 +2,9 @@ import * as sinon from 'sinon'; import nock from 'nock'; import { ControllerMessenger } from '@metamask/base-controller'; import { - NetworkControllerProviderConfigChangeEvent, + NetworkControllerStateChangeEvent, NetworkState, + NetworkStatus, ProviderConfig, } from '@metamask/network-controller'; import { NetworksChainId, NetworkType } from '@metamask/controller-utils'; @@ -474,7 +475,7 @@ const expiredCacheExistingState: TokenListState = { type MainControllerMessenger = ControllerMessenger< GetTokenListState, - TokenListStateChange | NetworkControllerProviderConfigChangeEvent + TokenListStateChange | NetworkControllerStateChangeEvent >; const getControllerMessenger = (): MainControllerMessenger => { @@ -489,13 +490,33 @@ const getRestrictedMessenger = ( allowedActions: [], allowedEvents: [ 'TokenListController:stateChange', - 'NetworkController:providerConfigChange', + 'NetworkController:stateChange', ], }); return messenger; }; +/** + * Builds an object that satisfies the NetworkState shape using the given + * provider config. This can be used to return a complete value for the + * `NetworkController:stateChange` event. + * + * @param providerConfig - The provider config to use. + * @returns A complete state object for NetworkController. + */ +function buildNetworkControllerStateWithProviderConfig( + providerConfig: ProviderConfig, +): NetworkState { + return { + providerConfig, + networkId: '1', + networkStatus: NetworkStatus.Available, + networkDetails: {}, + networkConfigurations: {}, + }; +} + describe('TokenListController', () => { afterEach(() => { nock.cleanAll(); @@ -519,7 +540,7 @@ describe('TokenListController', () => { controller.destroy(); controllerMessenger.clearEventSubscriptions( - 'NetworkController:providerConfigChange', + 'NetworkController:stateChange', ); }); @@ -568,7 +589,7 @@ describe('TokenListController', () => { controller.destroy(); controllerMessenger.clearEventSubscriptions( - 'NetworkController:providerConfigChange', + 'NetworkController:stateChange', ); }); @@ -613,9 +634,7 @@ describe('TokenListController', () => { const controllerMessenger = getControllerMessenger(); const messenger = getRestrictedMessenger(controllerMessenger); - let onNetworkStateChangeCallback!: ( - state: NetworkState | ProviderConfig, - ) => void; + let onNetworkStateChangeCallback!: (state: NetworkState) => void; const controller = new TokenListController({ chainId: NetworksChainId.mainnet, onNetworkStateChange: (cb) => (onNetworkStateChangeCallback = cb), @@ -628,10 +647,12 @@ describe('TokenListController', () => { expect(controller.state.tokenList).toStrictEqual( sampleSingleChainState.tokenList, ); - onNetworkStateChangeCallback({ - chainId: NetworksChainId.goerli, - type: NetworkType.goerli, - }); + onNetworkStateChangeCallback( + buildNetworkControllerStateWithProviderConfig({ + chainId: NetworksChainId.goerli, + type: NetworkType.goerli, + }), + ); await new Promise((resolve) => setTimeout(() => resolve(), 500)); expect(controller.state.tokenList).toStrictEqual({}); @@ -1019,10 +1040,14 @@ describe('TokenListController', () => { sampleTwoChainState.tokensChainsCache[NetworksChainId.mainnet].data, ); - controllerMessenger.publish('NetworkController:providerConfigChange', { - type: NetworkType.goerli, - chainId: NetworksChainId.goerli, - }); + controllerMessenger.publish( + 'NetworkController:stateChange', + buildNetworkControllerStateWithProviderConfig({ + type: NetworkType.goerli, + chainId: NetworksChainId.goerli, + }), + [], + ); await new Promise((resolve) => setTimeout(() => resolve(), 500)); @@ -1033,11 +1058,15 @@ describe('TokenListController', () => { sampleTwoChainState.tokensChainsCache[NetworksChainId.mainnet].data, ); - controllerMessenger.publish('NetworkController:providerConfigChange', { - type: NetworkType.rpc, - chainId: '56', - rpcUrl: 'http://localhost:8545', - }); + controllerMessenger.publish( + 'NetworkController:stateChange', + buildNetworkControllerStateWithProviderConfig({ + type: NetworkType.rpc, + chainId: '56', + rpcUrl: 'http://localhost:8545', + }), + [], + ); await new Promise((resolve) => setTimeout(() => resolve(), 500)); expect(controller.state.tokenList).toStrictEqual( @@ -1094,10 +1123,14 @@ describe('TokenListController', () => { interval: 100, }); await controller.start(); - controllerMessenger.publish('NetworkController:providerConfigChange', { - type: NetworkType.mainnet, - chainId: NetworksChainId.mainnet, - }); + controllerMessenger.publish( + 'NetworkController:stateChange', + buildNetworkControllerStateWithProviderConfig({ + type: NetworkType.mainnet, + chainId: NetworksChainId.mainnet, + }), + [], + ); expect(controller.state).toStrictEqual({ tokenList: {}, @@ -1130,16 +1163,20 @@ describe('TokenListController', () => { messenger.clearEventSubscriptions('TokenListController:stateChange'); controller.destroy(); controllerMessenger.clearEventSubscriptions( - 'NetworkController:providerConfigChange', + 'NetworkController:stateChange', ); resolve(); }); - controllerMessenger.publish('NetworkController:providerConfigChange', { - type: NetworkType.rpc, - chainId: '56', - rpcUrl: 'http://localhost:8545', - }); + controllerMessenger.publish( + 'NetworkController:stateChange', + buildNetworkControllerStateWithProviderConfig({ + type: NetworkType.rpc, + chainId: '56', + rpcUrl: 'http://localhost:8545', + }), + [], + ); }); }); }); diff --git a/packages/assets-controllers/src/TokenListController.ts b/packages/assets-controllers/src/TokenListController.ts index c6d57c5691..6a9d014c1b 100644 --- a/packages/assets-controllers/src/TokenListController.ts +++ b/packages/assets-controllers/src/TokenListController.ts @@ -7,9 +7,8 @@ import { } from '@metamask/base-controller'; import { safelyExecute } from '@metamask/controller-utils'; import { - NetworkControllerProviderConfigChangeEvent, + NetworkControllerStateChangeEvent, NetworkState, - ProviderConfig, } from '@metamask/network-controller'; import { isTokenListSupportedForNetwork, @@ -62,10 +61,9 @@ export type GetTokenListState = { type TokenListMessenger = RestrictedControllerMessenger< typeof name, GetTokenListState, - TokenListStateChange | NetworkControllerProviderConfigChangeEvent, + TokenListStateChange | NetworkControllerStateChangeEvent, never, - | TokenListStateChange['type'] - | NetworkControllerProviderConfigChangeEvent['type'] + TokenListStateChange['type'] | NetworkControllerStateChangeEvent['type'] >; const metadata = { @@ -124,7 +122,7 @@ export class TokenListController extends BaseControllerV2< chainId: string; preventPollingOnNetworkRestart?: boolean; onNetworkStateChange?: ( - listener: (networkState: NetworkState | ProviderConfig) => void, + listener: (networkState: NetworkState) => void, ) => void; interval?: number; cacheRefreshThreshold?: number; @@ -143,40 +141,30 @@ export class TokenListController extends BaseControllerV2< this.updatePreventPollingOnNetworkRestart(preventPollingOnNetworkRestart); this.abortController = new WhatwgAbortController(); if (onNetworkStateChange) { - onNetworkStateChange(async (networkStateOrProviderConfig) => { - // this check for "provider" is for testing purposes, since in the extension this callback will receive - // an object typed as NetworkState but within repo we can only simulate as if the callback receives an - // object typed as ProviderConfig - if ('providerConfig' in networkStateOrProviderConfig) { - await this.#onNetworkStateChangeCallback( - networkStateOrProviderConfig.providerConfig, - ); - } else { - await this.#onNetworkStateChangeCallback( - networkStateOrProviderConfig, - ); - } + onNetworkStateChange(async (networkControllerState) => { + await this.#onNetworkControllerStateChange(networkControllerState); }); } else { this.messagingSystem.subscribe( - 'NetworkController:providerConfigChange', - async (providerConfig) => { - await this.#onNetworkStateChangeCallback(providerConfig); + 'NetworkController:stateChange', + async (networkControllerState) => { + await this.#onNetworkControllerStateChange(networkControllerState); }, ); } } /** - * Updates state and restart polling when updates are received through NetworkController subscription. + * Updates state and restarts polling on changes to the network controller + * state. * - * @param providerConfig - the configuration for a provider containing critical network info. + * @param networkControllerState - The updated network controller state. */ - async #onNetworkStateChangeCallback(providerConfig: ProviderConfig) { - if (this.chainId !== providerConfig.chainId) { + async #onNetworkControllerStateChange(networkControllerState: NetworkState) { + if (this.chainId !== networkControllerState.providerConfig.chainId) { this.abortController.abort(); this.abortController = new WhatwgAbortController(); - this.chainId = providerConfig.chainId; + this.chainId = networkControllerState.providerConfig.chainId; if (this.state.preventPollingOnNetworkRestart) { this.clearingTokenListData(); } else { diff --git a/packages/gas-fee-controller/src/GasFeeController.test.ts b/packages/gas-fee-controller/src/GasFeeController.test.ts index edfe15b8f4..342edb44ca 100644 --- a/packages/gas-fee-controller/src/GasFeeController.test.ts +++ b/packages/gas-fee-controller/src/GasFeeController.test.ts @@ -3,9 +3,8 @@ import * as sinon from 'sinon'; import { ControllerMessenger } from '@metamask/base-controller'; import { NetworkController, - NetworkControllerGetEthQueryAction, - NetworkControllerGetProviderConfigAction, - NetworkControllerProviderConfigChangeEvent, + NetworkControllerGetStateAction, + NetworkControllerStateChangeEvent, NetworkState, } from '@metamask/network-controller'; import EthQuery from 'eth-query'; @@ -40,10 +39,8 @@ const mockedDetermineGasFeeCalculations = const name = 'GasFeeController'; type MainControllerMessenger = ControllerMessenger< - | GetGasFeeState - | NetworkControllerGetProviderConfigAction - | NetworkControllerGetEthQueryAction, - GasFeeStateChange | NetworkControllerProviderConfigChangeEvent + GetGasFeeState | NetworkControllerGetStateAction, + GasFeeStateChange | NetworkControllerStateChangeEvent >; const getControllerMessenger = (): MainControllerMessenger => { @@ -61,11 +58,8 @@ const setupNetworkController = async ({ }) => { const restrictedMessenger = unrestrictedMessenger.getRestricted({ name: 'NetworkController', - allowedEvents: ['NetworkController:providerConfigChange'], - allowedActions: [ - 'NetworkController:getProviderConfig', - 'NetworkController:getEthQuery', - ], + allowedActions: ['NetworkController:getState'], + allowedEvents: ['NetworkController:stateChange'], }); const networkController = new NetworkController({ @@ -89,11 +83,8 @@ const getRestrictedMessenger = ( ) => { const messenger = controllerMessenger.getRestricted({ name, - allowedActions: [ - 'NetworkController:getProviderConfig', - 'NetworkController:getEthQuery', - ], - allowedEvents: ['NetworkController:providerConfigChange'], + allowedActions: ['NetworkController:getState'], + allowedEvents: ['NetworkController:stateChange'], }); return messenger; diff --git a/packages/gas-fee-controller/src/GasFeeController.ts b/packages/gas-fee-controller/src/GasFeeController.ts index 6611d9e5d2..de68aa7849 100644 --- a/packages/gas-fee-controller/src/GasFeeController.ts +++ b/packages/gas-fee-controller/src/GasFeeController.ts @@ -8,9 +8,8 @@ import { } from '@metamask/base-controller'; import { safelyExecute } from '@metamask/controller-utils'; import type { - NetworkControllerGetEthQueryAction, - NetworkControllerGetProviderConfigAction, - NetworkControllerProviderConfigChangeEvent, + NetworkControllerGetStateAction, + NetworkControllerStateChangeEvent, NetworkState, ProviderProxy, } from '@metamask/network-controller'; @@ -212,13 +211,10 @@ export type GetGasFeeState = { type GasFeeMessenger = RestrictedControllerMessenger< typeof name, - | GetGasFeeState - | NetworkControllerGetProviderConfigAction - | NetworkControllerGetEthQueryAction, - GasFeeStateChange | NetworkControllerProviderConfigChangeEvent, - | NetworkControllerGetProviderConfigAction['type'] - | NetworkControllerGetEthQueryAction['type'], - NetworkControllerProviderConfigChangeEvent['type'] + GetGasFeeState | NetworkControllerGetStateAction, + GasFeeStateChange | NetworkControllerStateChangeEvent, + NetworkControllerGetStateAction['type'], + NetworkControllerStateChangeEvent['type'] >; const defaultState: GasFeeState = { @@ -259,6 +255,8 @@ export class GasFeeController extends BaseControllerV2< private clientId?: string; + #getProvider: () => ProviderProxy; + /** * Creates a GasFeeController instance. * @@ -319,48 +317,30 @@ export class GasFeeController extends BaseControllerV2< this.pollTokens = new Set(); this.getCurrentNetworkEIP1559Compatibility = getCurrentNetworkEIP1559Compatibility; - this.getCurrentNetworkLegacyGasAPICompatibility = getCurrentNetworkLegacyGasAPICompatibility; - this.getCurrentAccountEIP1559Compatibility = getCurrentAccountEIP1559Compatibility; + this.#getProvider = getProvider; this.EIP1559APIEndpoint = EIP1559APIEndpoint; this.legacyAPIEndpoint = legacyAPIEndpoint; this.clientId = clientId; + + this.ethQuery = new EthQuery(this.#getProvider()); + if (onNetworkStateChange && getChainId) { - const initialProvider = getProvider(); - this.ethQuery = new EthQuery(initialProvider); this.currentChainId = getChainId(); - onNetworkStateChange(async () => { - const newProvider = getProvider(); - const newChainId = getChainId(); - this.ethQuery = new EthQuery(newProvider); - if (this.currentChainId !== newChainId) { - this.currentChainId = newChainId; - await this.resetPolling(); - } + onNetworkStateChange(async (networkControllerState) => { + await this.#onNetworkControllerStateChange(networkControllerState); }); } else { - const providerConfig = this.messagingSystem.call( - 'NetworkController:getProviderConfig', - ); - this.currentChainId = providerConfig.chainId; - this.ethQuery = this.messagingSystem.call( - 'NetworkController:getEthQuery', - ); - + this.currentChainId = this.messagingSystem.call( + 'NetworkController:getState', + ).providerConfig.chainId; this.messagingSystem.subscribe( - 'NetworkController:providerConfigChange', - async (newProviderConfig) => { - this.ethQuery = this.messagingSystem.call( - 'NetworkController:getEthQuery', - ); - - if (this.currentChainId !== newProviderConfig.chainId) { - this.currentChainId = newProviderConfig.chainId; - await this.resetPolling(); - } + 'NetworkController:stateChange', + async (networkControllerState) => { + await this.#onNetworkControllerStateChange(networkControllerState); }, ); } @@ -535,6 +515,17 @@ export class GasFeeController extends BaseControllerV2< this.state.gasFeeEstimates, ); } + + async #onNetworkControllerStateChange(networkControllerState: NetworkState) { + const newChainId = networkControllerState.providerConfig.chainId; + + if (newChainId !== this.currentChainId) { + this.ethQuery = new EthQuery(this.#getProvider()); + await this.resetPolling(); + + this.currentChainId = newChainId; + } + } } export default GasFeeController; diff --git a/packages/network-controller/src/NetworkController.ts b/packages/network-controller/src/NetworkController.ts index d07369e095..0a3dda331a 100644 --- a/packages/network-controller/src/NetworkController.ts +++ b/packages/network-controller/src/NetworkController.ts @@ -153,11 +153,6 @@ export type NetworkControllerStateChangeEvent = { payload: [NetworkState, Patch[]]; }; -export type NetworkControllerProviderConfigChangeEvent = { - type: `NetworkController:providerConfigChange`; - payload: [ProviderConfig]; -}; - /** * `infuraIsBlocked` is published after the network is switched to an Infura * network, but when Infura returns an error blocking the user based on their @@ -180,10 +175,14 @@ export type NetworkControllerInfuraIsUnblockedEvent = { export type NetworkControllerEvents = | NetworkControllerStateChangeEvent - | NetworkControllerProviderConfigChangeEvent | NetworkControllerInfuraIsBlockedEvent | NetworkControllerInfuraIsUnblockedEvent; +export type NetworkControllerGetStateAction = { + type: `NetworkController:getState`; + handler: () => NetworkState; +}; + export type NetworkControllerGetProviderConfigAction = { type: `NetworkController:getProviderConfig`; handler: () => ProviderConfig; @@ -195,12 +194,13 @@ export type NetworkControllerGetEthQueryAction = { }; export type NetworkControllerActions = + | NetworkControllerGetStateAction | NetworkControllerGetProviderConfigAction | NetworkControllerGetEthQueryAction; export type NetworkControllerMessenger = RestrictedControllerMessenger< typeof name, - NetworkControllerGetProviderConfigAction | NetworkControllerGetEthQueryAction, + NetworkControllerActions, NetworkControllerEvents, string, string @@ -513,11 +513,6 @@ export class NetworkController extends BaseControllerV2< // previously connected to an Infura network that was blocked this.messagingSystem.publish('NetworkController:infuraIsUnblocked'); } - - this.messagingSystem.publish( - `NetworkController:providerConfigChange`, - this.state.providerConfig, - ); } finally { releaseLock(); } diff --git a/packages/network-controller/tests/NetworkController.test.ts b/packages/network-controller/tests/NetworkController.test.ts index 723409a753..9ad1a8fd1c 100644 --- a/packages/network-controller/tests/NetworkController.test.ts +++ b/packages/network-controller/tests/NetworkController.test.ts @@ -448,19 +448,6 @@ describe('NetworkController', () => { await expect(promiseForNetworkChanges).toNeverResolve(); }); }); - - it('does not publish NetworkController:providerConfigChange', async () => { - await withController(async ({ controller, messenger }) => { - const promiseForProviderConfigChange = waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - ); - - await controller.lookupNetwork(); - - await expect(promiseForProviderConfigChange).toNeverResolve(); - }); - }); }); for (const providerConfig of Object.values(NetworkType).map((networkType) => @@ -494,41 +481,6 @@ describe('NetworkController', () => { }, ); }); - - it("publishes NetworkController:providerConfigChange with the current provider config (even though it didn't change)", async () => { - await withController( - { - state: { - providerConfig, - }, - }, - async ({ controller, messenger }) => { - await setFakeProvider(controller, { - stubs: [ - { - request: { method: 'net_version' }, - response: { result: '12345' }, - }, - ], - stubLookupNetworkWhileSetting: true, - }); - - const providerConfigChanges = await waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - { - produceEvents: async () => { - await controller.lookupNetwork(); - }, - }, - ); - - expect(providerConfigChanges).toStrictEqual([ - [providerConfig], - ]); - }, - ); - }); }); describe('if the version of the current network is the same as that in state', () => { @@ -717,39 +669,6 @@ describe('NetworkController', () => { ); }); - it("publishes NetworkController:providerConfigChange with the current provider config (even though it didn't change)", async () => { - await withController( - { - state: { - providerConfig, - }, - }, - async ({ controller, messenger }) => { - await setFakeProvider(controller, { - stubs: [ - { - request: { method: 'net_version' }, - error: ethErrors.rpc.limitExceeded('some error'), - }, - ], - stubLookupNetworkWhileSetting: true, - }); - - const providerConfigChanges = await waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - { - produceEvents: async () => { - await controller.lookupNetwork(); - }, - }, - ); - - expect(providerConfigChanges).toStrictEqual([[providerConfig]]); - }, - ); - }); - if (providerConfig.type === NetworkType.rpc) { it('emits infuraIsUnblocked', async () => { await withController( @@ -1074,39 +993,6 @@ describe('NetworkController', () => { ); }); - it("publishes NetworkController:providerConfigChange with the current provider config (even though it didn't change)", async () => { - await withController( - { - state: { - providerConfig, - }, - }, - async ({ controller, messenger }) => { - await setFakeProvider(controller, { - stubs: [ - { - request: { method: 'net_version' }, - error: ethErrors.rpc.internal('some error'), - }, - ], - stubLookupNetworkWhileSetting: true, - }); - - const providerConfigChanges = await waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - { - produceEvents: async () => { - await controller.lookupNetwork(); - }, - }, - ); - - expect(providerConfigChanges).toStrictEqual([[providerConfig]]); - }, - ); - }); - if (providerConfig.type === NetworkType.rpc) { it('emits infuraIsUnblocked', async () => { await withController( @@ -1239,39 +1125,6 @@ describe('NetworkController', () => { ); }); - it("publishes NetworkController:providerConfigChange with the current provider config (even though it didn't change)", async () => { - await withController( - { - state: { - providerConfig, - }, - }, - async ({ controller, messenger }) => { - await setFakeProvider(controller, { - stubs: [ - { - request: { method: 'net_version' }, - response: { result: 'invalid' }, - }, - ], - stubLookupNetworkWhileSetting: true, - }); - - const providerConfigChanges = await waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - { - produceEvents: async () => { - await controller.lookupNetwork(); - }, - }, - ); - - expect(providerConfigChanges).toStrictEqual([[providerConfig]]); - }, - ); - }); - if (providerConfig.type === NetworkType.rpc) { it('emits infuraIsUnblocked', async () => { await withController( @@ -4606,65 +4459,7 @@ describe('NetworkController', () => { ); }); - it('emits NetworkController:providerConfigChange via the messenger', async () => { - const initialProviderConfig = { - ...buildProviderConfig({ - type: networkType, - chainId, - ticker, - rpcPrefs: { blockExplorerUrl }, - }), - }; - await withController( - { - state: { - networkConfigurations: { - testNetworkConfigurationId: { - chainId: '0x1337', - ticker: 'TEST', - nickname: undefined, - id: 'testNetworkConfigurationId', - rpcUrl: 'https://mock-rpc-url', - }, - }, - providerConfig: initialProviderConfig, - }, - }, - async ({ controller, messenger }) => { - const fakeProvider = buildFakeProvider(); - const fakeNetworkClient = buildFakeClient(fakeProvider); - createNetworkClientMock.mockReturnValue(fakeNetworkClient); - await controller.setActiveNetwork('testNetworkConfigurationId'); - - const promiseForProviderConfigChange = - await waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - { - produceEvents: async () => { - await controller.rollbackToPreviousProvider(); - }, - }, - ); - - expect(promiseForProviderConfigChange).toStrictEqual([ - [ - { - type: networkType, - chainId, - ticker, - rpcPrefs: { blockExplorerUrl }, - id: undefined, - nickname: undefined, - rpcUrl: undefined, - }, - ], - ]); - }, - ); - }); - - it('resets isEIP1559Compatible and sets network to "unknown" for the network before emitting NetworkController:providerConfigChange', async () => { + it('resets isEIP1559Compatible and sets network to "unknown" for the network before updating the provider', async () => { const networkConfiguration = { rpcUrl: 'https://mock-rpc-url', chainId: '0x1338', @@ -5038,63 +4833,7 @@ describe('NetworkController', () => { ); }); - it('emits NetworkController:providerConfigChange via the messenger', async () => { - const rpcUrlOrTarget = 'https://mock-rpc-url-2'; - const initialProviderConfigNetworkConfiguration = { - chainId: '0x222', - ticker: 'TEST2', - id: 'testNetworkConfigurationId2', - rpcPrefs: { blockExplorerUrl: 'https://test-block-explorer.com' }, - }; - - const initialProviderConfig = { - ...buildProviderConfig({ - ...initialProviderConfigNetworkConfiguration, - type: NetworkType.rpc, - }), - }; - await withController( - { - state: { - providerConfig: initialProviderConfig, - networkConfigurations: { - testNetworkConfigurationId1: { - rpcUrl: 'https://mock-rpc-url', - chainId: '0x111', - ticker: 'TEST', - id: 'testNetworkConfigurationId1', - }, - testNetworkConfigurationId2: { - ...initialProviderConfigNetworkConfiguration, - rpcUrl: rpcUrlOrTarget, - }, - }, - }, - }, - async ({ controller, messenger }) => { - const fakeProvider = buildFakeProvider(); - const fakeNetworkClient = buildFakeClient(fakeProvider); - createNetworkClientMock.mockReturnValue(fakeNetworkClient); - await controller.setActiveNetwork('testNetworkConfigurationId1'); - - const promiseForProviderConfigChange = await waitForPublishedEvents( - messenger, - 'NetworkController:providerConfigChange', - { - produceEvents: async () => { - await controller.rollbackToPreviousProvider(); - }, - }, - ); - - expect(promiseForProviderConfigChange).toStrictEqual([ - [{ ...initialProviderConfig, rpcUrl: rpcUrlOrTarget }], - ]); - }, - ); - }); - - it('resets the network state to "unknown" and empties the network details before emitting NetworkController:providerConfigChange', async () => { + it('resets the network state to "unknown" and empties the network details before updating the provider', async () => { const initialProviderConfigNetworkConfiguration = { rpcUrl: 'https://mock-rpc-url-2', chainId: '0x1337', @@ -5493,7 +5232,6 @@ function buildNetworkControllerMessenger(messenger = buildMessenger()) { 'NetworkController:getEthQuery', ], allowedEvents: [ - 'NetworkController:providerConfigChange', 'NetworkController:stateChange', 'NetworkController:infuraIsBlocked', 'NetworkController:infuraIsUnblocked', From 82797f84df65d34646e1c569f61d5158d04013f8 Mon Sep 17 00:00:00 2001 From: Elliot Winkler Date: Fri, 5 May 2023 10:48:31 -0600 Subject: [PATCH 2/2] Fix type error --- packages/assets-controllers/src/TokenListController.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/assets-controllers/src/TokenListController.test.ts b/packages/assets-controllers/src/TokenListController.test.ts index 875f39d7eb..b94d0abd6c 100644 --- a/packages/assets-controllers/src/TokenListController.test.ts +++ b/packages/assets-controllers/src/TokenListController.test.ts @@ -512,7 +512,9 @@ function buildNetworkControllerStateWithProviderConfig( providerConfig, networkId: '1', networkStatus: NetworkStatus.Available, - networkDetails: {}, + networkDetails: { + EIPS: {}, + }, networkConfigurations: {}, }; }