如何通过ethers.js获取当前区块链的正式名称(如以太坊、Polygon)?
如何用ethers.js获取区块链的正式名称?
你提到的getNetwork()方法返回的name字段是ethers内部的网络标识(比如以太坊主网返回homestead,Polygon主网返回matic),确实无法直接获取“以太坊”“Polygon”这类用户常用的正式名称。以下是可行的解决方法:
核心思路
ethers本身没有内置链ID与用户友好名称的对应关系,最可靠的方式是自行维护链ID到正式名称的映射表——因为公链的链ID是固定且公开的。
修正后的示例代码
先纠正你原代码中的小错误:调用getNetwork()的是provider实例,而非ethers.providers命名空间,完整实现代码如下:
const ethers = require("ethers"); async function getChainOfficialName(rpcUrl) { // 初始化RPC Provider const provider = new ethers.providers.JsonRpcProvider(rpcUrl); // 获取网络链ID及ethers内置名称 const { chainId, name: ethersInternalName } = await provider.getNetwork(); // 维护链ID与正式名称的映射表(可按需扩展) const chainOfficialNames = { 1: "以太坊", 5: "以太坊Goerli测试网", 137: "Polygon", 80001: "Polygon Mumbai测试网", 56: "币安智能链(BSC)", 97: "BSC测试网", 42161: "Arbitrum One", 43114: "Avalanche C链" }; // 优先返回正式名称,无匹配则返回ethers内置名称或链ID return chainOfficialNames[chainId] || ethersInternalName || `未知区块链(链ID: ${chainId})`; } // 调用示例 getChainOfficialName("https://mainnet.infura.io/v3/你的Infura密钥") .then(officialName => console.log("当前区块链:", officialName)) .catch(error => console.error("查询失败:", error));
补充说明
- 映射表可根据你需要支持的公链随时扩展,所有公链的链ID都是固定的,可通过行业公开资料获取。
- 若不想手动维护映射表,也可以引入第三方链信息包,但手动维护是最轻量、无依赖的方案,能避免不必要的包体积或外部依赖风险。
内容的提问来源于stack exchange,提问作者Mueed
相关产品推荐
相关产品推荐

