|
| 1 | +import { defineChain } from "viem"; |
| 2 | +import * as viemChains from "viem/chains"; |
| 3 | +import { Chain } from "viem/chains"; |
| 4 | + |
| 5 | +// Get the chain object from the chainId or return an unknown chain object |
| 6 | +// if the chainId is not found in the list of chains. Normally the unknown |
| 7 | +// chain object should work for most cases, but some networks may have special |
| 8 | +// requirements (like custom fee model, etc) that may require a custom chain. |
| 9 | +export function getChain(chainId: number): Chain { |
| 10 | + for (const chain of chains) { |
| 11 | + if (chain.id === chainId) { |
| 12 | + return chain; |
| 13 | + } |
| 14 | + } |
| 15 | + |
| 16 | + return defineChain({ |
| 17 | + id: chainId, |
| 18 | + name: "Unknown", |
| 19 | + nativeCurrency: { |
| 20 | + name: "Unknown", |
| 21 | + symbol: "Unknown", |
| 22 | + decimals: 18, |
| 23 | + }, |
| 24 | + rpcUrls: { |
| 25 | + default: { |
| 26 | + http: [], |
| 27 | + }, |
| 28 | + }, |
| 29 | + }); |
| 30 | +} |
| 31 | + |
| 32 | +// This list is generated from the exported chains in viem/chains.ts |
| 33 | +// and is used to validate the chainId in the Chain type |
| 34 | +export const chains: Chain[] = [ |
| 35 | + viemChains.abstractTestnet, |
| 36 | + viemChains.acala, |
| 37 | + viemChains.ancient8, |
| 38 | + viemChains.ancient8Sepolia, |
| 39 | + viemChains.anvil, |
| 40 | + viemChains.apexTestnet, |
| 41 | + viemChains.arbitrum, |
| 42 | + viemChains.arbitrumGoerli, |
| 43 | + viemChains.arbitrumNova, |
| 44 | + viemChains.astar, |
| 45 | + viemChains.astarZkEVM, |
| 46 | + viemChains.astarZkyoto, |
| 47 | + viemChains.arbitrumSepolia, |
| 48 | + viemChains.areonNetwork, |
| 49 | + viemChains.areonNetworkTestnet, |
| 50 | + viemChains.artelaTestnet, |
| 51 | + viemChains.aurora, |
| 52 | + viemChains.auroraTestnet, |
| 53 | + viemChains.auroria, |
| 54 | + viemChains.avalanche, |
| 55 | + viemChains.avalancheFuji, |
| 56 | + viemChains.b3Sepolia, |
| 57 | + viemChains.bahamut, |
| 58 | + viemChains.base, |
| 59 | + viemChains.baseGoerli, |
| 60 | + viemChains.baseSepolia, |
| 61 | + viemChains.beam, |
| 62 | + viemChains.beamTestnet, |
| 63 | + viemChains.bearNetworkChainMainnet, |
| 64 | + viemChains.bearNetworkChainTestnet, |
| 65 | + viemChains.berachainTestnet, |
| 66 | + viemChains.berachainTestnetbArtio, |
| 67 | + viemChains.bevmMainnet, |
| 68 | + viemChains.bitkub, |
| 69 | + viemChains.bitkubTestnet, |
| 70 | + viemChains.bitTorrent, |
| 71 | + viemChains.bitTorrentTestnet, |
| 72 | + viemChains.blast, |
| 73 | + viemChains.blastSepolia, |
| 74 | + viemChains.bob, |
| 75 | + viemChains.bobSepolia, |
| 76 | + viemChains.boba, |
| 77 | + viemChains.bobaSepolia, |
| 78 | + viemChains.bronos, |
| 79 | + viemChains.bronosTestnet, |
| 80 | + viemChains.bsc, |
| 81 | + viemChains.bscTestnet, |
| 82 | + viemChains.bscGreenfield, |
| 83 | + viemChains.btr, |
| 84 | + viemChains.btrTestnet, |
| 85 | + viemChains.bxn, |
| 86 | + viemChains.bxnTestnet, |
| 87 | + viemChains.canto, |
| 88 | + viemChains.celo, |
| 89 | + viemChains.celoAlfajores, |
| 90 | + viemChains.chiliz, |
| 91 | + viemChains.classic, |
| 92 | + viemChains.confluxESpace, |
| 93 | + viemChains.confluxESpaceTestnet, |
| 94 | + viemChains.coreDao, |
| 95 | + viemChains.crab, |
| 96 | + viemChains.cronos, |
| 97 | + viemChains.cronoszkEVMTestnet, |
| 98 | + viemChains.cronosTestnet, |
| 99 | + viemChains.crossbell, |
| 100 | + viemChains.cyber, |
| 101 | + viemChains.cyberTestnet, |
| 102 | + viemChains.darwinia, |
| 103 | + viemChains.dchain, |
| 104 | + viemChains.dchainTestnet, |
| 105 | + viemChains.defichainEvm, |
| 106 | + viemChains.defichainEvmTestnet, |
| 107 | + viemChains.degen, |
| 108 | + viemChains.dfk, |
| 109 | + viemChains.dodochainTestnet, |
| 110 | + viemChains.dogechain, |
| 111 | + viemChains.dreyerxMainnet, |
| 112 | + viemChains.dreyerxTestnet, |
| 113 | + viemChains.edgeless, |
| 114 | + viemChains.edgelessTestnet, |
| 115 | + viemChains.edgeware, |
| 116 | + viemChains.edgewareTestnet, |
| 117 | + viemChains.eon, |
| 118 | + viemChains.eos, |
| 119 | + viemChains.eosTestnet, |
| 120 | + viemChains.etherlink, |
| 121 | + viemChains.etherlinkTestnet, |
| 122 | + viemChains.evmos, |
| 123 | + viemChains.evmosTestnet, |
| 124 | + viemChains.ekta, |
| 125 | + viemChains.ektaTestnet, |
| 126 | + viemChains.fantom, |
| 127 | + viemChains.fantomSonicTestnet, |
| 128 | + viemChains.fantomTestnet, |
| 129 | + viemChains.fibo, |
| 130 | + viemChains.filecoin, |
| 131 | + viemChains.filecoinCalibration, |
| 132 | + viemChains.filecoinHyperspace, |
| 133 | + viemChains.flare, |
| 134 | + viemChains.flareTestnet, |
| 135 | + viemChains.flowPreviewnet, |
| 136 | + viemChains.flowMainnet, |
| 137 | + viemChains.flowTestnet, |
| 138 | + viemChains.forma, |
| 139 | + viemChains.foundry, |
| 140 | + viemChains.fraxtal, |
| 141 | + viemChains.fraxtalTestnet, |
| 142 | + viemChains.funkiMainnet, |
| 143 | + viemChains.funkiSepolia, |
| 144 | + viemChains.fuse, |
| 145 | + viemChains.fuseSparknet, |
| 146 | + viemChains.iotex, |
| 147 | + viemChains.iotexTestnet, |
| 148 | + viemChains.jbc, |
| 149 | + viemChains.jbcTestnet, |
| 150 | + viemChains.karura, |
| 151 | + viemChains.gobi, |
| 152 | + viemChains.goerli, |
| 153 | + viemChains.gnosis, |
| 154 | + viemChains.gnosisChiado, |
| 155 | + viemChains.gravity, |
| 156 | + viemChains.ham, |
| 157 | + viemChains.hardhat, |
| 158 | + viemChains.harmonyOne, |
| 159 | + viemChains.haqqMainnet, |
| 160 | + viemChains.haqqTestedge2, |
| 161 | + viemChains.hedera, |
| 162 | + viemChains.hederaTestnet, |
| 163 | + viemChains.hederaPreviewnet, |
| 164 | + viemChains.holesky, |
| 165 | + viemChains.immutableZkEvm, |
| 166 | + viemChains.immutableZkEvmTestnet, |
| 167 | + viemChains.inEVM, |
| 168 | + viemChains.kakarotSepolia, |
| 169 | + viemChains.kava, |
| 170 | + viemChains.kavaTestnet, |
| 171 | + viemChains.kcc, |
| 172 | + viemChains.klaytn, |
| 173 | + viemChains.klaytnBaobab, |
| 174 | + viemChains.koi, |
| 175 | + viemChains.kroma, |
| 176 | + viemChains.kromaSepolia, |
| 177 | + viemChains.l3x, |
| 178 | + viemChains.l3xTestnet, |
| 179 | + viemChains.lightlinkPegasus, |
| 180 | + viemChains.lightlinkPhoenix, |
| 181 | + viemChains.linea, |
| 182 | + viemChains.lineaGoerli, |
| 183 | + viemChains.lineaSepolia, |
| 184 | + viemChains.lineaTestnet, |
| 185 | + viemChains.lisk, |
| 186 | + viemChains.liskSepolia, |
| 187 | + viemChains.localhost, |
| 188 | + viemChains.lukso, |
| 189 | + viemChains.luksoTestnet, |
| 190 | + viemChains.lycan, |
| 191 | + viemChains.lyra, |
| 192 | + viemChains.mainnet, |
| 193 | + viemChains.mandala, |
| 194 | + viemChains.manta, |
| 195 | + viemChains.mantaSepoliaTestnet, |
| 196 | + viemChains.mantaTestnet, |
| 197 | + viemChains.mantle, |
| 198 | + viemChains.mantleSepoliaTestnet, |
| 199 | + viemChains.mantleTestnet, |
| 200 | + viemChains.merlin, |
| 201 | + viemChains.metachain, |
| 202 | + viemChains.metachainIstanbul, |
| 203 | + viemChains.metalL2, |
| 204 | + viemChains.meter, |
| 205 | + viemChains.meterTestnet, |
| 206 | + viemChains.metis, |
| 207 | + viemChains.metisGoerli, |
| 208 | + viemChains.mev, |
| 209 | + viemChains.mevTestnet, |
| 210 | + viemChains.mintSepoliaTestnet, |
| 211 | + viemChains.mode, |
| 212 | + viemChains.modeTestnet, |
| 213 | + viemChains.moonbaseAlpha, |
| 214 | + viemChains.moonbeam, |
| 215 | + viemChains.moonbeamDev, |
| 216 | + viemChains.moonriver, |
| 217 | + viemChains.morphHolesky, |
| 218 | + viemChains.morphSepolia, |
| 219 | + viemChains.nautilus, |
| 220 | + viemChains.neonDevnet, |
| 221 | + viemChains.neonMainnet, |
| 222 | + viemChains.nexi, |
| 223 | + viemChains.nexilix, |
| 224 | + viemChains.oasys, |
| 225 | + viemChains.oasisTestnet, |
| 226 | + viemChains.okc, |
| 227 | + viemChains.optimism, |
| 228 | + viemChains.optimismGoerli, |
| 229 | + viemChains.optimismSepolia, |
| 230 | + viemChains.opBNB, |
| 231 | + viemChains.opBNBTestnet, |
| 232 | + viemChains.oortMainnetDev, |
| 233 | + viemChains.otimDevnet, |
| 234 | + viemChains.palm, |
| 235 | + viemChains.palmTestnet, |
| 236 | + viemChains.playfiAlbireo, |
| 237 | + viemChains.pgn, |
| 238 | + viemChains.pgnTestnet, |
| 239 | + viemChains.phoenix, |
| 240 | + viemChains.plinga, |
| 241 | + viemChains.plumeTestnet, |
| 242 | + viemChains.polygon, |
| 243 | + viemChains.polygonAmoy, |
| 244 | + viemChains.polygonMumbai, |
| 245 | + viemChains.polygonZkEvm, |
| 246 | + viemChains.polygonZkEvmCardona, |
| 247 | + viemChains.polygonZkEvmTestnet, |
| 248 | + viemChains.pulsechain, |
| 249 | + viemChains.pulsechainV4, |
| 250 | + viemChains.qMainnet, |
| 251 | + viemChains.qTestnet, |
| 252 | + viemChains.real, |
| 253 | + viemChains.redbellyTestnet, |
| 254 | + viemChains.redstone, |
| 255 | + viemChains.reyaNetwork, |
| 256 | + viemChains.rollux, |
| 257 | + viemChains.rolluxTestnet, |
| 258 | + viemChains.ronin, |
| 259 | + viemChains.root, |
| 260 | + viemChains.rootPorcini, |
| 261 | + viemChains.rootstock, |
| 262 | + viemChains.rootstockTestnet, |
| 263 | + viemChains.rss3, |
| 264 | + viemChains.rss3Sepolia, |
| 265 | + viemChains.saigon, |
| 266 | + viemChains.sapphire, |
| 267 | + viemChains.sapphireTestnet, |
| 268 | + viemChains.satoshiVM, |
| 269 | + viemChains.satoshiVMTestnet, |
| 270 | + viemChains.scroll, |
| 271 | + viemChains.scrollSepolia, |
| 272 | + viemChains.sei, |
| 273 | + viemChains.seiDevnet, |
| 274 | + viemChains.seiTestnet, |
| 275 | + viemChains.sepolia, |
| 276 | + viemChains.shapeSepolia, |
| 277 | + viemChains.shimmer, |
| 278 | + viemChains.shimmerTestnet, |
| 279 | + viemChains.skaleBlockBrawlers, |
| 280 | + viemChains.skaleCalypso, |
| 281 | + viemChains.skaleCalypsoTestnet, |
| 282 | + viemChains.skaleCryptoBlades, |
| 283 | + viemChains.skaleCryptoColosseum, |
| 284 | + viemChains.skaleEuropa, |
| 285 | + viemChains.skaleEuropaTestnet, |
| 286 | + viemChains.skaleExorde, |
| 287 | + viemChains.skaleHumanProtocol, |
| 288 | + viemChains.skaleNebula, |
| 289 | + viemChains.skaleNebulaTestnet, |
| 290 | + viemChains.skaleRazor, |
| 291 | + viemChains.skaleTitan, |
| 292 | + viemChains.skaleTitanTestnet, |
| 293 | + viemChains.sketchpad, |
| 294 | + viemChains.songbird, |
| 295 | + viemChains.songbirdTestnet, |
| 296 | + viemChains.spicy, |
| 297 | + viemChains.shardeumSphinx, |
| 298 | + viemChains.shibarium, |
| 299 | + viemChains.shibariumTestnet, |
| 300 | + viemChains.stratis, |
| 301 | + viemChains.syscoin, |
| 302 | + viemChains.syscoinTestnet, |
| 303 | + viemChains.taraxa, |
| 304 | + viemChains.taiko, |
| 305 | + viemChains.taikoHekla, |
| 306 | + viemChains.taikoJolnir, |
| 307 | + viemChains.taikoKatla, |
| 308 | + viemChains.taikoTestnetSepolia, |
| 309 | + viemChains.taraxaTestnet, |
| 310 | + viemChains.telcoinTestnet, |
| 311 | + viemChains.telos, |
| 312 | + viemChains.telosTestnet, |
| 313 | + viemChains.tenet, |
| 314 | + viemChains.thaiChain, |
| 315 | + viemChains.thunderTestnet, |
| 316 | + viemChains.unreal, |
| 317 | + viemChains.vechain, |
| 318 | + viemChains.wanchain, |
| 319 | + viemChains.wanchainTestnet, |
| 320 | + viemChains.wemix, |
| 321 | + viemChains.wemixTestnet, |
| 322 | + viemChains.xLayerTestnet, |
| 323 | + viemChains.xLayer, |
| 324 | + viemChains.xai, |
| 325 | + viemChains.xaiTestnet, |
| 326 | + viemChains.xdc, |
| 327 | + viemChains.xdcTestnet, |
| 328 | + viemChains.xrSepolia, |
| 329 | + viemChains.yooldoVerse, |
| 330 | + viemChains.yooldoVerseTestnet, |
| 331 | + viemChains.zetachain, |
| 332 | + viemChains.zetachainAthensTestnet, |
| 333 | + viemChains.zhejiang, |
| 334 | + viemChains.zilliqa, |
| 335 | + viemChains.zilliqaTestnet, |
| 336 | + viemChains.zkFair, |
| 337 | + viemChains.zkFairTestnet, |
| 338 | + viemChains.zkLinkNova, |
| 339 | + viemChains.zkLinkNovaSepoliaTestnet, |
| 340 | + viemChains.zksync, |
| 341 | + viemChains.zksyncInMemoryNode, |
| 342 | + viemChains.zksyncSepoliaTestnet, |
| 343 | + viemChains.zora, |
| 344 | + viemChains.zoraSepolia, |
| 345 | + viemChains.zoraTestnet, |
| 346 | + viemChains.zircuitTestnet, |
| 347 | +]; |
0 commit comments