Skip to content

Commit

Permalink
Merge branch 'v158-backport-tx-controller-fix' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
legobeat committed Jun 12, 2024
2 parents 625676c + 84493ba commit 6137fc2
Show file tree
Hide file tree
Showing 13 changed files with 72 additions and 51 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
"@metamask/eslint-config-jest": "^12.1.0",
"@metamask/eslint-config-nodejs": "^12.1.0",
"@metamask/eslint-config-typescript": "^12.1.0",
"@metamask/eth-block-tracker": "^9.0.2",
"@metamask/eth-block-tracker": "^9.0.3",
"@metamask/eth-json-rpc-provider": "^3.0.2",
"@metamask/json-rpc-engine": "^8.0.2",
"@metamask/utils": "^8.3.0",
Expand Down
1 change: 0 additions & 1 deletion packages/accounts-controller/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,3 @@ export type {
} from './AccountsController';
export { AccountsController } from './AccountsController';
export { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from './utils';
export { createMockInternalAccount } from './tests/mocks';
Original file line number Diff line number Diff line change
Expand Up @@ -862,15 +862,16 @@ 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,
rpcUrl: 'https://test.network',
ticker: 'TEST',
type: NetworkClientType.Custom,
},
provider: new FakeProvider(),
blockTracker: new FakeBlockTracker(),
provider,
blockTracker: new FakeBlockTracker({ provider }),
destroy: () => {
// do nothing
},
Expand Down
2 changes: 1 addition & 1 deletion packages/network-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"dependencies": {
"@metamask/base-controller": "^5.0.2",
"@metamask/controller-utils": "^10.0.0",
"@metamask/eth-block-tracker": "^9.0.2",
"@metamask/eth-block-tracker": "^9.0.3",
"@metamask/eth-json-rpc-infura": "^9.1.0",
"@metamask/eth-json-rpc-middleware": "^12.1.1",
"@metamask/eth-json-rpc-provider": "^3.0.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7574,7 +7574,7 @@ function buildFakeClient(
rpcUrl: 'https://test.network',
},
provider,
blockTracker: new FakeBlockTracker(),
blockTracker: new FakeBlockTracker({ provider }),
destroy: () => {
// do nothing
},
Expand Down
5 changes: 3 additions & 2 deletions packages/network-controller/tests/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
},
Expand Down
3 changes: 2 additions & 1 deletion packages/transaction-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
"@metamask/gas-fee-controller": "^16.0.0",
"@metamask/metamask-eth-abis": "^3.1.1",
"@metamask/network-controller": "^18.1.3",
"@metamask/nonce-tracker": "^5.0.0",
"@metamask/nonce-tracker": "^6.0.0",
"@metamask/rpc-errors": "^6.2.1",
"@metamask/utils": "^8.3.0",
"async-mutex": "^0.5.0",
Expand All @@ -67,6 +67,7 @@
"devDependencies": {
"@babel/runtime": "^7.23.9",
"@metamask/auto-changelog": "^3.4.4",
"@metamask/eth-json-rpc-provider": "^3.0.2",
"@metamask/ethjs-provider-http": "^0.3.0",
"@types/bn.js": "^5.1.5",
"@types/jest": "^27.4.1",
Expand Down
55 changes: 31 additions & 24 deletions packages/transaction-controller/src/TransactionController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -246,10 +247,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;
}
Expand Down Expand Up @@ -293,16 +298,18 @@ function waitForTransactionFinished(
}

const MOCK_PREFERENCES = { state: { selectedAddress: 'foo' } };
const INFURA_PROJECT_ID = '341eacb578dd44a1a049cbc5f6fd4035';
const GOERLI_PROVIDER = new HttpProvider(
`https://goerli.infura.io/v3/${INFURA_PROJECT_ID}`,
);
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 INFURA_PROJECT_ID = 'testinfuraid';
const HTTP_PROVIDERS = {
goerli: new HttpProvider('https://goerli.infura.io/v3/goerli-pid'),
// TODO: Investigate and address why tests break when mainet has a different INFURA_PROJECT_ID
mainnet: new HttpProvider(
`https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}`,
),
linea: new HttpProvider('https://linea.infura.io/v3/linea-pid'),
lineaGoerli: new HttpProvider('https://linea-g.infura.io/v3/linea-g-pid'),
custom: new HttpProvider(`http://127.0.0.123:456/ethrpc?apiKey=foobar`),
palm: new HttpProvider('https://palm-mainnet.infura.io/v3/palm-pid'),
};

type MockNetwork = {
provider: Provider;
Expand All @@ -312,8 +319,8 @@ type MockNetwork = {
};

const MOCK_NETWORK: MockNetwork = {
provider: MAINNET_PROVIDER,
blockTracker: buildMockBlockTracker('0x102833C'),
provider: HTTP_PROVIDERS.goerli,
blockTracker: buildMockBlockTracker('0x102833C', HTTP_PROVIDERS.goerli),
state: {
selectedNetworkClientId: NetworkType.goerli,
networksMetadata: {
Expand All @@ -332,8 +339,8 @@ const MOCK_NETWORK: MockNetwork = {
subscribe: () => undefined,
};
const MOCK_NETWORK_WITHOUT_CHAIN_ID: MockNetwork = {
provider: GOERLI_PROVIDER,
blockTracker: buildMockBlockTracker('0x102833C'),
provider: HTTP_PROVIDERS.goerli,
blockTracker: buildMockBlockTracker('0x102833C', HTTP_PROVIDERS.goerli),
state: {
selectedNetworkClientId: NetworkType.goerli,
networksMetadata: {
Expand All @@ -350,8 +357,8 @@ const MOCK_NETWORK_WITHOUT_CHAIN_ID: 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: {
Expand All @@ -371,8 +378,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: {
Expand All @@ -392,8 +399,8 @@ const MOCK_LINEA_MAINNET_NETWORK: MockNetwork = {
};

const MOCK_LINEA_GOERLI_NETWORK: MockNetwork = {
provider: PALM_PROVIDER,
blockTracker: buildMockBlockTracker('0xA6EDFC'),
provider: HTTP_PROVIDERS.lineaGoerli,
blockTracker: buildMockBlockTracker('0xA6EDFC', HTTP_PROVIDERS.lineaGoerli),
state: {
selectedNetworkClientId: NetworkType['linea-goerli'],
networksMetadata: {
Expand All @@ -413,8 +420,8 @@ const MOCK_LINEA_GOERLI_NETWORK: MockNetwork = {
};

const MOCK_CUSTOM_NETWORK: MockNetwork = {
provider: PALM_PROVIDER,
blockTracker: buildMockBlockTracker('0xA6EDFC'),
provider: HTTP_PROVIDERS.palm,
blockTracker: buildMockBlockTracker('0xA6EDFC', HTTP_PROVIDERS.palm),
state: {
selectedNetworkClientId: 'uuid-1',
networksMetadata: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3406,7 +3406,6 @@ export class TransactionController extends BaseController<
// TODO: Fix types
// eslint-disable-next-line @typescript-eslint/no-explicit-any
provider: provider as any,
// @ts-expect-error TODO: Fix types
blockTracker,
getPendingTransactions: this.#getNonceTrackerPendingTransactions.bind(
this,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,16 @@ function newMultichainTrackingHelper(
describe('MultichainTrackingHelper', () => {
beforeEach(() => {
jest.resetAllMocks();

for (const network of [
'mainnet',
'goerli',
'sepolia',
'customNetworkClientId-1',
] as const) {
MOCK_BLOCK_TRACKERS[network] = buildMockBlockTracker(network);
MOCK_PROVIDERS[network] = buildMockProvider(network);
}
});

describe('onNetworkStateChange', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,9 @@ export class MultichainTrackingHelper {
networkClientId?: NetworkClientId;
chainId?: Hex;
} = {}): EthQuery {
if (!this.#isMultichainEnabled) {
return new EthQuery(this.getProvider());
}
return new EthQuery(this.getProvider({ networkClientId, chainId }));
}

Expand Down
7 changes: 3 additions & 4 deletions tests/fake-block-tracker.ts
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
27 changes: 14 additions & 13 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1935,7 +1935,7 @@ __metadata:
"@metamask/eslint-config-jest": ^12.1.0
"@metamask/eslint-config-nodejs": ^12.1.0
"@metamask/eslint-config-typescript": ^12.1.0
"@metamask/eth-block-tracker": ^9.0.2
"@metamask/eth-block-tracker": ^9.0.3
"@metamask/eth-json-rpc-provider": ^3.0.2
"@metamask/json-rpc-engine": ^8.0.2
"@metamask/utils": ^8.3.0
Expand Down Expand Up @@ -2065,16 +2065,16 @@ __metadata:
languageName: node
linkType: hard

"@metamask/eth-block-tracker@npm:^9.0.2":
version: 9.0.2
resolution: "@metamask/eth-block-tracker@npm:9.0.2"
"@metamask/eth-block-tracker@npm:^9.0.2, @metamask/eth-block-tracker@npm:^9.0.3":
version: 9.0.3
resolution: "@metamask/eth-block-tracker@npm:9.0.3"
dependencies:
"@metamask/eth-json-rpc-provider": ^2.3.1
"@metamask/eth-json-rpc-provider": ^3.0.2
"@metamask/safe-event-emitter": ^3.0.0
"@metamask/utils": ^8.1.0
json-rpc-random-id: ^1.0.1
pify: ^5.0.0
checksum: ec66cb100b011cafb2052bf0ab6935336ea4c8afd1f6c48326faf362a387d36112b5fffe296f3c75edfb09b29516182015c6f31ee6cb615c0ef4d2aa4ddb9c88
checksum: edd3d59a0416752d90c8e2d8c10c31635dbe3eb323fcb054c401528afe4cbbb6a5a85aedd6ffee4a504d9779656bfab027f2274fd95981c90bf56b6f565dbca2
languageName: node
linkType: hard

Expand Down Expand Up @@ -2139,7 +2139,7 @@ __metadata:
languageName: unknown
linkType: soft

"@metamask/eth-json-rpc-provider@npm:^2.1.0, @metamask/eth-json-rpc-provider@npm:^2.3.1":
"@metamask/eth-json-rpc-provider@npm:^2.1.0":
version: 2.3.2
resolution: "@metamask/eth-json-rpc-provider@npm:2.3.2"
dependencies:
Expand Down Expand Up @@ -2527,7 +2527,7 @@ __metadata:
"@metamask/auto-changelog": ^3.4.4
"@metamask/base-controller": ^5.0.2
"@metamask/controller-utils": ^10.0.0
"@metamask/eth-block-tracker": ^9.0.2
"@metamask/eth-block-tracker": ^9.0.3
"@metamask/eth-json-rpc-infura": ^9.1.0
"@metamask/eth-json-rpc-middleware": ^12.1.1
"@metamask/eth-json-rpc-provider": ^3.0.2
Expand Down Expand Up @@ -2555,15 +2555,15 @@ __metadata:
languageName: unknown
linkType: soft

"@metamask/nonce-tracker@npm:^5.0.0":
version: 5.0.0
resolution: "@metamask/nonce-tracker@npm:5.0.0"
"@metamask/nonce-tracker@npm:^6.0.0":
version: 6.0.0
resolution: "@metamask/nonce-tracker@npm:6.0.0"
dependencies:
"@ethersproject/providers": ^5.7.2
async-mutex: ^0.3.1
peerDependencies:
"@metamask/eth-block-tracker": ">=9"
checksum: 31de9d62f2aec52688a4b7ec1fab877d1f2f4e6b2b395abef2790ddee63b3511f312c07c29d1c191f900231dbd4cdde8e969b210462f78253a177cacee72688c
checksum: d24cdf8eedc892673c3fe4ee1eff87356810840d5d3abb59c3e8adc5fbf21a1a9498bc1df50a7a6a61e7ebe9f3a3f45df4dd4b5b4269e7a52e5d8121d68f83ef
languageName: node
linkType: hard

Expand Down Expand Up @@ -3051,12 +3051,13 @@ __metadata:
"@metamask/auto-changelog": ^3.4.4
"@metamask/base-controller": ^5.0.2
"@metamask/controller-utils": ^10.0.0
"@metamask/eth-json-rpc-provider": ^3.0.2
"@metamask/eth-query": ^4.0.0
"@metamask/ethjs-provider-http": ^0.3.0
"@metamask/gas-fee-controller": ^16.0.0
"@metamask/metamask-eth-abis": ^3.1.1
"@metamask/network-controller": ^18.1.3
"@metamask/nonce-tracker": ^5.0.0
"@metamask/nonce-tracker": ^6.0.0
"@metamask/rpc-errors": ^6.2.1
"@metamask/utils": ^8.3.0
"@types/bn.js": ^5.1.5
Expand Down

0 comments on commit 6137fc2

Please sign in to comment.