diff --git a/packages/controller-utils/src/constants.ts b/packages/controller-utils/src/constants.ts index 73e61fc22cb..e3fb1c7f91c 100644 --- a/packages/controller-utils/src/constants.ts +++ b/packages/controller-utils/src/constants.ts @@ -67,6 +67,10 @@ export const BUILT_IN_CUSTOM_NETWORKS_RPC = { 'megaeth-testnet': 'https://carrot.megaeth.com/rpc', 'megaeth-testnet-v2': 'https://carrot.megaeth.com/rpc', 'monad-testnet': 'https://testnet-rpc.monad.xyz', + // Mainnet networks with custom RPC URLs + 'hyper-evm-mainnet': 'https://rpc.hyperliquid.xyz/evm', + 'zksync-era-mainnet': 'https://mainnet.era.zksync.io', + 'megaeth-mainnet': 'https://mainnet.megaeth.com/rpc', }; /** @@ -178,6 +182,54 @@ export const BUILT_IN_NETWORKS = { blockExplorerUrl: BlockExplorerUrl['sei-mainnet'], }, }, + // Avalanche + [NetworkType['avalanche-mainnet']]: { + chainId: ChainId['avalanche-mainnet'], + ticker: NetworksTicker['avalanche-mainnet'], + rpcPrefs: { + blockExplorerUrl: BlockExplorerUrl['avalanche-mainnet'], + }, + }, + // HyperEVM + [NetworkType['hyper-evm-mainnet']]: { + chainId: ChainId['hyper-evm-mainnet'], + ticker: NetworksTicker['hyper-evm-mainnet'], + rpcPrefs: { + blockExplorerUrl: BlockExplorerUrl['hyper-evm-mainnet'], + }, + }, + // Palm + [NetworkType['palm-mainnet']]: { + chainId: ChainId['palm-mainnet'], + ticker: NetworksTicker['palm-mainnet'], + rpcPrefs: { + blockExplorerUrl: BlockExplorerUrl['palm-mainnet'], + }, + }, + // zkSync Era + [NetworkType['zksync-era-mainnet']]: { + chainId: ChainId['zksync-era-mainnet'], + ticker: NetworksTicker['zksync-era-mainnet'], + rpcPrefs: { + blockExplorerUrl: BlockExplorerUrl['zksync-era-mainnet'], + }, + }, + // Monad + [NetworkType['monad-mainnet']]: { + chainId: ChainId['monad-mainnet'], + ticker: NetworksTicker['monad-mainnet'], + rpcPrefs: { + blockExplorerUrl: BlockExplorerUrl['monad-mainnet'], + }, + }, + // MegaEth + [NetworkType['megaeth-mainnet']]: { + chainId: ChainId['megaeth-mainnet'], + ticker: NetworksTicker['megaeth-mainnet'], + rpcPrefs: { + blockExplorerUrl: BlockExplorerUrl['megaeth-mainnet'], + }, + }, [NetworkType.rpc]: { chainId: undefined, blockExplorerUrl: undefined, @@ -198,7 +250,7 @@ export const NETWORKS_BYPASSING_VALIDATION = { '0x3e7': { name: 'HyperEVM', symbol: 'HYPE', - rpcUrl: 'https://rpc.hyperliquid.xyz', + rpcUrl: 'https://rpc.hyperliquid.xyz/evm', }, }; diff --git a/packages/controller-utils/src/types.ts b/packages/controller-utils/src/types.ts index 6eb15887799..ec624d56a7f 100644 --- a/packages/controller-utils/src/types.ts +++ b/packages/controller-utils/src/types.ts @@ -14,6 +14,18 @@ export const InfuraNetworkType = { 'optimism-mainnet': 'optimism-mainnet', 'polygon-mainnet': 'polygon-mainnet', 'sei-mainnet': 'sei-mainnet', + // Avalanche + 'avalanche-mainnet': 'avalanche-mainnet', + // HyperEVM + 'hyper-evm-mainnet': 'hyper-evm-mainnet', + // Palm + 'palm-mainnet': 'palm-mainnet', + // zkSync Era + 'zksync-era-mainnet': 'zksync-era-mainnet', + // Monad + 'monad-mainnet': 'monad-mainnet', + // MegaEth + 'megaeth-mainnet': 'megaeth-mainnet', } as const; export type InfuraNetworkType = @@ -98,6 +110,12 @@ export enum BuiltInNetworkName { OptimismMainnet = 'optimism-mainnet', PolygonMainnet = 'polygon-mainnet', SeiMainnet = 'sei-mainnet', + AvalancheMainnet = 'avalanche-mainnet', + HyperEVMMainnet = 'hyper-evm-mainnet', + PalmMainnet = 'palm-mainnet', + ZkSyncEraMainnet = 'zksync-era-mainnet', + MonadMainnet = 'monad-mainnet', + MegaEthMainnet = 'megaeth-mainnet', } /** @@ -125,6 +143,12 @@ export const ChainId = { [BuiltInNetworkName.OptimismMainnet]: '0xa', // toHex(10) [BuiltInNetworkName.PolygonMainnet]: '0x89', // toHex(137) [BuiltInNetworkName.SeiMainnet]: '0x531', // toHex(1329) + [BuiltInNetworkName.AvalancheMainnet]: '0xa86a', // toHex(43114) + [BuiltInNetworkName.HyperEVMMainnet]: '0x3e7', // toHex(999) + [BuiltInNetworkName.PalmMainnet]: '0x2a15c308d', // toHex(11297108109) + [BuiltInNetworkName.ZkSyncEraMainnet]: '0x144', // toHex(324) + [BuiltInNetworkName.MonadMainnet]: '0x8f', // toHex(143) + [BuiltInNetworkName.MegaEthMainnet]: '0x10e6', // toHex(4326) } as const; export type ChainId = (typeof ChainId)[keyof typeof ChainId]; @@ -154,6 +178,12 @@ export enum NetworksTicker { 'optimism-mainnet' = 'ETH', 'polygon-mainnet' = 'POL', 'sei-mainnet' = 'SEI', + 'avalanche-mainnet' = 'AVAX', + 'hyper-evm-mainnet' = 'HYPE', + 'palm-mainnet' = 'PALM', + 'zksync-era-mainnet' = 'ZKSYNC', + 'monad-mainnet' = 'MONAD', + 'megaeth-mainnet' = 'MEGAETH', rpc = '', } /* eslint-enable @typescript-eslint/naming-convention */ @@ -177,7 +207,13 @@ export const BlockExplorerUrl = { [BuiltInNetworkName.BscMainnet]: 'https://bscscan.com', [BuiltInNetworkName.OptimismMainnet]: 'https://optimistic.etherscan.io', [BuiltInNetworkName.PolygonMainnet]: 'https://polygonscan.com', - [BuiltInNetworkName.SeiMainnet]: 'https://seitrace.com', + [BuiltInNetworkName.SeiMainnet]: 'https://seitrace.com/', + [BuiltInNetworkName.AvalancheMainnet]: 'https://snowtrace.io', + [BuiltInNetworkName.HyperEVMMainnet]: 'https://hyperevmscan.io/', + [BuiltInNetworkName.PalmMainnet]: 'https://palm.chainlens.com', + [BuiltInNetworkName.ZkSyncEraMainnet]: 'https://explorer.zksync.io/', + [BuiltInNetworkName.MonadMainnet]: 'https://monadscan.com/', + [BuiltInNetworkName.MegaEthMainnet]: 'https://explorer.megaeth.com', } as const satisfies Record; export type BlockExplorerUrl = (typeof BlockExplorerUrl)[keyof typeof BlockExplorerUrl]; @@ -201,6 +237,12 @@ export const NetworkNickname = { [BuiltInNetworkName.OptimismMainnet]: 'Optimism Mainnet', [BuiltInNetworkName.PolygonMainnet]: 'Polygon Mainnet', [BuiltInNetworkName.SeiMainnet]: 'Sei Mainnet', + [BuiltInNetworkName.AvalancheMainnet]: 'Avalanche Mainnet', + [BuiltInNetworkName.HyperEVMMainnet]: 'HyperEVM Mainnet', + [BuiltInNetworkName.PalmMainnet]: 'Palm Mainnet', + [BuiltInNetworkName.ZkSyncEraMainnet]: 'zkSync Era Mainnet', + [BuiltInNetworkName.MonadMainnet]: 'Monad Mainnet', + [BuiltInNetworkName.MegaEthMainnet]: 'MegaETH Mainnet', } as const satisfies Record; export type NetworkNickname = (typeof NetworkNickname)[keyof typeof NetworkNickname]; diff --git a/packages/network-enablement-controller/src/NetworkEnablementController.ts b/packages/network-enablement-controller/src/NetworkEnablementController.ts index dcbaac6fd36..e941d7e4dbc 100644 --- a/packages/network-enablement-controller/src/NetworkEnablementController.ts +++ b/packages/network-enablement-controller/src/NetworkEnablementController.ts @@ -153,38 +153,40 @@ export type NetworkConfig = { * @returns The default state with pre-enabled networks. */ const getDefaultNetworkEnablementControllerState = - (): NetworkEnablementControllerState => ({ - enabledNetworkMap: { - [KnownCaipNamespace.Eip155]: { - [ChainId[BuiltInNetworkName.Mainnet]]: true, - [ChainId[BuiltInNetworkName.LineaMainnet]]: true, - [ChainId[BuiltInNetworkName.BaseMainnet]]: true, - [ChainId[BuiltInNetworkName.ArbitrumOne]]: true, - [ChainId[BuiltInNetworkName.BscMainnet]]: true, - [ChainId[BuiltInNetworkName.OptimismMainnet]]: true, - [ChainId[BuiltInNetworkName.PolygonMainnet]]: true, - [ChainId[BuiltInNetworkName.SeiMainnet]]: true, + (): NetworkEnablementControllerState => { + // Build the enabled EVM networks map from POPULAR_NETWORKS + const evmNetworks = POPULAR_NETWORKS.reduce>( + (acc, chainId) => { + acc[chainId as Hex] = true; + return acc; }, - [KnownCaipNamespace.Solana]: { - [SolScope.Mainnet]: true, - [SolScope.Testnet]: false, - [SolScope.Devnet]: false, - }, - [KnownCaipNamespace.Bip122]: { - [BtcScope.Mainnet]: true, - [BtcScope.Testnet]: false, - [BtcScope.Signet]: false, - }, - [KnownCaipNamespace.Tron]: { - [TrxScope.Mainnet]: true, - [TrxScope.Nile]: false, - [TrxScope.Shasta]: false, + {}, + ); + + return { + enabledNetworkMap: { + [KnownCaipNamespace.Eip155]: evmNetworks, + [KnownCaipNamespace.Solana]: { + [SolScope.Mainnet]: true, + [SolScope.Testnet]: false, + [SolScope.Devnet]: false, + }, + [KnownCaipNamespace.Bip122]: { + [BtcScope.Mainnet]: true, + [BtcScope.Testnet]: false, + [BtcScope.Signet]: false, + }, + [KnownCaipNamespace.Tron]: { + [TrxScope.Mainnet]: true, + [TrxScope.Nile]: false, + [TrxScope.Shasta]: false, + }, }, - }, - // nativeAssetIdentifiers is initialized as empty and should be populated - // by the client using initNativeAssetIdentifiers() during controller init - nativeAssetIdentifiers: {}, - }); + // nativeAssetIdentifiers is initialized as empty and should be populated + // by the client using initNativeAssetIdentifiers() during controller init + nativeAssetIdentifiers: {}, + }; + }; // Metadata for the controller state const metadata = {