如何通过Chain ID获取对应区块链的区块浏览器地址?
通过Chain ID获取对应区块浏览器地址的方案
因为Ethers.js本身没有内置所有链的区块浏览器映射,你可以通过以下几种方式解决:
1. 手动维护Chain ID-浏览器URL映射表
这是最直接可控的方案,你可以根据业务需要,把常用链的信息整理成一个对象,然后通过Chain ID匹配对应的浏览器地址:
// 示例映射表,可根据需求扩展 const chainExplorerMap = { 1: "https://etherscan.io/", 5: "https://goerli.etherscan.io/", 56: "https://bscscan.com/", 137: "https://polygonscan.com/", 42161: "https://arbiscan.io/", // 更多链的信息可自行添加 }; // 获取当前链ID并匹配浏览器地址 async function getBlockExplorerUrl() { const provider = new ethers.providers.Web3Provider(window.ethereum); const { chainId } = await provider.getNetwork(); return chainExplorerMap[chainId.toString()] || "未知链的区块浏览器"; }
2. 利用链信息库获取元数据
可以引入专门维护链元数据的库(比如@wagmi/core或@web3modal/ethereum),这些库内置了大量公链的信息,包括区块浏览器URL,你只需传入Chain ID即可查询:
// 以@wagmi/core为例(需先安装依赖) import { getChain } from '@wagmi/core'; async function getExplorerFromLibrary() { const provider = new ethers.providers.Web3Provider(window.ethereum); const { chainId } = await provider.getNetwork(); const chain = getChain(chainId); return chain?.blockExplorers?.default?.url || "未找到对应区块浏览器"; }
3. 从MetaMask获取链的元数据
如果用户钱包中已经添加了对应链,你可以通过MetaMask的API请求该链的详细信息,其中包含区块浏览器地址:
async function getExplorerFromMetaMask() { const provider = new ethers.providers.Web3Provider(window.ethereum); const { chainId } = await provider.getNetwork(); try { // 请求MetaMask获取所有已添加的链信息 const chains = await provider.send("wallet_getChains", []); const targetChain = chains.find(chain => chain.chainId === `0x${chainId.toString(16)}`); return targetChain?.blockExplorerUrls?.[0] || "未找到对应区块浏览器"; } catch (error) { console.error("获取链信息失败:", error); return "获取区块浏览器地址失败"; } }
注意事项
- 手动映射表适合对链有明确需求的场景,可避免依赖第三方库;
- 第三方库会自动更新链信息,但需要额外安装依赖;
- 从MetaMask获取的方式仅适用于用户已添加该链的情况,若链未添加,可能需要引导用户添加后再获取。
内容的提问来源于stack exchange,提问作者user18039014
相关产品推荐
相关产品推荐

