You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ethers.js在前端读取Solidity智能合约的Mapping?

解决Ethers.js读取Solidity Mapping数据的问题

问题根源

你的代码存在两个关键错误:

  • 合约中定义的mapping变量是votesOf,但你代码里调用的是isVoted,变量名完全不匹配
  • Solidity中public修饰的mapping会自动生成同名的getter函数,Ethers.js需要通过函数调用的方式获取数据,而非直接通过属性访问

正确实现代码

async function get_voting_results() {
  // 修正变量名,并用函数调用方式传入地址参数
  const vote_result = await contract.votesOf("0xF2F823bAA7CABe76b35ad97a5039c20D36edd9a2");
  console.log(vote_result.toString()); // 转成字符串避免BigNumber格式显示问题
}

补充说明

  • Solidity为public mapping生成的getter函数签名是function votesOf(address) external view returns (uint256),必须以contract.votesOf(address)的形式调用
  • Ethers.js返回的uint256是BigNumber类型,直接打印会显示对象结构,用toString()可以转成可读的十进制字符串
  • 如果调用仍失败,检查合约实例初始化是否正确:比如ABI是否完整、链ID是否匹配、合约地址是否正确

内容的提问来源于stack exchange,提问作者Maaz Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:54:15