diff --git a/packages/assets-controllers/package.json b/packages/assets-controllers/package.json index 59191937c5f..0322e235505 100644 --- a/packages/assets-controllers/package.json +++ b/packages/assets-controllers/package.json @@ -107,6 +107,7 @@ "@babel/runtime": "^7.23.9", "@metamask/account-api": "^2.0.0", "@metamask/auto-changelog": "^6.1.0", + "@metamask/eth-block-tracker": "^15.0.1", "@metamask/eth-json-rpc-provider": "^6.0.1", "@metamask/ethjs-provider-http": "^0.3.0", "@metamask/keyring-internal-api": "^12.0.0", diff --git a/packages/assets-controllers/src/NftDetectionController.test.ts b/packages/assets-controllers/src/NftDetectionController.test.ts index d767473299f..8260fd9e5e1 100644 --- a/packages/assets-controllers/src/NftDetectionController.test.ts +++ b/packages/assets-controllers/src/NftDetectionController.test.ts @@ -4,6 +4,7 @@ import { ChainId, InfuraNetworkType, } from '@metamask/controller-utils'; +import { MockPollingBlockTracker } from '@metamask/eth-block-tracker'; import { MockInternalProvider } from '@metamask/eth-json-rpc-provider'; import { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger'; import type { @@ -26,7 +27,6 @@ import { getDefaultPreferencesState } from '@metamask/preferences-controller'; import type { PreferencesState } from '@metamask/preferences-controller'; import nock from 'nock'; -import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js'; import { jestAdvanceTime } from '../../../tests/helpers.js'; import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js'; import { @@ -781,7 +781,7 @@ describe('NftDetectionController', () => { type: NetworkClientType.Custom, }, provider, - blockTracker: new FakeBlockTracker({ provider }), + blockTracker: new MockPollingBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/assets-controllers/tsconfig.build.json b/packages/assets-controllers/tsconfig.build.json index 4c91e33d6f9..b4fbab67758 100644 --- a/packages/assets-controllers/tsconfig.build.json +++ b/packages/assets-controllers/tsconfig.build.json @@ -65,6 +65,9 @@ }, { "path": "../eth-json-rpc-provider/tsconfig.build.json" + }, + { + "path": "../eth-block-tracker/tsconfig.build.json" } ], "include": ["../../types", "./src"], diff --git a/packages/assets-controllers/tsconfig.json b/packages/assets-controllers/tsconfig.json index bf85cfc88ab..82befc583d4 100644 --- a/packages/assets-controllers/tsconfig.json +++ b/packages/assets-controllers/tsconfig.json @@ -64,6 +64,9 @@ }, { "path": "../eth-json-rpc-provider" + }, + { + "path": "../eth-block-tracker" } ], "include": ["../../types", "./src", "../../tests"] diff --git a/tests/fake-block-tracker.ts b/packages/eth-block-tracker/src/MockPollingBlockTracker.ts similarity index 55% rename from tests/fake-block-tracker.ts rename to packages/eth-block-tracker/src/MockPollingBlockTracker.ts index 735ac706874..595569b68c4 100644 --- a/tests/fake-block-tracker.ts +++ b/packages/eth-block-tracker/src/MockPollingBlockTracker.ts @@ -1,23 +1,31 @@ -import { PollingBlockTracker } from '@metamask/eth-block-tracker'; import type { InternalProvider } from '@metamask/eth-json-rpc-provider'; import type { ContextConstraint, MiddlewareContext, } from '@metamask/json-rpc-engine/v2'; +import { PollingBlockTracker } from './PollingBlockTracker.js'; + /** * Acts like a PollingBlockTracker, but doesn't start the polling loop or * make any requests. */ -export class FakeBlockTracker< +export class MockPollingBlockTracker< Context extends ContextConstraint = MiddlewareContext, > extends PollingBlockTracker { - #latestBlockNumber = '0x0'; + latestBlockNumber: Hex; + + constructor({ + provider, + latestBlockNumber = '0x0', + }: { + provider: InternalProvider; + latestBlockNumber?: Hex; + }) { + super({ provider }); + + this.latestBlockNumber = latestBlockNumber; - constructor({ provider }: { provider: InternalProvider }) { - super({ - provider, - }); // Don't start the polling loop // TODO: Replace `any` with type // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -26,20 +34,11 @@ export class FakeBlockTracker< }; } - /** - * Sets the number of the block that the block tracker will always return. - * - * @param latestBlockNumber - The block number to use. - */ - mockLatestBlockNumber(latestBlockNumber: string): void { - this.#latestBlockNumber = latestBlockNumber; - } - override async getLatestBlock(): Promise { - return this.#latestBlockNumber; + return this.latestBlockNumber; } override async checkForLatestBlock(): Promise { - return this.#latestBlockNumber; + return this.latestBlockNumber; } } diff --git a/packages/eth-block-tracker/src/index.ts b/packages/eth-block-tracker/src/index.ts index 32370f265de..ef158239f66 100644 --- a/packages/eth-block-tracker/src/index.ts +++ b/packages/eth-block-tracker/src/index.ts @@ -1,2 +1,3 @@ export * from './PollingBlockTracker.js'; export type * from './BlockTracker.js'; +export { MockPollingBlockTracker } from './MockPollingBlockTracker.js'; diff --git a/packages/network-controller/tests/NetworkController.test.ts b/packages/network-controller/tests/NetworkController.test.ts index 63b1f66b943..0b318595ca2 100644 --- a/packages/network-controller/tests/NetworkController.test.ts +++ b/packages/network-controller/tests/NetworkController.test.ts @@ -10,6 +10,7 @@ import { toHex, } from '@metamask/controller-utils'; import { PollingBlockTrackerOptions } from '@metamask/eth-block-tracker'; +import { MockPollingBlockTracker } from '@metamask/eth-block-tracker'; import type { MockInternalProviderStub } from '@metamask/eth-json-rpc-provider'; import { MockInternalProvider } from '@metamask/eth-json-rpc-provider'; import { rpcErrors } from '@metamask/rpc-errors'; @@ -20,7 +21,6 @@ import { when, resetAllWhenMocks, WhenMock } from 'jest-when'; import { inspect, isDeepStrictEqual, promisify } from 'util'; import { v4 as uuidV4 } from 'uuid'; -import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js'; import { NetworkStatus } from '../src/constants.js'; import * as createAutoManagedNetworkClientModule from '../src/create-auto-managed-network-client.js'; import type { AutoManagedNetworkClient } from '../src/create-auto-managed-network-client.js'; @@ -16874,7 +16874,7 @@ function buildFakeClient( rpcUrl: 'https://test.network', }, provider, - blockTracker: new FakeBlockTracker({ + blockTracker: new MockPollingBlockTracker({ provider, }), destroy: (): void => { diff --git a/packages/network-controller/tests/helpers.ts b/packages/network-controller/tests/helpers.ts index 4dabb860d5c..55fcbd27b53 100644 --- a/packages/network-controller/tests/helpers.ts +++ b/packages/network-controller/tests/helpers.ts @@ -9,7 +9,7 @@ import { NetworksTicker, toHex, } from '@metamask/controller-utils'; -import type { InternalProvider } from '@metamask/eth-json-rpc-provider'; +import { MockPollingBlockTracker } from '@metamask/eth-block-tracker'; import { MockInternalProvider } from '@metamask/eth-json-rpc-provider'; import type { MockInternalProviderStub } from '@metamask/eth-json-rpc-provider'; import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger'; @@ -21,7 +21,6 @@ import type { import type { CaipChainId, Hex } from '@metamask/utils'; import { v4 as uuidV4 } from 'uuid'; -import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js'; import { buildTestObject } from '../../../tests/helpers.js'; import type { AutoManagedNetworkClient } from '../src/create-auto-managed-network-client.js'; import { NetworkController } from '../src/index.js'; @@ -236,9 +235,7 @@ function buildFakeNetworkClient({ return { configuration, provider, - blockTracker: new FakeBlockTracker({ - provider: provider as unknown as InternalProvider, - }), + blockTracker: new MockPollingBlockTracker({ provider }), destroy: (): void => { // do nothing }, diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json index 7dabc34646c..a5481f786fe 100644 --- a/packages/transaction-controller/package.json +++ b/packages/transaction-controller/package.json @@ -88,7 +88,7 @@ "@babel/runtime": "^7.23.9", "@metamask/auto-changelog": "^6.1.0", "@metamask/connectivity-controller": "^0.3.0", - "@metamask/eth-block-tracker": "^15.0.0", + "@metamask/eth-block-tracker": "^15.0.1", "@metamask/eth-json-rpc-provider": "^6.0.1", "@metamask/ethjs-provider-http": "^0.3.0", "@ts-bridge/cli": "^0.6.4", diff --git a/packages/transaction-controller/src/TransactionController.test.ts b/packages/transaction-controller/src/TransactionController.test.ts index 1224db2bb45..b32d8f575f5 100644 --- a/packages/transaction-controller/src/TransactionController.test.ts +++ b/packages/transaction-controller/src/TransactionController.test.ts @@ -15,6 +15,7 @@ import { ORIGIN_METAMASK, InfuraNetworkType, } from '@metamask/controller-utils'; +import { MockPollingBlockTracker } from '@metamask/eth-block-tracker'; import type { InternalProvider } from '@metamask/eth-json-rpc-provider'; import { MockInternalProvider } from '@metamask/eth-json-rpc-provider'; import HttpProvider from '@metamask/ethjs-provider-http'; @@ -43,7 +44,6 @@ import assert from 'assert'; // eslint-disable-next-line import-x/namespace import * as uuidModule from 'uuid'; -import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js'; import { flushPromises, jestAdvanceTime } from '../../../tests/helpers.js'; import { buildCustomNetworkClientConfiguration, @@ -198,9 +198,7 @@ function buildMockBlockTracker( latestBlockNumber: string, provider: InternalProvider, ): BlockTracker { - const fakeBlockTracker = new FakeBlockTracker({ provider }); - fakeBlockTracker.mockLatestBlockNumber(latestBlockNumber); - return fakeBlockTracker; + return new MockPollingBlockTracker({ provider, latestBlockNumber }); } /** diff --git a/yarn.lock b/yarn.lock index debb45a5a3f..b56f5e569d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5886,6 +5886,7 @@ __metadata: "@metamask/contract-metadata": "npm:^2.4.0" "@metamask/controller-utils": "npm:^12.3.0" "@metamask/core-backend": "npm:^9.0.0" + "@metamask/eth-block-tracker": "npm:^15.0.1" "@metamask/eth-json-rpc-provider": "npm:^6.0.1" "@metamask/eth-query": "npm:^4.0.0" "@metamask/ethjs-provider-http": "npm:^0.3.0" @@ -9193,7 +9194,7 @@ __metadata: "@metamask/connectivity-controller": "npm:^0.3.0" "@metamask/controller-utils": "npm:^12.3.0" "@metamask/core-backend": "npm:^9.0.0" - "@metamask/eth-block-tracker": "npm:^15.0.0" + "@metamask/eth-block-tracker": "npm:^15.0.1" "@metamask/eth-json-rpc-provider": "npm:^6.0.1" "@metamask/ethjs-provider-http": "npm:^0.3.0" "@metamask/gas-fee-controller": "npm:^26.3.2"