diff --git a/packages/nextjs/scaffold.config.ts b/packages/nextjs/scaffold.config.ts index 356076851..4d7f1e215 100644 --- a/packages/nextjs/scaffold.config.ts +++ b/packages/nextjs/scaffold.config.ts @@ -4,6 +4,7 @@ export type ScaffoldConfig = { targetNetworks: readonly chains.Chain[]; pollingInterval: number; alchemyApiKey: string; + rpcOverrides?: Record; walletConnectProjectId: string; onlyLocalBurnerWallet: boolean; }; @@ -24,6 +25,13 @@ const scaffoldConfig = { // .env.local for local testing, and in the Vercel/system env config for live apps. alchemyApiKey: process.env.NEXT_PUBLIC_ALCHEMY_API_KEY || DEFAULT_ALCHEMY_API_KEY, + // If you want to use a different RPC for a specific network, you can add it here. + // The key is the chain ID, and the value is the HTTP RPC URL + rpcOverrides: { + // Example: + // [chains.mainnet.id]: "https://mainnet.buidlguidl.com", + }, + // This is ours WalletConnect's default project ID. // You can get your own at https://cloud.walletconnect.com // It's recommended to store it in an env variable: diff --git a/packages/nextjs/services/web3/wagmiConfig.tsx b/packages/nextjs/services/web3/wagmiConfig.tsx index 37253daf4..854bad387 100644 --- a/packages/nextjs/services/web3/wagmiConfig.tsx +++ b/packages/nextjs/services/web3/wagmiConfig.tsx @@ -2,7 +2,7 @@ import { wagmiConnectors } from "./wagmiConnectors"; import { Chain, createClient, fallback, http } from "viem"; import { hardhat, mainnet } from "viem/chains"; import { createConfig } from "wagmi"; -import scaffoldConfig, { DEFAULT_ALCHEMY_API_KEY } from "~~/scaffold.config"; +import scaffoldConfig, { DEFAULT_ALCHEMY_API_KEY, ScaffoldConfig } from "~~/scaffold.config"; import { getAlchemyHttpUrl } from "~~/utils/scaffold-eth"; const { targetNetworks } = scaffoldConfig; @@ -19,11 +19,16 @@ export const wagmiConfig = createConfig({ client({ chain }) { let rpcFallbacks = [http()]; - const alchemyHttpUrl = getAlchemyHttpUrl(chain.id); - if (alchemyHttpUrl) { - const isUsingDefaultKey = scaffoldConfig.alchemyApiKey === DEFAULT_ALCHEMY_API_KEY; - // If using default Scaffold-ETH 2 API key, we prioritize the default RPC - rpcFallbacks = isUsingDefaultKey ? [http(), http(alchemyHttpUrl)] : [http(alchemyHttpUrl), http()]; + const rpcOverrideUrl = (scaffoldConfig.rpcOverrides as ScaffoldConfig["rpcOverrides"])?.[chain.id]; + if (rpcOverrideUrl) { + rpcFallbacks = [http(rpcOverrideUrl), http()]; + } else { + const alchemyHttpUrl = getAlchemyHttpUrl(chain.id); + if (alchemyHttpUrl) { + const isUsingDefaultKey = scaffoldConfig.alchemyApiKey === DEFAULT_ALCHEMY_API_KEY; + // If using default Scaffold-ETH 2 API key, we prioritize the default RPC + rpcFallbacks = isUsingDefaultKey ? [http(), http(alchemyHttpUrl)] : [http(alchemyHttpUrl), http()]; + } } return createClient({