diff --git a/lib/chains/Chain.ts b/lib/chains/Chain.ts index 1d954f2ae..03dcd7f73 100644 --- a/lib/chains/Chain.ts +++ b/lib/chains/Chain.ts @@ -16,7 +16,7 @@ export interface ChainOptions { explorerUrl?: string; etherscanCompatibleApiUrl?: string; rpc?: { - main?: string; + main?: string | string[]; logs?: string; free?: string; }; @@ -88,9 +88,16 @@ export class Chain { return this.options.rpc?.free ?? rpcUrl ?? this.getRpcUrl(); } + getRpcUrls(): string[] { + const baseRpcUrls = + getChain(this.chainId)?.rpc?.map((url) => url.replace('${INFURA_API_KEY}', INFURA_API_KEY)) ?? []; + const specifiedRpcUrls = [this.options.rpc?.main].flat().filter(Boolean); + const rpcOverrides = RPC_OVERRIDES[this.chainId] ? [RPC_OVERRIDES[this.chainId]] : []; + return [...rpcOverrides, ...specifiedRpcUrls, ...baseRpcUrls]; + } + getRpcUrl(): string { - const defaultRpcUrl = getChain(this.chainId)?.rpc?.at(0)?.replace('${INFURA_API_KEY}', INFURA_API_KEY); - return RPC_OVERRIDES[this.chainId] ?? this.options.rpc?.main ?? defaultRpcUrl; + return this.getRpcUrls()[0]; } getLogsRpcUrl(): string { diff --git a/lib/utils/chains.ts b/lib/utils/chains.ts index 4e18bb25b..0cdb1b084 100644 --- a/lib/utils/chains.ts +++ b/lib/utils/chains.ts @@ -2232,6 +2232,10 @@ export const getChainRpcUrl = (chainId: number): string | undefined => { return getChainConfig(chainId)?.getRpcUrl(); }; +export const getChainRpcUrls = (chainId: number): string[] | undefined => { + return getChainConfig(chainId)?.getRpcUrls(); +}; + export const getChainLogsRpcUrl = (chainId: number): string | undefined => { return getChainConfig(chainId)?.getLogsRpcUrl(); };