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 cc30e8b50e5..e108e0bbcc7 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 6c6ffec0180..0f957091db5 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 = (