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

智能合约编译正常但调用house时报BigNumber字符串无效错误如何解决

错误原因排查

  • 调用public数组的方式错误。Solidity会自动为public修饰的数组生成带索引参数的getter方法,你需要传入要查询的元素下标才能拿到对应值,比如调用house(0)才能拿到数组第一个元素1。如果直接调用house()不传参数,接口会返回空值,前端尝试把空字符串转为BigNumber类型时就会抛出你遇到的报错。
  • 合约内sugMa函数存在越界逻辑导致调用回滚。你写的循环条件为i <= house.length,当前house数组长度为10,数组的有效索引范围是0~9,当循环执行到i=10时就触发了越界访问。Solidity 0.8及以上版本默认开启越界检查,触发后会直接回滚调用返回空值,同样会导致前端转BigNumber失败。

修复方案

  1. 调用house数组时传入合法的索引参数(0~9之间的整数)即可拿到对应值。
  2. 调整sugMa函数的循环条件,将i <= house.length修改为i < house.length,修复后的完整代码如下:
pragma solidity ^0.8.4;

contract Test {
     uint[] public house = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

    
    function sugMa() public view returns (uint) {
        uint even = 0;
        for (uint i = 0; i < house.length; i++) {
            if (i % 2 == 0) {
                even += 1;
            }
        }
        return even;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:45:00