diff --git a/packages/assets-controllers/src/NftDetectionController.test.ts b/packages/assets-controllers/src/NftDetectionController.test.ts index 8984134a0e6..79e08cee931 100644 --- a/packages/assets-controllers/src/NftDetectionController.test.ts +++ b/packages/assets-controllers/src/NftDetectionController.test.ts @@ -862,6 +862,7 @@ describe('NftDetectionController', () => { it('should return true if mainnet is detected', async () => { const mockAddNft = jest.fn(); + const provider = new FakeProvider(); const mockNetworkClient: NetworkClient = { configuration: { chainId: ChainId.mainnet, @@ -869,8 +870,8 @@ describe('NftDetectionController', () => { ticker: 'TEST', type: NetworkClientType.Custom, }, - provider: new FakeProvider(), - blockTracker: new FakeBlockTracker(), + provider, + blockTracker: new FakeBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/network-controller/tests/NetworkController.test.ts b/packages/network-controller/tests/NetworkController.test.ts index 18e3476d7b8..3d7d8639d0b 100644 --- a/packages/network-controller/tests/NetworkController.test.ts +++ b/packages/network-controller/tests/NetworkController.test.ts @@ -7574,7 +7574,7 @@ function buildFakeClient( rpcUrl: 'https://test.network', }, provider, - blockTracker: new FakeBlockTracker(), + blockTracker: new FakeBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/network-controller/tests/helpers.ts b/packages/network-controller/tests/helpers.ts index c93c0efa7fd..3a686cb9c84 100644 --- a/packages/network-controller/tests/helpers.ts +++ b/packages/network-controller/tests/helpers.ts @@ -39,10 +39,11 @@ function buildFakeNetworkClient({ configuration: NetworkClientConfiguration; providerStubs?: FakeProviderStub[]; }): NetworkClient { + const provider = new FakeProvider({ stubs: providerStubs }); return { configuration, - provider: new FakeProvider({ stubs: providerStubs }), - blockTracker: new FakeBlockTracker(), + provider, + blockTracker: new FakeBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json index 3bc8e971216..583cfdd0200 100644 --- a/packages/transaction-controller/package.json +++ b/packages/transaction-controller/package.json @@ -67,6 +67,7 @@ "devDependencies": { "@babel/runtime": "^7.23.9", "@metamask/auto-changelog": "^3.4.4", + "@metamask/eth-json-rpc-provider": "^4.0.0", "@metamask/ethjs-provider-http": "^0.3.0", "@types/bn.js": "^5.1.5", "@types/jest": "^27.4.1", diff --git a/packages/transaction-controller/src/TransactionController.test.ts b/packages/transaction-controller/src/TransactionController.test.ts index 96d44c84cbe..2510bd49af1 100644 --- a/packages/transaction-controller/src/TransactionController.test.ts +++ b/packages/transaction-controller/src/TransactionController.test.ts @@ -14,6 +14,7 @@ import { BUILT_IN_NETWORKS, ORIGIN_METAMASK, } from '@metamask/controller-utils'; +import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; import EthQuery from '@metamask/eth-query'; import HttpProvider from '@metamask/ethjs-provider-http'; import type { @@ -245,10 +246,14 @@ function buildMockEthQuery(): EthQuery { * * @param latestBlockNumber - The block number that the block tracker should * always return. + * @param provider - json rpc provider * @returns The mocked block tracker. */ -function buildMockBlockTracker(latestBlockNumber: string): BlockTracker { - const fakeBlockTracker = new FakeBlockTracker(); +function buildMockBlockTracker( + latestBlockNumber: string, + provider: SafeEventEmitterProvider, +): BlockTracker { + const fakeBlockTracker = new FakeBlockTracker({ provider }); fakeBlockTracker.mockLatestBlockNumber(latestBlockNumber); return fakeBlockTracker; } @@ -293,12 +298,21 @@ function waitForTransactionFinished( const MOCK_PREFERENCES = { state: { selectedAddress: 'foo' } }; const INFURA_PROJECT_ID = '341eacb578dd44a1a049cbc5f6fd4035'; -const MAINNET_PROVIDER = new HttpProvider( - `https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}`, -); -const PALM_PROVIDER = new HttpProvider( - `https://palm-mainnet.infura.io/v3/${INFURA_PROJECT_ID}`, -); +const HTTP_PROVIDERS = { + mainnet: new HttpProvider( + `https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}`, + ), + goerli: new HttpProvider( + `https://palm-mainnet.infura.io/v3/${INFURA_PROJECT_ID}`, + ), + linea: new HttpProvider( + `https://palm-mainnet.infura.io/v3/${INFURA_PROJECT_ID}`, + ), + linea_goerli: new HttpProvider( + `https://palm-mainnet.infura.io/v3/${INFURA_PROJECT_ID}`, + ), + custom: new HttpProvider(`http://127.0.0.123:456/ethrpc?apiKey=foobar`), +}; type MockNetwork = { provider: Provider; @@ -308,8 +322,8 @@ type MockNetwork = { }; const MOCK_NETWORK: MockNetwork = { - provider: MAINNET_PROVIDER, - blockTracker: buildMockBlockTracker('0x102833C'), + provider: HTTP_PROVIDERS.mainnet, + blockTracker: buildMockBlockTracker('0x102833C', HTTP_PROVIDERS.mainnet), state: { selectedNetworkClientId: NetworkType.goerli, networksMetadata: { @@ -328,8 +342,8 @@ const MOCK_NETWORK: MockNetwork = { subscribe: () => undefined, }; const MOCK_MAINNET_NETWORK: MockNetwork = { - provider: MAINNET_PROVIDER, - blockTracker: buildMockBlockTracker('0x102833C'), + provider: HTTP_PROVIDERS.mainnet, + blockTracker: buildMockBlockTracker('0x102833C', HTTP_PROVIDERS.mainnet), state: { selectedNetworkClientId: NetworkType.mainnet, networksMetadata: { @@ -349,8 +363,8 @@ const MOCK_MAINNET_NETWORK: MockNetwork = { }; const MOCK_LINEA_MAINNET_NETWORK: MockNetwork = { - provider: PALM_PROVIDER, - blockTracker: buildMockBlockTracker('0xA6EDFC'), + provider: HTTP_PROVIDERS.linea, + blockTracker: buildMockBlockTracker('0xA6EDFC', HTTP_PROVIDERS.linea), state: { selectedNetworkClientId: NetworkType['linea-mainnet'], networksMetadata: { @@ -370,8 +384,8 @@ const MOCK_LINEA_MAINNET_NETWORK: MockNetwork = { }; const MOCK_LINEA_GOERLI_NETWORK: MockNetwork = { - provider: PALM_PROVIDER, - blockTracker: buildMockBlockTracker('0xA6EDFC'), + provider: HTTP_PROVIDERS.linea_goerli, + blockTracker: buildMockBlockTracker('0xA6EDFC', HTTP_PROVIDERS.linea_goerli), state: { selectedNetworkClientId: NetworkType['linea-goerli'], networksMetadata: { @@ -391,8 +405,8 @@ const MOCK_LINEA_GOERLI_NETWORK: MockNetwork = { }; const MOCK_CUSTOM_NETWORK: MockNetwork = { - provider: PALM_PROVIDER, - blockTracker: buildMockBlockTracker('0xA6EDFC'), + provider: HTTP_PROVIDERS.custom, + blockTracker: buildMockBlockTracker('0xA6EDFC', HTTP_PROVIDERS.custom), state: { selectedNetworkClientId: 'uuid-1', networksMetadata: { diff --git a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts index 403cfabdbd3..ae5f171d5fd 100644 --- a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts +++ b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts @@ -190,7 +190,7 @@ export class MultichainTrackingHelper { networkClientId?: NetworkClientId; chainId?: Hex; } = {}): EthQuery | undefined { - if (!networkClientId && !chainId) { + if ((!networkClientId && !chainId) || !this.#isMultichainEnabled) { const globalProvider = this.#getGlobalProviderAndBlockTracker()?.provider; return globalProvider ? new EthQuery(globalProvider) : undefined; } diff --git a/tests/fake-block-tracker.ts b/tests/fake-block-tracker.ts index 0c7365b441e..55439211f1a 100644 --- a/tests/fake-block-tracker.ts +++ b/tests/fake-block-tracker.ts @@ -1,6 +1,5 @@ import { PollingBlockTracker } from '@metamask/eth-block-tracker'; -import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; -import { JsonRpcEngine } from '@metamask/json-rpc-engine'; +import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; /** * Acts like a PollingBlockTracker, but doesn't start the polling loop or @@ -9,9 +8,9 @@ import { JsonRpcEngine } from '@metamask/json-rpc-engine'; export class FakeBlockTracker extends PollingBlockTracker { #latestBlockNumber = '0x0'; - constructor() { + constructor({ provider }: { provider: SafeEventEmitterProvider }) { super({ - provider: new SafeEventEmitterProvider({ engine: new JsonRpcEngine() }), + provider, }); // Don't start the polling loop // TODO: Replace `any` with type diff --git a/yarn.lock b/yarn.lock index e78b424eee2..9bd4654f22a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3145,6 +3145,7 @@ __metadata: "@metamask/auto-changelog": ^3.4.4 "@metamask/base-controller": ^6.0.0 "@metamask/controller-utils": ^11.0.0 + "@metamask/eth-json-rpc-provider": ^4.0.0 "@metamask/eth-query": ^4.0.0 "@metamask/ethjs-provider-http": ^0.3.0 "@metamask/gas-fee-controller": ^17.0.0