Skip to content

fix: account tracker controller with useMultiPolling #28277

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
e161dae
fix: account tracker controller with useMultiPolling
sahar-fehri Nov 4, 2024
9fc9319
fix: add stopAllPolling onClientClosed
sahar-fehri Nov 4, 2024
f828fc0
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 4, 2024
3068288
fix: fix
sahar-fehri Nov 4, 2024
7870081
fix: fix lint
sahar-fehri Nov 4, 2024
6068366
fix: update privacy snapshot
sahar-fehri Nov 4, 2024
c0e9903
fix: lint
sahar-fehri Nov 4, 2024
c0584d3
fix: wip
sahar-fehri Nov 7, 2024
13fdff0
fix: wip
sahar-fehri Nov 7, 2024
4580930
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 8, 2024
47e52f7
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
darkwing Nov 12, 2024
a21214b
fix: fix onboarding privacy e2e test
sahar-fehri Nov 13, 2024
9aff235
Multichain debug (#28402)
seaona Nov 13, 2024
154597a
fix: fix add feature flag
sahar-fehri Nov 13, 2024
03478dc
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 13, 2024
c96cb5e
fix: fix flag name
sahar-fehri Nov 13, 2024
65b2fd0
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 15, 2024
5c854ac
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
bergeron Nov 15, 2024
5070cbc
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 18, 2024
78d0a6b
fix: fix smart tx mock
sahar-fehri Nov 18, 2024
22b383a
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 18, 2024
acd5a74
Merge branch 'develop' into feat/multi-chain-for-account-tracker-cont…
sahar-fehri Nov 19, 2024
67ad764
fix: rm changes from privacy-snapshot
sahar-fehri Nov 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions app/scripts/metamask-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -2629,13 +2629,11 @@ export default class MetamaskController extends EventEmitter {
}

triggerNetworkrequests() {
this.accountTrackerController.start();
this.txController.startIncomingTransactionPolling();
this.tokenDetectionController.enable();
}

stopNetworkRequests() {
this.accountTrackerController.stop();
this.txController.stopIncomingTransactionPolling();
this.tokenDetectionController.disable();
}
Expand Down Expand Up @@ -3274,6 +3272,7 @@ export default class MetamaskController extends EventEmitter {
approvalController,
phishingController,
tokenRatesController,
accountTrackerController,
// Notification Controllers
authenticationController,
userStorageController,
Expand Down Expand Up @@ -4060,6 +4059,14 @@ export default class MetamaskController extends EventEmitter {
tokenRatesController.stopPollingByPollingToken.bind(
tokenRatesController,
),
accountTrackerStartPolling:
accountTrackerController.startPollingByNetworkClientId.bind(
accountTrackerController,
),
accountTrackerStopPollingByPollingToken:
accountTrackerController.stopPollingByPollingToken.bind(
accountTrackerController,
),

tokenDetectionStartPolling: tokenDetectionController.startPolling.bind(
tokenDetectionController,
Expand Down Expand Up @@ -6718,6 +6725,7 @@ export default class MetamaskController extends EventEmitter {
this.tokenListController.stopAllPolling();
this.tokenBalancesController.stopAllPolling();
this.appStateController.clearPollingTokens();
this.accountTrackerController.stopAllPolling();
} catch (error) {
console.error(error);
}
Expand Down
146 changes: 146 additions & 0 deletions test/e2e/mock-balance-polling/mock-balance-polling.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
import { MockttpServer } from 'mockttp';

const CONTRACT_ADDRESS = {
BalanceCheckerEthereumMainnet: '0xb1f8e55c7f64d203c1400b9d8555d050f94adf39',
BalanceCheckerLineaMainnet: '0xf62e6a41561b3650a69bb03199c735e3e3328c0d',
};

const infuraUrl: string =
'https://mainnet.infura.io/v3/00000000000000000000000000000000';
const infuraLineaMainnetUrl: string =
'https://linea-mainnet.infura.io/v3/00000000000000000000000000000000';
const infuraLineaSepoliaUrl: string =
'https://linea-sepolia.infura.io/v3/00000000000000000000000000000000';
const infuraSepoliaUrl: string =
'https://sepolia.infura.io/v3/00000000000000000000000000000000';

/**
* Mocks multi network balance polling requests.
*
* @param mockServer - The mock server instance to set up the mocks on.
* @returns A promise that resolves when all mocks have been set up.
*/
export async function mockMultiNetworkBalancePolling(
mockServer: MockttpServer,
): Promise<void> {
await mockServer
.forPost(infuraUrl)
.withJsonBodyIncluding({ method: 'eth_getBalance' })
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '1111111111111111',
result: '0x1158E460913D00000',
},
}));

await mockServer
.forPost(infuraSepoliaUrl)
.withJsonBodyIncluding({ method: 'eth_getBalance' })
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '6183194981233610',
result: '0x1158E460913D00000',
},
}));

await mockServer
.forPost(infuraLineaMainnetUrl)
.withJsonBodyIncluding({ method: 'eth_getBalance' })
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '6183194981233610',
result: '0x1158E460913D00000',
},
}));

await mockServer
.forPost(infuraLineaSepoliaUrl)
.withJsonBodyIncluding({ method: 'eth_getBalance' })
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '6183194981233610',
result: '0x1158E460913D00000',
},
}));

await mockServer
.forPost(infuraUrl)
.withJsonBodyIncluding({ method: 'net_version' })
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '6183194981233610',
result: '0x1',
},
}));

await mockServer
.forPost(infuraLineaMainnetUrl)
.withJsonBodyIncluding({ method: 'eth_call' })
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '1111111111111111',
result:
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000001158E460913D000000000000000000000000000000000000000000000000000000001699651aa88200000000000000000000000000000000000000000000000000001beca58919dc0000000000000000000000000000000000000000000000000000974189179054f0000000000000000000000000000000000000000000000000001d9ae54845818000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000000000000000000000000000000000000000000000',
},
}));

await mockServer
.forPost(infuraUrl)
.withJsonBodyIncluding({
method: 'eth_call',
params: [
{
to: CONTRACT_ADDRESS.BalanceCheckerEthereumMainnet,
},
],
})
.thenCallback(() => ({
statusCode: 200,
json: {
jsonrpc: '2.0',
id: '6183194981233610',
result:
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000001158E460913D000000000000000000000000000000000000000000000000000000001699651aa88200000000000000000000000000000000000000000000000000001beca58919dc0000000000000000000000000000000000000000000000000000974189179054f0000000000000000000000000000000000000000000000000001d9ae54845818000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000000000000000000000000000000000000000000000',
},
}));

await mockServer
.forGet(
'https://accounts.api.cx.metamask.io/v2/accounts/0x5cfe73b6021e818b776b421b1c4db2474086a7e1/balances',
)
.withQuery({
networks: 1,
})
.thenCallback(() => ({
statusCode: 200,
json: {
count: 0,
balances: [
{
object: 'token',
address: '0x0000000000000000000000000000000000000000',
symbol: 'ETH',
name: 'Ether',
type: 'native',
timestamp: '2015-07-30T03:26:13.000Z',
decimals: 18,
chainId: 1,
balance: '20',
},
],
unprocessedNetworks: [],
},
}));
}
2 changes: 2 additions & 0 deletions test/e2e/mock-e2e.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ const blacklistedHosts = [
'goerli.infura.io',
'mainnet.infura.io',
'sepolia.infura.io',
'linea-mainnet.infura.io',
'linea-sepolia.infura.io',
];
const {
mockEmptyStalelistAndHotlist,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ const {
logInWithBalanceValidation,
WINDOW_TITLES,
} = require('../../helpers');
const {
mockMultiNetworkBalancePolling,
} = require('../../mock-balance-polling/mock-balance-polling');
const { SECURITY_ALERTS_PROD_API_BASE_URL } = require('./constants');
const { mockServerJsonRpc } = require('./mocks/mock-server-json-rpc');

Expand All @@ -32,13 +35,13 @@ const SEND_REQUEST_BASE_MOCK = {
};

async function mockInfura(mockServer) {
await mockMultiNetworkBalancePolling(mockServer);
await mockServerJsonRpc(mockServer, [
['eth_blockNumber'],
['eth_call'],
['eth_estimateGas'],
['eth_feeHistory'],
['eth_gasPrice'],
['eth_getBalance'],
['eth_getBlockByNumber'],
['eth_getCode'],
['eth_getTransactionCount'],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { MockttpServer } from 'mockttp';
import { mockEthDaiTrade } from '../swaps/shared';
import { mockMultiNetworkBalancePolling } from '../../mock-balance-polling/mock-balance-polling';
import { mockServerJsonRpc } from '../ppom/mocks/mock-server-json-rpc';

const STX_UUID = '0d506aaa-5e38-4cab-ad09-2039cb7a0f33';

Expand Down Expand Up @@ -288,18 +290,14 @@ const GET_TRANSACTION_BY_HASH_RESPONSE = {
};

export const mockSwapRequests = async (mockServer: MockttpServer) => {
await mockEthDaiTrade(mockServer);
await mockMultiNetworkBalancePolling(mockServer);

await mockServer
.forJsonRpcRequest({
method: 'eth_getBalance',
params: ['0x5cfe73b6021e818b776b421b1c4db2474086a7e1'],
})
.thenJson(200, {
id: 3806592044086814,
jsonrpc: '2.0',
result: '0x1bc16d674ec80000', // 2 ETH
});
await mockServerJsonRpc(mockServer, [
['eth_blockNumber'],
['eth_getBlockByNumber'],
['eth_chainId', { result: `0x1` }],
]);
await mockEthDaiTrade(mockServer);

await mockServer
.forPost('https://transaction.api.cx.metamask.io/networks/1/getFees')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {
import FixtureBuilder from '../../fixture-builder';
import { unlockWallet, withFixtures } from '../../helpers';
import { Driver } from '../../webdriver/driver';
import { CHAIN_IDS } from '../../../../shared/constants/network';
import { mockSwapRequests } from './mock-requests-for-swap-test';

export async function withFixturesForSmartTransactions(
Expand All @@ -20,10 +19,9 @@ export async function withFixturesForSmartTransactions(
},
test: (args: { driver: Driver }) => Promise<void>,
) {
const inputChainId = CHAIN_IDS.MAINNET;
await withFixtures(
{
fixtures: new FixtureBuilder({ inputChainId })
fixtures: new FixtureBuilder()
.withPermissionControllerConnectedToTestDapp()
.withPreferencesControllerSmartTransactionsOptedIn()
.withNetworkControllerOnMainnet()
Expand Down
Loading