networksConfig.ts
1 import { ChainId } from '@aave/contract-helpers'; 2 import { 3 arbitrum, 4 arbitrumSepolia, 5 avalanche, 6 avalancheFuji, 7 base, 8 baseSepolia, 9 bsc, 10 celo, 11 Chain, 12 gnosis, 13 linea, 14 mainnet, 15 metis, 16 optimism, 17 optimismSepolia, 18 polygon, 19 scroll, 20 scrollSepolia, 21 sepolia, 22 sonic, 23 zksync, 24 } from 'wagmi/chains'; 25 26 export type ExplorerLinkBuilderProps = { 27 tx?: string; 28 address?: string; 29 }; 30 31 export type ExplorerLinkBuilderConfig = { 32 baseUrl: string; 33 addressPrefix?: string; 34 txPrefix?: string; 35 }; 36 37 export type NetworkConfig = { 38 name: string; 39 displayName?: string; 40 publicJsonRPCUrl: readonly string[]; // public rpc used if not private found 41 // https://github.com/aave/aave-api 42 ratesHistoryApiUrl?: string; 43 baseUniswapAdapter?: string; 44 /** 45 * When this is set withdrawals will automatically be unwrapped 46 */ 47 wrappedBaseAssetSymbol: string; 48 baseAssetSymbol: string; 49 // needed for configuring the chain on metemask when it doesn't exist yet 50 baseAssetDecimals: number; 51 // usdMarket?: boolean; 52 // function returning a link to etherscan et al 53 explorerLink: string; 54 explorerLinkBuilder: (props: ExplorerLinkBuilderProps) => string; 55 // set this to show faucets and similar 56 isTestnet?: boolean; 57 // get's automatically populated on fork networks 58 isFork?: boolean; 59 networkLogoPath: string; 60 // contains the forked off chainId 61 underlyingChainId?: number; 62 bridge?: { 63 icon: string; 64 name: string; 65 url: string; 66 }; 67 wagmiChain: Chain; 68 }; 69 70 export type BaseNetworkConfig = Omit<NetworkConfig, 'explorerLinkBuilder'>; 71 72 const ratesHistoryApiUrl = `${process.env.NEXT_PUBLIC_API_BASEURL}/data/rates-history`; 73 74 export const testnetConfig: Record<string, BaseNetworkConfig> = { 75 [ChainId.sepolia]: { 76 name: 'Ethereum Sepolia', 77 publicJsonRPCUrl: [ 78 'https://eth-sepolia.public.blastapi.io', 79 'https://rpc.sepolia.org', 80 'https://rpc2.sepolia.org', 81 'https://rpc.sepolia.online', 82 'https://www.sepoliarpc.space', 83 ], 84 baseUniswapAdapter: '0x0', 85 baseAssetSymbol: 'ETH', 86 wrappedBaseAssetSymbol: 'WETH', 87 baseAssetDecimals: 18, 88 explorerLink: 'https://sepolia.etherscan.io', 89 isTestnet: true, 90 networkLogoPath: '/icons/networks/ethereum.svg', 91 wagmiChain: sepolia, 92 }, 93 [ChainId.fuji]: { 94 name: 'Avalanche Fuji', 95 publicJsonRPCUrl: [ 96 'https://api.avax-test.network/ext/bc/C/rpc', 97 'https://rpc.ankr.com/avalanche_fuji', 98 'https://ava-testnet.public.blastapi.io/ext/bc/C/rpc', 99 ], 100 baseUniswapAdapter: '0x0', 101 baseAssetSymbol: 'AVAX', 102 wrappedBaseAssetSymbol: 'WAVAX', 103 baseAssetDecimals: 18, 104 explorerLink: 'https://cchain.explorer.avax-test.network', 105 isTestnet: true, 106 networkLogoPath: '/icons/networks/avalanche.svg', 107 bridge: { 108 icon: '/icons/bridge/avalanche.svg', 109 name: 'Avalanche Bridge', 110 url: 'https://bridge.avax.network/', 111 }, 112 wagmiChain: avalancheFuji, 113 }, 114 [ChainId.arbitrum_sepolia]: { 115 name: 'Arbitrum Sepolia', 116 publicJsonRPCUrl: [ 117 'https://sepolia-rollup.arbitrum.io/rpc', 118 'https://public.stackup.sh/api/v1/node/arbitrum-sepolia', 119 ], 120 baseUniswapAdapter: '0x0', 121 baseAssetSymbol: 'ETH', 122 wrappedBaseAssetSymbol: 'WETH', 123 baseAssetDecimals: 18, 124 explorerLink: 'https://sepolia.arbiscan.io', 125 isTestnet: true, 126 networkLogoPath: '/icons/networks/arbitrum.svg', 127 wagmiChain: arbitrumSepolia, 128 }, 129 [ChainId.base_sepolia]: { 130 name: 'Base Sepolia', 131 publicJsonRPCUrl: [ 132 'https://base-sepolia.blockpi.network/v1/rpc/public', 133 'https://sepolia.base.org', 134 'https://base-sepolia.gateway.tenderly.co', 135 ], 136 baseUniswapAdapter: '0x0', 137 baseAssetSymbol: 'ETH', 138 wrappedBaseAssetSymbol: 'WETH', 139 baseAssetDecimals: 18, 140 explorerLink: 'https://sepolia.basescan.org', 141 isTestnet: true, 142 networkLogoPath: '/icons/networks/base.svg', 143 wagmiChain: baseSepolia, 144 }, 145 [ChainId.optimism_sepolia]: { 146 name: 'Optimism Sepolia', 147 publicJsonRPCUrl: ['https://sepolia.optimism.io'], 148 baseUniswapAdapter: '0x0', 149 baseAssetSymbol: 'ETH', 150 wrappedBaseAssetSymbol: 'WETH', 151 baseAssetDecimals: 18, 152 explorerLink: 'https://sepolia-optimistic.etherscan.io', 153 isTestnet: true, 154 networkLogoPath: '/icons/networks/optimism.svg', 155 wagmiChain: optimismSepolia, 156 }, 157 [ChainId.scroll_sepolia]: { 158 name: 'Scroll Sepolia', 159 publicJsonRPCUrl: [ 160 'https://sepolia-rpc.scroll.io', 161 'https://scroll-sepolia.blockpi.network/v1/rpc/public', 162 ], 163 baseUniswapAdapter: '0x0', 164 baseAssetSymbol: 'ETH', 165 wrappedBaseAssetSymbol: 'WETH', 166 baseAssetDecimals: 18, 167 explorerLink: 'https://sepolia.scrollscan.dev', 168 isTestnet: true, 169 networkLogoPath: '/icons/networks/scroll.svg', 170 wagmiChain: scrollSepolia, 171 }, 172 }; 173 174 export const prodNetworkConfig: Record<string, BaseNetworkConfig> = { 175 [ChainId.mainnet]: { 176 name: 'Ethereum', 177 publicJsonRPCUrl: [ 178 'https://mainnet.gateway.tenderly.co', 179 'https://rpc.flashbots.net', 180 'https://eth.llamarpc.com', 181 'https://eth-mainnet.public.blastapi.io', 182 'https://ethereum-rpc.publicnode.com', 183 ], 184 baseUniswapAdapter: '0xc3efa200a60883a96ffe3d5b492b121d6e9a1f3f', 185 baseAssetSymbol: 'ETH', 186 wrappedBaseAssetSymbol: 'WETH', 187 baseAssetDecimals: 18, 188 explorerLink: 'https://etherscan.io', 189 ratesHistoryApiUrl, 190 networkLogoPath: '/icons/networks/ethereum.svg', 191 wagmiChain: mainnet, 192 }, 193 [ChainId.polygon]: { 194 name: 'Polygon POS', 195 displayName: 'Polygon', 196 publicJsonRPCUrl: [ 197 'https://gateway.tenderly.co/public/polygon', 198 'https://polygon-pokt.nodies.app', 199 'https://polygon-bor-rpc.publicnode.com', 200 'https://polygon-rpc.com', 201 'https://polygon-mainnet.public.blastapi.io', 202 'https://rpc-mainnet.matic.quiknode.pro', 203 ], 204 baseAssetSymbol: 'POL', 205 wrappedBaseAssetSymbol: 'WPOL', 206 baseAssetDecimals: 18, 207 explorerLink: 'https://polygonscan.com', 208 networkLogoPath: '/icons/networks/polygon.svg', 209 bridge: { 210 icon: '/icons/bridge/polygon.svg', 211 name: 'Polygon PoS Bridge', 212 url: 'https://wallet.polygon.technology/polygon/bridge', 213 }, 214 ratesHistoryApiUrl, 215 wagmiChain: polygon, 216 }, 217 [ChainId.avalanche]: { 218 name: 'Avalanche', 219 publicJsonRPCUrl: [ 220 'https://api.avax.network/ext/bc/C/rpc', 221 'https://ava-mainnet.public.blastapi.io/ext/bc/C/rpc', 222 'https://rpc.ankr.com/avalanche', 223 ], 224 baseUniswapAdapter: '0x0', 225 baseAssetSymbol: 'AVAX', 226 wrappedBaseAssetSymbol: 'WAVAX', 227 baseAssetDecimals: 18, 228 explorerLink: 'https://cchain.explorer.avax.network', 229 networkLogoPath: '/icons/networks/avalanche.svg', 230 bridge: { 231 icon: '/icons/bridge/avalanche.svg', 232 name: 'Avalanche Bridge', 233 url: 'https://bridge.avax.network/', 234 }, 235 ratesHistoryApiUrl, 236 wagmiChain: avalanche, 237 }, 238 [ChainId.arbitrum_one]: { 239 name: 'Arbitrum', 240 publicJsonRPCUrl: [ 241 'https://arb1.arbitrum.io/rpc', 242 'https://rpc.ankr.com/arbitrum', 243 'https://1rpc.io/arb', 244 ], 245 baseUniswapAdapter: '0x0', 246 baseAssetSymbol: 'ETH', 247 wrappedBaseAssetSymbol: 'WETH', 248 baseAssetDecimals: 18, 249 explorerLink: 'https://arbiscan.io', 250 networkLogoPath: '/icons/networks/arbitrum.svg', 251 bridge: { 252 icon: '/icons/bridge/arbitrum.svg', 253 name: 'Arbitrum Bridge', 254 url: 'https://bridge.arbitrum.io', 255 }, 256 ratesHistoryApiUrl, 257 wagmiChain: arbitrum, 258 }, 259 [ChainId.base]: { 260 name: 'Base', 261 publicJsonRPCUrl: [ 262 'https://mainnet.base.org', 263 'https://1rpc.io/base', 264 'https://base.publicnode.com', 265 'https://base-mainnet.public.blastapi.io', 266 ], 267 baseUniswapAdapter: '0x0', 268 baseAssetSymbol: 'ETH', 269 wrappedBaseAssetSymbol: 'WETH', 270 baseAssetDecimals: 18, 271 explorerLink: 'https://basescan.org', 272 networkLogoPath: '/icons/networks/base.svg', 273 bridge: { 274 icon: '/icons/networks/base.svg', 275 name: 'Base Bridge', 276 url: 'https://bridge.base.org/', 277 }, 278 ratesHistoryApiUrl, 279 wagmiChain: base, 280 }, 281 [ChainId.optimism]: { 282 name: 'OP', 283 publicJsonRPCUrl: ['https://optimism-mainnet.public.blastapi.io', 'https://1rpc.io/op'], 284 baseUniswapAdapter: '0x0', 285 baseAssetSymbol: 'ETH', 286 wrappedBaseAssetSymbol: 'WETH', 287 baseAssetDecimals: 18, 288 explorerLink: 'https://optimistic.etherscan.io', 289 networkLogoPath: '/icons/networks/optimism.svg', 290 bridge: { 291 icon: '/icons/bridge/optimism.svg', 292 name: 'OP Bridge', 293 url: 'https://app.optimism.io/bridge', 294 }, 295 ratesHistoryApiUrl, 296 wagmiChain: optimism, 297 }, 298 [ChainId.metis_andromeda]: { 299 name: 'Metis Andromeda', 300 publicJsonRPCUrl: ['https://andromeda.metis.io/?owner=1088'], 301 baseAssetSymbol: '', // N/A 302 wrappedBaseAssetSymbol: '', // N/A 303 baseAssetDecimals: 0, // N/A 304 explorerLink: 'https://andromeda-explorer.metis.io', 305 networkLogoPath: '/icons/networks/metis.svg', 306 ratesHistoryApiUrl, 307 wagmiChain: metis, 308 }, 309 [ChainId.xdai]: { 310 name: 'Gnosis Chain', 311 publicJsonRPCUrl: ['https://rpc.ankr.com/gnosis', 'https://rpc.gnosischain.com'], 312 baseUniswapAdapter: '0x0', 313 baseAssetSymbol: 'xDAI', 314 wrappedBaseAssetSymbol: 'WXDAI', 315 baseAssetDecimals: 18, 316 explorerLink: 'https://gnosisscan.io', 317 isTestnet: false, 318 networkLogoPath: '/icons/networks/gnosis.svg', 319 bridge: { 320 icon: '/icons/networks/gnosis.svg', 321 name: 'xDai Bridge', 322 url: 'https://bridge.gnosischain.com/', 323 }, 324 ratesHistoryApiUrl, 325 wagmiChain: gnosis, 326 }, 327 [ChainId.bnb]: { 328 name: 'Binance Smart Chain', 329 publicJsonRPCUrl: ['https://bsc.publicnode.com ', 'wss://bsc.publicnode.com'], 330 baseAssetSymbol: 'BNB', 331 wrappedBaseAssetSymbol: 'WBNB', 332 baseAssetDecimals: 18, 333 explorerLink: 'https://bscscan.com', 334 networkLogoPath: '/icons/networks/binance.svg', 335 bridge: { 336 icon: '/icons/networks/binance.svg', 337 name: 'BNB Bridge', 338 url: 'https://www.bnbchain.org/en/bnb-chain-bridges', 339 }, 340 ratesHistoryApiUrl, 341 wagmiChain: bsc, 342 }, 343 [ChainId.scroll]: { 344 name: 'Scroll', 345 publicJsonRPCUrl: ['https://rpc.scroll.io', 'https://rpc.ankr.com/scroll'], 346 baseAssetSymbol: 'ETH', 347 wrappedBaseAssetSymbol: 'WETH', 348 baseAssetDecimals: 18, 349 explorerLink: 'https://scrollscan.com', 350 networkLogoPath: '/icons/networks/scroll.svg', 351 bridge: { 352 icon: '/icons/networks/scroll.svg', 353 name: 'Scroll Bridge', 354 url: 'https://scroll.io/bridge', 355 }, 356 ratesHistoryApiUrl, 357 wagmiChain: scroll, 358 }, 359 [ChainId.zksync]: { 360 name: 'ZKsync', 361 publicJsonRPCUrl: ['https://mainnet.era.zksync.io'], 362 baseAssetSymbol: 'ETH', 363 wrappedBaseAssetSymbol: 'WETH', 364 baseAssetDecimals: 18, 365 explorerLink: 'https://era.zksync.network', 366 networkLogoPath: '/icons/networks/zksync.svg', 367 bridge: { 368 icon: '/icons/networks/zksync.svg', 369 name: 'ZKsync Bridge', 370 url: 'https://portal.zksync.io/bridge/', 371 }, 372 ratesHistoryApiUrl, 373 wagmiChain: zksync, 374 }, 375 [ChainId.linea]: { 376 name: 'Linea', 377 publicJsonRPCUrl: [ 378 'https://1rpc.io/linea', 379 'https://linea.drpc.org', 380 'https://linea-rpc.publicnode.com', 381 ], 382 baseAssetSymbol: 'ETH', 383 wrappedBaseAssetSymbol: 'WETH', 384 baseAssetDecimals: 18, 385 explorerLink: 'https://lineascan.build', 386 networkLogoPath: '/icons/networks/linea.svg', 387 bridge: { 388 icon: '/icons/networks/linea.svg', 389 name: 'Linea Bridge', 390 url: 'https://bridge.linea.build/', 391 }, 392 ratesHistoryApiUrl, 393 wagmiChain: linea, 394 }, 395 [ChainId.sonic]: { 396 name: 'Sonic', 397 publicJsonRPCUrl: [ 398 'https://rpc.soniclabs.com', 399 'https://sonic.drpc.org', 400 'https://sonic-rpc.publicnode.com', 401 ], 402 baseAssetSymbol: 'S', 403 wrappedBaseAssetSymbol: 'wS', 404 baseAssetDecimals: 18, 405 explorerLink: 'https://sonicscan.org', 406 networkLogoPath: '/icons/networks/sonic.svg', 407 bridge: { 408 icon: '/icons/networks/sonic.svg', 409 name: 'Sonic Bridge', 410 url: 'https://gateway.soniclabs.com', 411 }, 412 ratesHistoryApiUrl, 413 wagmiChain: sonic, 414 }, 415 [ChainId.celo]: { 416 name: 'Celo', 417 publicJsonRPCUrl: ['https://rpc.ankr.com/celo', 'https://celo.drpc.org'], 418 baseAssetSymbol: '', // N/A 419 wrappedBaseAssetSymbol: '', // N/A 420 baseAssetDecimals: 0, // N/A 421 explorerLink: 'https://celoscan.io/', 422 networkLogoPath: '/icons/networks/celo.svg', 423 bridge: { 424 icon: '/icons/networks/celo.svg', 425 name: 'Celo Bridge', 426 url: 'https://docs.celo.org/protocol/bridge', 427 }, 428 wagmiChain: celo, 429 }, 430 }; 431 432 export const networkConfigs = { 433 ...testnetConfig, 434 ...prodNetworkConfig, 435 };