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

读取Solidity合约public数组people报invalid BigNumber错误如何解决

报错根因

call to SimpleStorage.people errored: Error encoding arguments: Error: invalid BigNumber string

这个报错是调用public数组自动生成的getter方法时未传参导致的:

  • Solidity 为public修饰的动态数组自动生成的查询方法,必须传入uint256类型的数组下标作为入参,才能返回对应位置的结构体数据
  • 调用时未填写任何参数,入参值为空字符串,工具底层的bignumber库尝试将空字符串转换为uint256对应的数值类型,匹配失败抛出错误。
解决方案
  • 单条查询:如果要读取数组第N个元素,调用people方法时传入合法的非负整数下标即可,数组下标从0开始计数。比如你已经调用addPerson添加了3条数据,可传入0、1、2分别读取对应位置的用户数据。如果使用Remix测试,直接在people按钮旁的输入框填入下标后再点击查询即可,不要空输入框直接调用。
  • 批量查询:如果需要一次性获取整个people数组的所有数据,需要手动在合约中新增批量查询方法,原生public数组不会自动生成返回全量数组的接口,示例代码如下:
function getAllPeople() public view returns(People[] memory) {
    return people;
}
  • 长度校验:可额外新增数组长度查询方法,避免传入的下标超过数组最大长度导致调用失败:
function getPeopleLength() public view returns(uint256) {
    return people.length;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:05