Skip to content

Commit 5e4e26a

Browse files
authored
Merge branch 'main' into update-network-nicknames
2 parents db0bff5 + de92da5 commit 5e4e26a

File tree

16 files changed

+551
-241
lines changed

16 files changed

+551
-241
lines changed

.github/workflows/main.yml

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,38 @@ jobs:
2424
shell: bash
2525

2626
analyse-code:
27-
name: Code scanner
27+
name: Analyse code
2828
needs: check-workflows
29-
uses: ./.github/workflows/security-code-scanner.yml
29+
uses: MetaMask/action-security-code-scanner/.github/workflows/security-scan.yml@v2
30+
with:
31+
scanner-ref: v2
32+
paths-ignored: |
33+
.storybook/
34+
**/__snapshots__/
35+
**/*.snap
36+
**/*.stories.js
37+
**/*.stories.tsx
38+
**/*.test.browser.ts*
39+
**/*.test.js*
40+
**/*.test.ts*
41+
**/fixtures/
42+
**/jest.config.js
43+
**/jest.environment.js
44+
**/mocks/
45+
**/test*/
46+
docs/
47+
e2e/
48+
merged-packages/
49+
node_modules/
50+
storybook/
51+
test*/
52+
secrets:
53+
project-metrics-token: ${{ secrets.SECURITY_SCAN_METRICS_TOKEN }}
54+
slack-webhook: ${{ secrets.APPSEC_BOT_SLACK_WEBHOOK }}
3055
permissions:
3156
actions: read
3257
contents: read
3358
security-events: write
34-
secrets:
35-
SECURITY_SCAN_METRICS_TOKEN: ${{ secrets.SECURITY_SCAN_METRICS_TOKEN }}
36-
APPSEC_BOT_SLACK_WEBHOOK: ${{ secrets.APPSEC_BOT_SLACK_WEBHOOK }}
3759

3860
lint-build-test:
3961
name: Lint, build, and test
@@ -49,7 +71,7 @@ jobs:
4971
IS_RELEASE: ${{ steps.is-release.outputs.IS_RELEASE }}
5072
steps:
5173
- id: is-release
52-
uses: MetaMask/action-is-release@dc4672b05e3b1d464cdaf783579b04a4e43f8b02
74+
uses: MetaMask/action-is-release@v2
5375
with:
5476
commit-starts-with: 'Release [version],Release v[version],Release/[version],Release/v[version],Release `[version]`'
5577

.github/workflows/security-code-scanner.yml

Lines changed: 0 additions & 47 deletions
This file was deleted.

packages/gas-fee-controller/src/GasFeeController.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,16 @@ type AllEvents = AllGasFeeControllerEvents | AllNetworkControllerEvents;
6363
type RootMessenger = Messenger<MockAnyNamespace, AllActions, AllEvents>;
6464

6565
const getRootMessenger = (): RootMessenger => {
66-
return new Messenger({ namespace: MOCK_ANY_NAMESPACE });
66+
const rootMessenger = new Messenger<
67+
MockAnyNamespace,
68+
MessengerActions<NetworkControllerMessenger>,
69+
MessengerEvents<NetworkControllerMessenger>
70+
>({ namespace: MOCK_ANY_NAMESPACE });
71+
rootMessenger.registerActionHandler(
72+
'ErrorReportingService:captureException',
73+
jest.fn(),
74+
);
75+
return rootMessenger;
6776
};
6877

6978
const setupNetworkController = async ({
@@ -86,6 +95,10 @@ const setupNetworkController = async ({
8695
namespace: 'NetworkController',
8796
parent: rootMessenger,
8897
});
98+
rootMessenger.delegate({
99+
messenger: networkControllerMessenger,
100+
actions: ['ErrorReportingService:captureException'],
101+
});
89102

90103
const infuraProjectId = '123';
91104

packages/multichain-account-service/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Changed
11+
12+
- Limit Bitcoin and Tron providers to 3 concurrent account creations by default when creating multichain account groups ([#7052](https://github.com/MetaMask/core/pull/7052))
13+
1014
## [2.1.0]
1115

1216
### Added

packages/multichain-account-service/src/providers/BtcAccountProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export class BtcAccountProvider extends SnapAccountProvider {
2828
constructor(
2929
messenger: MultichainAccountServiceMessenger,
3030
config: BtcAccountProviderConfig = {
31+
maxConcurrency: 3,
3132
createAccounts: {
3233
timeoutMs: 3000,
3334
},

packages/multichain-account-service/src/providers/SnapAccountProvider.test.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const TEST_SNAP_ID = 'npm:@metamask/test-snap' as SnapId;
1818
const TEST_ENTROPY_SOURCE = 'test-entropy-source' as EntropySourceId;
1919

2020
// Helper to create a tracked provider that monitors concurrent execution
21-
const createTrackedProvider = (maxConcurrency: number) => {
21+
const createTrackedProvider = (maxConcurrency?: number) => {
2222
const tracker: {
2323
startLog: number[];
2424
endLog: number[];
@@ -67,7 +67,7 @@ const createTrackedProvider = (maxConcurrency: number) => {
6767

6868
const messenger = getMultichainAccountServiceMessenger(getRootMessenger());
6969
const config = {
70-
maxConcurrency,
70+
...(maxConcurrency !== undefined && { maxConcurrency }),
7171
createAccounts: {
7272
timeoutMs: 5000,
7373
},
@@ -197,5 +197,26 @@ describe('SnapAccountProvider', () => {
197197
// With maxConcurrency=1, never more than 1 should run at a time
198198
expect(tracker.maxActiveCount).toBe(1);
199199
});
200+
201+
it('defaults to Infinity when maxConcurrency is not provided', async () => {
202+
const { provider, tracker } = createTrackedProvider();
203+
204+
// Start 4 concurrent calls
205+
const promises = [0, 1, 2, 3].map((index) =>
206+
provider.createAccounts({
207+
entropySource: TEST_ENTROPY_SOURCE,
208+
groupIndex: index,
209+
}),
210+
);
211+
212+
await Promise.all(promises);
213+
214+
// All 4 operations should complete
215+
expect(tracker.startLog).toHaveLength(4);
216+
217+
// Without maxConcurrency specified, should default to Infinity (no throttling)
218+
// So all 4 should have been able to run concurrently
219+
expect(tracker.maxActiveCount).toBe(4);
220+
});
200221
});
201222
});

packages/multichain-account-service/src/providers/TrxAccountProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export class TrxAccountProvider extends SnapAccountProvider {
2929
constructor(
3030
messenger: MultichainAccountServiceMessenger,
3131
config: TrxAccountProviderConfig = {
32+
maxConcurrency: 3,
3233
discovery: {
3334
timeoutMs: 2000,
3435
maxAttempts: 3,

packages/network-controller/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313
- Providers accessible either via network clients or global proxies no longer emit events (or inherit from EventEmitter, for that matter).
1414
- Bump `@metamask/controller-utils` from `^11.14.1` to `^11.15.0` ([#7003](https://github.com/MetaMask/core/pull/7003))
1515

16+
### Fixed
17+
18+
- Ensure `networksMetadata` never references old network client IDs ([#7047](https://github.com/MetaMask/core/pull/7047))
19+
- When removing a network configuration, ensure that metadata for all RPC endpoints in the network configuration are also removed from `networksMetadata`
20+
- When initializing the controller, remove metadata for RPC endpoints in `networksMetadata` that are not present in a network configuration
21+
1622
## [25.0.0]
1723

1824
### Changed

packages/network-controller/src/NetworkController.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,12 +1082,17 @@ function correctInitialState(
10821082
const networkConfigurationsSortedByChainId = getNetworkConfigurations(
10831083
state,
10841084
).sort((a, b) => a.chainId.localeCompare(b.chainId));
1085-
const networkClientIds = getAvailableNetworkClientIds(
1085+
const availableNetworkClientIds = getAvailableNetworkClientIds(
10861086
networkConfigurationsSortedByChainId,
10871087
);
1088+
const invalidNetworkClientIdsWithMetadata = Object.keys(
1089+
state.networksMetadata,
1090+
).filter(
1091+
(networkClientId) => !availableNetworkClientIds.includes(networkClientId),
1092+
);
10881093

10891094
return produce(state, (newState) => {
1090-
if (!networkClientIds.includes(state.selectedNetworkClientId)) {
1095+
if (!availableNetworkClientIds.includes(state.selectedNetworkClientId)) {
10911096
const firstNetworkConfiguration = networkConfigurationsSortedByChainId[0];
10921097
const newSelectedNetworkClientId =
10931098
firstNetworkConfiguration.rpcEndpoints[
@@ -1101,6 +1106,18 @@ function correctInitialState(
11011106
);
11021107
newState.selectedNetworkClientId = newSelectedNetworkClientId;
11031108
}
1109+
1110+
if (invalidNetworkClientIdsWithMetadata.length > 0) {
1111+
for (const invalidNetworkClientId of invalidNetworkClientIdsWithMetadata) {
1112+
delete newState.networksMetadata[invalidNetworkClientId];
1113+
}
1114+
messenger.call(
1115+
'ErrorReportingService:captureException',
1116+
new Error(
1117+
'`networksMetadata` had invalid network client IDs, which have been removed',
1118+
),
1119+
);
1120+
}
11041121
});
11051122
}
11061123

@@ -2401,6 +2418,10 @@ export class NetworkController extends BaseController<
24012418
mode: 'remove',
24022419
existingNetworkConfiguration,
24032420
});
2421+
2422+
for (const rpcEndpoint of existingNetworkConfiguration.rpcEndpoints) {
2423+
delete state.networksMetadata[rpcEndpoint.networkClientId];
2424+
}
24042425
});
24052426

24062427
this.messenger.publish(

0 commit comments

Comments
 (0)