From 53c88bcfcd6c87f501f9bed1966308d534081f36 Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Thu, 23 Oct 2025 17:03:51 -0700 Subject: [PATCH 1/8] feat: add chainRanking LD flag types --- .../bridge-controller/src/constants/bridge.ts | 1 + packages/bridge-controller/src/types.ts | 3 +++ .../bridge-controller/src/utils/validators.ts | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/bridge-controller/src/constants/bridge.ts b/packages/bridge-controller/src/constants/bridge.ts index 3612f5becd2..6eeeb3ac5e4 100644 --- a/packages/bridge-controller/src/constants/bridge.ts +++ b/packages/bridge-controller/src/constants/bridge.ts @@ -53,6 +53,7 @@ export const DEFAULT_FEATURE_FLAG_CONFIG: FeatureFlagsPlatformConfig = { maxRefreshCount: DEFAULT_MAX_REFRESH_COUNT, support: false, chains: {}, + chainRanking: [], }; export const DEFAULT_BRIDGE_CONTROLLER_STATE: BridgeControllerState = { diff --git a/packages/bridge-controller/src/types.ts b/packages/bridge-controller/src/types.ts index fde245dde89..bc4147780bf 100644 --- a/packages/bridge-controller/src/types.ts +++ b/packages/bridge-controller/src/types.ts @@ -30,6 +30,7 @@ import type { BitcoinTradeDataSchema, BridgeAssetSchema, ChainConfigurationSchema, + ChainRankingSchema, FeatureId, FeeDataSchema, PlatformConfigSchema, @@ -65,6 +66,8 @@ export enum AssetType { export type ChainConfiguration = Infer; +export type ChainRanking = Infer; + export type L1GasFees = { l1GasFeesInHexWei?: string; // l1 fees for approval and trade in hex wei, appended by BridgeController.#appendL1GasFees }; diff --git a/packages/bridge-controller/src/utils/validators.ts b/packages/bridge-controller/src/utils/validators.ts index 3082ae0f196..873ab8feba5 100644 --- a/packages/bridge-controller/src/utils/validators.ts +++ b/packages/bridge-controller/src/utils/validators.ts @@ -17,7 +17,7 @@ import { pattern, intersection, } from '@metamask/superstruct'; -import { CaipAssetTypeStruct, isStrictHexString } from '@metamask/utils'; +import { CaipAssetTypeStruct, CaipChainIdStruct, isStrictHexString } from '@metamask/utils'; export enum FeeType { METABRIDGE = 'metabridge', @@ -101,6 +101,15 @@ const DefaultPairSchema = type({ other: record(string(), string()), }); +export const ChainRankingItemSchema = type({ + /** + * The CAIP-2 chain identifier (e.g., "eip155:1" for Ethereum mainnet) + */ + chainId: CaipChainIdStruct, +}); + +export const ChainRankingSchema = array(ChainRankingItemSchema); + export const ChainConfigurationSchema = type({ isActiveSrc: boolean(), isActiveDest: boolean(), @@ -154,6 +163,10 @@ export const PlatformConfigSchema = type({ minimumVersion: VersionStringSchema, }), ), + /** + * Array of chain objects ordered by preference/ranking + */ + chainRanking: ChainRankingSchema, }); export const validateFeatureFlagsResponse = ( From 57bb5e9f738ec9f0bb75c48c4547d91b4c568d4a Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Wed, 14 Jan 2026 11:32:38 +0100 Subject: [PATCH 2/8] chore: add default chain ranking --- .../bridge-controller/src/constants/bridge.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/bridge-controller/src/constants/bridge.ts b/packages/bridge-controller/src/constants/bridge.ts index 7f73d09d301..72accaf88a6 100644 --- a/packages/bridge-controller/src/constants/bridge.ts +++ b/packages/bridge-controller/src/constants/bridge.ts @@ -48,13 +48,30 @@ export const DEFAULT_MAX_REFRESH_COUNT = 5; export const BRIDGE_CONTROLLER_NAME = 'BridgeController'; +export const DEFAULT_CHAIN_RANKING = [ + { chainId: 'eip155:1' }, + { chainId: 'eip155:56' }, + { chainId: 'bip122:000000000019d6689c085ae165831e93' }, + { chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' }, + { chainId: 'tron:728126428' }, + { chainId: 'eip155:8453' }, + { chainId: 'eip155:42161' }, + { chainId: 'eip155:59144' }, + { chainId: 'eip155:137' }, + { chainId: 'eip155:43114' }, + { chainId: 'eip155:10' }, + { chainId: 'eip155:143' }, + { chainId: 'eip155:1329' }, + { chainId: 'eip155:324' }, +] as const; + export const DEFAULT_FEATURE_FLAG_CONFIG: FeatureFlagsPlatformConfig = { minimumVersion: '0.0.0', refreshRate: REFRESH_INTERVAL_MS, maxRefreshCount: DEFAULT_MAX_REFRESH_COUNT, support: false, chains: {}, - chainRanking: [], + chainRanking: [...DEFAULT_CHAIN_RANKING], }; export const DEFAULT_BRIDGE_CONTROLLER_STATE: BridgeControllerState = { From 2c4b0945760659d196e0a2c5856a3bb388c1c5f4 Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Wed, 14 Jan 2026 14:20:50 +0100 Subject: [PATCH 3/8] chore: prettier --- packages/bridge-controller/src/utils/validators.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/bridge-controller/src/utils/validators.ts b/packages/bridge-controller/src/utils/validators.ts index 9e1cdde66fc..8d66ba1f1bb 100644 --- a/packages/bridge-controller/src/utils/validators.ts +++ b/packages/bridge-controller/src/utils/validators.ts @@ -17,7 +17,11 @@ import { pattern, intersection, } from '@metamask/superstruct'; -import { CaipAssetTypeStruct, CaipChainIdStruct, isStrictHexString } from '@metamask/utils'; +import { + CaipAssetTypeStruct, + CaipChainIdStruct, + isStrictHexString, +} from '@metamask/utils'; export enum FeeType { METABRIDGE = 'metabridge', From 23a6d2d02928337adc74ab984ad895d294e45af9 Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Wed, 14 Jan 2026 14:47:11 +0100 Subject: [PATCH 4/8] test: add chainRanking to tests --- .../bridge-controller/src/bridge-controller.sse.test.ts | 1 + packages/bridge-controller/src/bridge-controller.test.ts | 1 + packages/bridge-controller/src/utils/feature-flags.test.ts | 3 +++ packages/bridge-controller/src/utils/validators.test.ts | 6 ++++++ 4 files changed, 11 insertions(+) diff --git a/packages/bridge-controller/src/bridge-controller.sse.test.ts b/packages/bridge-controller/src/bridge-controller.sse.test.ts index 37912d87b07..e86e967e91a 100644 --- a/packages/bridge-controller/src/bridge-controller.sse.test.ts +++ b/packages/bridge-controller/src/bridge-controller.sse.test.ts @@ -118,6 +118,7 @@ describe('BridgeController SSE', function () { isActiveDest: true, }, }, + chainRanking: [{ chainId: 'eip155:1' as const }], }); bridgeController = new BridgeController({ diff --git a/packages/bridge-controller/src/bridge-controller.test.ts b/packages/bridge-controller/src/bridge-controller.test.ts index 545c045de33..14881f98d0d 100644 --- a/packages/bridge-controller/src/bridge-controller.test.ts +++ b/packages/bridge-controller/src/bridge-controller.test.ts @@ -2700,6 +2700,7 @@ describe('BridgeController', function () { enabled: true, minimumVersion: '13.8.0', }, + chainRanking: [{ chainId: 'eip155:1' as const }], }; const quotesByDecreasingProcessingTime = [...mockBridgeQuotesSolErc20]; diff --git a/packages/bridge-controller/src/utils/feature-flags.test.ts b/packages/bridge-controller/src/utils/feature-flags.test.ts index 07bf3542190..c3883daec4a 100644 --- a/packages/bridge-controller/src/utils/feature-flags.test.ts +++ b/packages/bridge-controller/src/utils/feature-flags.test.ts @@ -46,6 +46,7 @@ describe('feature-flags', () => { isActiveDest: true, }, }, + chainRanking: [], }; const result = formatFeatureFlags(bridgeConfig); @@ -95,6 +96,7 @@ describe('feature-flags', () => { support: true, minimumVersion: '0.0.0', chains: {}, + chainRanking: [], }; const result = formatFeatureFlags(bridgeConfig); @@ -124,6 +126,7 @@ describe('feature-flags', () => { isActiveDest: false, }, }, + chainRanking: [], }; const result = formatFeatureFlags(bridgeConfig); diff --git a/packages/bridge-controller/src/utils/validators.test.ts b/packages/bridge-controller/src/utils/validators.test.ts index 24298e11d52..848f4a1438f 100644 --- a/packages/bridge-controller/src/utils/validators.test.ts +++ b/packages/bridge-controller/src/utils/validators.test.ts @@ -28,6 +28,7 @@ describe('validators', () => { refreshRate: 30000, support: true, minimumVersion: '0.0.0', + chainRanking: [{ chainId: 'eip155:1' }], }, type: 'all evm chains active', expected: true, @@ -39,6 +40,7 @@ describe('validators', () => { refreshRate: 3000000, support: false, minimumVersion: '0.0.0', + chainRanking: [], }, type: 'bridge disabled', expected: true, @@ -103,6 +105,7 @@ describe('validators', () => { refreshRate: 30000, support: true, minimumVersion: '0.0.0', + chainRanking: [{ chainId: 'eip155:1' }], }, type: 'evm and solana chain config', expected: true, @@ -200,6 +203,7 @@ describe('validators', () => { refreshRate: 30000, support: true, minimumVersion: '0.0.0', + chainRanking: [{ chainId: 'eip155:1' }], }, type: 'evm and solana chain config + bip44 default pairs', expected: true, @@ -227,6 +231,7 @@ describe('validators', () => { enabled: true, minimumVersion: '13.8.0', }, + chainRanking: [{ chainId: 'eip155:1' }], }, type: 'sse config', expected: true, @@ -306,6 +311,7 @@ describe('validators', () => { support: true, minimumVersion: '0.0.0', extraField: 'foo', + chainRanking: [{ chainId: 'eip155:1' }], }, type: 'all evm chains active + an extra field not specified in the schema', expected: true, From 8f12dc9e597020b085a88f2fe4af854dbfa0546c Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Wed, 14 Jan 2026 15:09:16 +0100 Subject: [PATCH 5/8] test: fix tests --- packages/bridge-controller/src/selectors.test.ts | 4 ++-- packages/bridge-controller/src/utils/feature-flags.test.ts | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/bridge-controller/src/selectors.test.ts b/packages/bridge-controller/src/selectors.test.ts index 97e241a94b7..aa300c6c340 100644 --- a/packages/bridge-controller/src/selectors.test.ts +++ b/packages/bridge-controller/src/selectors.test.ts @@ -256,7 +256,7 @@ describe('Bridge Selectors', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any ...(mockState.remoteFeatureFlags.bridgeConfig as any), chains: { - '1': { + 'eip155:1': { refreshRate: 41000, isActiveSrc: true, isActiveDest: true, @@ -288,7 +288,7 @@ describe('Bridge Selectors', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any ...(mockState.remoteFeatureFlags.bridgeConfig as any), chains: { - '1': { + 'eip155:1': { refreshRate: 41000, isActiveSrc: true, isActiveDest: true, diff --git a/packages/bridge-controller/src/utils/feature-flags.test.ts b/packages/bridge-controller/src/utils/feature-flags.test.ts index c3883daec4a..b16543c7bd8 100644 --- a/packages/bridge-controller/src/utils/feature-flags.test.ts +++ b/packages/bridge-controller/src/utils/feature-flags.test.ts @@ -376,6 +376,7 @@ describe('feature-flags', () => { isActiveDest: true, }, }, + chainRanking: [], }; const bridgeConfig = { @@ -389,6 +390,7 @@ describe('feature-flags', () => { isActiveDest: true, }, }, + chainRanking: [], }; const remoteFeatureFlagControllerState = { @@ -417,6 +419,7 @@ describe('feature-flags', () => { isActiveDest: true, }, }, + chainRanking: [], }; expect(result).toStrictEqual(expectedBridgeConfig); @@ -434,6 +437,7 @@ describe('feature-flags', () => { isActiveDest: true, }, }, + chainRanking: [], }; const remoteFeatureFlagControllerState = { @@ -461,6 +465,7 @@ describe('feature-flags', () => { isActiveDest: true, }, }, + chainRanking: [], }; expect(result).toStrictEqual(expectedBridgeConfig); From 0f103717166b6ba1ddbf9296163e1da7e74ad9e4 Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Wed, 14 Jan 2026 15:55:24 +0100 Subject: [PATCH 6/8] chore: add "name" to chainRanking --- .../src/bridge-controller.sse.test.ts | 2 +- .../src/bridge-controller.test.ts | 2 +- .../bridge-controller/src/constants/bridge.ts | 28 +++++++++---------- .../src/utils/validators.test.ts | 10 +++---- .../bridge-controller/src/utils/validators.ts | 4 +++ 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/bridge-controller/src/bridge-controller.sse.test.ts b/packages/bridge-controller/src/bridge-controller.sse.test.ts index e86e967e91a..6414105ff7b 100644 --- a/packages/bridge-controller/src/bridge-controller.sse.test.ts +++ b/packages/bridge-controller/src/bridge-controller.sse.test.ts @@ -118,7 +118,7 @@ describe('BridgeController SSE', function () { isActiveDest: true, }, }, - chainRanking: [{ chainId: 'eip155:1' as const }], + chainRanking: [{ chainId: 'eip155:1' as const, name: 'Ethereum' }], }); bridgeController = new BridgeController({ diff --git a/packages/bridge-controller/src/bridge-controller.test.ts b/packages/bridge-controller/src/bridge-controller.test.ts index 14881f98d0d..bcc8c78478d 100644 --- a/packages/bridge-controller/src/bridge-controller.test.ts +++ b/packages/bridge-controller/src/bridge-controller.test.ts @@ -2700,7 +2700,7 @@ describe('BridgeController', function () { enabled: true, minimumVersion: '13.8.0', }, - chainRanking: [{ chainId: 'eip155:1' as const }], + chainRanking: [{ chainId: 'eip155:1' as const, name: 'Ethereum' }], }; const quotesByDecreasingProcessingTime = [...mockBridgeQuotesSolErc20]; diff --git a/packages/bridge-controller/src/constants/bridge.ts b/packages/bridge-controller/src/constants/bridge.ts index 72accaf88a6..f76333b24a4 100644 --- a/packages/bridge-controller/src/constants/bridge.ts +++ b/packages/bridge-controller/src/constants/bridge.ts @@ -49,20 +49,20 @@ export const DEFAULT_MAX_REFRESH_COUNT = 5; export const BRIDGE_CONTROLLER_NAME = 'BridgeController'; export const DEFAULT_CHAIN_RANKING = [ - { chainId: 'eip155:1' }, - { chainId: 'eip155:56' }, - { chainId: 'bip122:000000000019d6689c085ae165831e93' }, - { chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' }, - { chainId: 'tron:728126428' }, - { chainId: 'eip155:8453' }, - { chainId: 'eip155:42161' }, - { chainId: 'eip155:59144' }, - { chainId: 'eip155:137' }, - { chainId: 'eip155:43114' }, - { chainId: 'eip155:10' }, - { chainId: 'eip155:143' }, - { chainId: 'eip155:1329' }, - { chainId: 'eip155:324' }, + { chainId: 'eip155:1', name: 'Ethereum' }, + { chainId: 'eip155:56', name: 'BNB' }, + { chainId: 'bip122:000000000019d6689c085ae165831e93', name: 'BTC' }, + { chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', name: 'Solana' }, + { chainId: 'tron:728126428', name: 'Tron' }, + { chainId: 'eip155:8453', name: 'Base' }, + { chainId: 'eip155:42161', name: 'Arbitrum' }, + { chainId: 'eip155:59144', name: 'Linea' }, + { chainId: 'eip155:137', name: 'Polygon' }, + { chainId: 'eip155:43114', name: 'Avalanche' }, + { chainId: 'eip155:10', name: 'Optimism' }, + { chainId: 'eip155:143', name: 'Monad' }, + { chainId: 'eip155:1329', name: 'Sei' }, + { chainId: 'eip155:324', name: 'zkSync' }, ] as const; export const DEFAULT_FEATURE_FLAG_CONFIG: FeatureFlagsPlatformConfig = { diff --git a/packages/bridge-controller/src/utils/validators.test.ts b/packages/bridge-controller/src/utils/validators.test.ts index 848f4a1438f..06bfeab351e 100644 --- a/packages/bridge-controller/src/utils/validators.test.ts +++ b/packages/bridge-controller/src/utils/validators.test.ts @@ -28,7 +28,7 @@ describe('validators', () => { refreshRate: 30000, support: true, minimumVersion: '0.0.0', - chainRanking: [{ chainId: 'eip155:1' }], + chainRanking: [{ chainId: 'eip155:1', name: 'Ethereum' }], }, type: 'all evm chains active', expected: true, @@ -105,7 +105,7 @@ describe('validators', () => { refreshRate: 30000, support: true, minimumVersion: '0.0.0', - chainRanking: [{ chainId: 'eip155:1' }], + chainRanking: [{ chainId: 'eip155:1', name: 'Ethereum' }], }, type: 'evm and solana chain config', expected: true, @@ -203,7 +203,7 @@ describe('validators', () => { refreshRate: 30000, support: true, minimumVersion: '0.0.0', - chainRanking: [{ chainId: 'eip155:1' }], + chainRanking: [{ chainId: 'eip155:1', name: 'Ethereum' }], }, type: 'evm and solana chain config + bip44 default pairs', expected: true, @@ -231,7 +231,7 @@ describe('validators', () => { enabled: true, minimumVersion: '13.8.0', }, - chainRanking: [{ chainId: 'eip155:1' }], + chainRanking: [{ chainId: 'eip155:1', name: 'Ethereum' }], }, type: 'sse config', expected: true, @@ -311,7 +311,7 @@ describe('validators', () => { support: true, minimumVersion: '0.0.0', extraField: 'foo', - chainRanking: [{ chainId: 'eip155:1' }], + chainRanking: [{ chainId: 'eip155:1', name: 'Ethereum' }], }, type: 'all evm chains active + an extra field not specified in the schema', expected: true, diff --git a/packages/bridge-controller/src/utils/validators.ts b/packages/bridge-controller/src/utils/validators.ts index 8d66ba1f1bb..b9135361a46 100644 --- a/packages/bridge-controller/src/utils/validators.ts +++ b/packages/bridge-controller/src/utils/validators.ts @@ -110,6 +110,10 @@ export const ChainRankingItemSchema = type({ * The CAIP-2 chain identifier (e.g., "eip155:1" for Ethereum mainnet) */ chainId: CaipChainIdStruct, + /** + * The display name of the chain (e.g., "Ethereum Mainnet") + */ + name: string(), }); export const ChainRankingSchema = array(ChainRankingItemSchema); From 54e95a04cec47503f0d15c24bcb07800885f4164 Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Fri, 16 Jan 2026 19:04:57 +0100 Subject: [PATCH 7/8] test: fix tests --- .../bridge-controller/src/bridge-controller.test.ts | 1 + packages/bridge-controller/src/selectors.test.ts | 11 +++++++++++ .../bridge-controller/src/utils/feature-flags.test.ts | 7 +++++++ packages/bridge-controller/src/utils/validators.ts | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/bridge-controller/src/bridge-controller.test.ts b/packages/bridge-controller/src/bridge-controller.test.ts index bcc8c78478d..e2d219a2f1e 100644 --- a/packages/bridge-controller/src/bridge-controller.test.ts +++ b/packages/bridge-controller/src/bridge-controller.test.ts @@ -72,6 +72,7 @@ const bridgeConfig = { maxRefreshCount: 3, refreshRate: 3, support: true, + chainRanking: [], chains: { '10': { isActiveSrc: true, isActiveDest: false }, '534352': { isActiveSrc: true, isActiveDest: false }, diff --git a/packages/bridge-controller/src/selectors.test.ts b/packages/bridge-controller/src/selectors.test.ts index aa300c6c340..07065b7ee0c 100644 --- a/packages/bridge-controller/src/selectors.test.ts +++ b/packages/bridge-controller/src/selectors.test.ts @@ -4,6 +4,7 @@ import { toHex } from '@metamask/controller-utils'; import { SolScope } from '@metamask/keyring-api'; import { BigNumber } from 'bignumber.js'; +import { DEFAULT_CHAIN_RANKING } from './constants/bridge'; import type { BridgeAppState } from './selectors'; import { selectExchangeRateByChainIdAndAddress, @@ -194,6 +195,7 @@ describe('Bridge Selectors', () => { bridgeConfig: { maxRefreshCount: 5, refreshRate: 30000, + chainRanking: [], chains: {}, support: true, minimumVersion: '0.0.0', @@ -255,6 +257,7 @@ describe('Bridge Selectors', () => { bridgeConfig: { // eslint-disable-next-line @typescript-eslint/no-explicit-any ...(mockState.remoteFeatureFlags.bridgeConfig as any), + chainRanking: [], chains: { 'eip155:1': { refreshRate: 41000, @@ -287,6 +290,7 @@ describe('Bridge Selectors', () => { bridgeConfig: { // eslint-disable-next-line @typescript-eslint/no-explicit-any ...(mockState.remoteFeatureFlags.bridgeConfig as any), + chainRanking: [], chains: { 'eip155:1': { refreshRate: 41000, @@ -373,6 +377,7 @@ describe('Bridge Selectors', () => { minimumVersion: '0.0.0', maxRefreshCount: 5, refreshRate: 30000, + chainRanking: [], chains: {}, support: true, }, @@ -1087,6 +1092,7 @@ describe('Bridge Selectors', () => { refreshRate: 3, maxRefreshCount: 1, support: true, + chainRanking: [], chains: { '1': { isActiveSrc: true, @@ -1138,6 +1144,7 @@ describe('Bridge Selectors', () => { refreshRate: 3, maxRefreshCount: 1, support: true, + chainRanking: [], chains: { 'eip155:1': { isActiveSrc: true, @@ -1182,6 +1189,7 @@ describe('Bridge Selectors', () => { minimumVersion: '0.0.0', maxRefreshCount: 5, refreshRate: 30000, + chainRanking: [...DEFAULT_CHAIN_RANKING], chains: {}, support: false, }); @@ -1197,6 +1205,7 @@ describe('Bridge Selectors', () => { minimumVersion: '0.0.0', maxRefreshCount: 5, refreshRate: 30000, + chainRanking: [...DEFAULT_CHAIN_RANKING], chains: {}, support: false, }); @@ -1213,6 +1222,7 @@ describe('Bridge Selectors', () => { minimumVersion: '0.0.0', maxRefreshCount: 5, refreshRate: 30000, + chainRanking: [...DEFAULT_CHAIN_RANKING], chains: {}, support: false, }); @@ -1265,6 +1275,7 @@ describe('Bridge Selectors', () => { refreshRate: 3, maxRefreshCount: 1, support: true, + chainRanking: [], chains: { '1': { isActiveSrc: true, diff --git a/packages/bridge-controller/src/utils/feature-flags.test.ts b/packages/bridge-controller/src/utils/feature-flags.test.ts index b16543c7bd8..262bfec7270 100644 --- a/packages/bridge-controller/src/utils/feature-flags.test.ts +++ b/packages/bridge-controller/src/utils/feature-flags.test.ts @@ -3,6 +3,7 @@ import { getBridgeFeatureFlags, hasMinimumRequiredVersion, } from './feature-flags'; +import { DEFAULT_CHAIN_RANKING } from '../constants/bridge'; import type { FeatureFlagsPlatformConfig, BridgeControllerMessenger, @@ -56,6 +57,7 @@ describe('feature-flags', () => { maxRefreshCount: 1, support: true, minimumVersion: '0.0.0', + chainRanking: [], chains: { 'eip155:1': { isActiveSrc: true, @@ -106,6 +108,7 @@ describe('feature-flags', () => { maxRefreshCount: 1, support: true, minimumVersion: '0.0.0', + chainRanking: [], chains: {}, }); }); @@ -136,6 +139,7 @@ describe('feature-flags', () => { maxRefreshCount: 1, support: true, minimumVersion: '0.0.0', + chainRanking: [], chains: { 'eip155:invalid': { isActiveSrc: true, @@ -163,6 +167,7 @@ describe('feature-flags', () => { maxRefreshCount: 1, support: true, minimumVersion: '0.0.0', + chainRanking: [], chains: { '1': { isActiveSrc: true, @@ -251,6 +256,7 @@ describe('feature-flags', () => { refreshRate: 3, support: true, minimumVersion: '0.0.0', + chainRanking: [], chains: { 'eip155:1': { isActiveDest: true, @@ -359,6 +365,7 @@ describe('feature-flags', () => { refreshRate: 30000, support: false, minimumVersion: '0.0.0', + chainRanking: [...DEFAULT_CHAIN_RANKING], chains: {}, }; expect(result).toStrictEqual(expectedBridgeConfig); diff --git a/packages/bridge-controller/src/utils/validators.ts b/packages/bridge-controller/src/utils/validators.ts index b9135361a46..eac03926d2a 100644 --- a/packages/bridge-controller/src/utils/validators.ts +++ b/packages/bridge-controller/src/utils/validators.ts @@ -111,7 +111,7 @@ export const ChainRankingItemSchema = type({ */ chainId: CaipChainIdStruct, /** - * The display name of the chain (e.g., "Ethereum Mainnet") + * The display name of the chain (e.g., "Ethereum") */ name: string(), }); From a4747b2b42d880ecd4a4381a40822d5a15e6798a Mon Sep 17 00:00:00 2001 From: Bryan Fullam Date: Fri, 16 Jan 2026 19:41:48 +0100 Subject: [PATCH 8/8] chore: changelog --- packages/bridge-controller/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/bridge-controller/CHANGELOG.md b/packages/bridge-controller/CHANGELOG.md index 9676e76a633..7ca40f1e9d8 100644 --- a/packages/bridge-controller/CHANGELOG.md +++ b/packages/bridge-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Added chainRanking type to feature flags ([#6933](https://github.com/MetaMask/core/pull/6933)) + ## [64.5.1] ### Changed