diff --git a/packages/nextjs/services/web3/wagmiConfig.tsx b/packages/nextjs/services/web3/wagmiConfig.tsx index 8aceaeab1..6277d5ffd 100644 --- a/packages/nextjs/services/web3/wagmiConfig.tsx +++ b/packages/nextjs/services/web3/wagmiConfig.tsx @@ -3,18 +3,16 @@ import { Chain, createClient, http } from "viem"; import { hardhat } from "viem/chains"; import { createConfig } from "wagmi"; import scaffoldConfig from "~~/scaffold.config"; +import { getAlchemyHttpUrl } from "~~/utils/scaffold-eth"; export const wagmiConfig = createConfig({ - // TODO: Maybe we should get literal value here currently TS has widened the types because of ensabledChains logic chains: enabledChains, connectors: wagmiConnectors, ssr: true, client({ chain }) { return createClient({ chain, - // TODO: Create a file for alchmey links mapping and use fallback transport array so if alchmey fails fallbakc to default chain rpc - transport: http(), - // TODO: Casting to Chain type to avoid TS literal compersion, we could in future use getTargetNetworks function + transport: http(getAlchemyHttpUrl(chain.id)), ...(chain.id === (hardhat as Chain).id ? { pollingInterval: scaffoldConfig.pollingInterval, diff --git a/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts b/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts index d46095ddc..a5cec3d31 100644 --- a/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts +++ b/packages/nextjs/utils/scaffold-eth/fetchPriceFromUniswap.ts @@ -2,13 +2,11 @@ import { CurrencyAmount, Token } from "@uniswap/sdk-core"; import { Pair, Route } from "@uniswap/v2-sdk"; import { Address, createPublicClient, http, parseAbi } from "viem"; import { mainnet } from "viem/chains"; -import scaffoldConfig from "~~/scaffold.config"; -import { ChainWithAttributes } from "~~/utils/scaffold-eth"; +import { ChainWithAttributes, getAlchemyHttpUrl } from "~~/utils/scaffold-eth"; const publicClient = createPublicClient({ chain: mainnet, - // TODO: Since viem/chains removed alchemy links find a better way to handle this - transport: http(`https://eth-mainnet.g.alchemy.com/v2/${scaffoldConfig.alchemyApiKey}`), + transport: http(getAlchemyHttpUrl(mainnet.id)), }); const ABI = parseAbi([ diff --git a/packages/nextjs/utils/scaffold-eth/networks.ts b/packages/nextjs/utils/scaffold-eth/networks.ts index 36484fad8..6b8276fbd 100644 --- a/packages/nextjs/utils/scaffold-eth/networks.ts +++ b/packages/nextjs/utils/scaffold-eth/networks.ts @@ -11,6 +11,34 @@ type ChainAttributes = { export type ChainWithAttributes = chains.Chain & Partial; +// Mapping of chainId to RPC chain name an format followed by alchemy and infura +export const RPC_CHAIN_NAMES: Record = { + [chains.mainnet.id]: "eth-mainnet", + [chains.goerli.id]: "eth-goerli", + [chains.sepolia.id]: "eth-sepolia", + [chains.optimism.id]: "opt-mainnet", + [chains.optimismGoerli.id]: "opt-goerli", + [chains.optimismSepolia.id]: "opt-sepolia", + [chains.arbitrum.id]: "arb-mainnet", + [chains.arbitrumGoerli.id]: "arb-goerli", + [chains.arbitrumSepolia.id]: "arb-sepolia", + [chains.polygon.id]: "polygon-mainnet", + [chains.polygonMumbai.id]: "polygon-mumbai", + [chains.polygonAmoy.id]: "polygon-amoy", + [chains.astar.id]: "astar-mainnet", + [chains.polygonZkEvm.id]: "polygonzkevm-mainnet", + [chains.polygonZkEvmTestnet.id]: "polygonzkevm-testnet", + [chains.base.id]: "base-mainnet", + [chains.baseGoerli.id]: "base-goerli", + [chains.baseSepolia.id]: "base-sepolia", +}; + +export const getAlchemyHttpUrl = (chainId: number) => { + return RPC_CHAIN_NAMES[chainId] + ? `https://${RPC_CHAIN_NAMES[chainId]}.g.alchemy.com/v2/${scaffoldConfig.alchemyApiKey}` + : undefined; +}; + export const NETWORKS_EXTRA_DATA: Record = { [chains.hardhat.id]: { color: "#b8af0c",