Maticmum网络ENS不支持错误排查:众筹DApp开发问题
错误原因分析
这个错误的核心原因是:调用e.args.campaignAddress.toString()时,ethers.js默认尝试对地址执行ENS反向解析,但Polygon Mumbai(maticmum)测试网并不支持ENS服务。
你使用的ethers.js providers/5.5.3版本中,Address类型的toString()方法会自动触发ENS反向解析逻辑,试图将合约地址转换为对应的域名。但Mumbai测试网既没有部署ENS合约,也没有相关解析服务,因此直接抛出UNSUPPORTED_OPERATION错误。
解决办法
不要用toString()方法获取地址字符串,改用以下方式直接获取原始十六进制地址(跳过ENS解析):
- 使用地址对象的
address属性:
address: e.args.campaignAddress.address
- 用
ethers.utils.getAddress()方法(同时验证地址格式合法性):
address: ethers.utils.getAddress(e.args.campaignAddress)
- 直接强制转换为字符串:
address: `${e.args.campaignAddress}`
修改后的getStaticPaths代码示例:
export async function getStaticPaths(){ const provider=new ethers.providers.JsonRpcProvider(AlchemyProvider); const contract=new ethers.Contract(contractAddress, CampaignFactory.abi, provider); const getAllCampaigns=contract.filters.createdCampaign(); const allCampaigns=await contract.queryFilter(getAllCampaigns); return{ paths: allCampaigns.map((e)=>({ params:{ address: ethers.utils.getAddress(e.args.campaignAddress) } })), fallback:true } };
内容的提问来源于stack exchange,提问作者Yasir Saeed
相关产品推荐
相关产品推荐

