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

Solidity ^0.5.17构造函数部署报BigNumber无效错误是否为版本问题

报错原因

这个报错和Solidity ^0.5.17版本兼容性无关,触发原因是你部署合约时没有给带参构造函数传入合法的参数值:
你的MyConstructor合约构造函数要求传入一个uint类型的整数参数,你部署时留空了参数输入位,传入了空字符串,参数编码环节无法将空字符串转换为符合要求的BigNumber类型,因此抛出该错误。

排查解决方法

  • 部署前先明确构造函数参数要求:你当前的合约构造函数定义为constructor(uint _data) public,部署时必须传入1个非空的无符号整数作为参数,不能留空。
  • 对应不同部署环境的操作方式:
    • 使用Remix部署时:在部署按钮旁的参数输入框中填写你要给data变量赋的整数值(比如1、100这类合法整数),再点击部署即可。
    • 使用Hardhat/Truffle等脚本部署时:在调用部署方法时把参数放在对应位置,示例如下:
      // Hardhat 部署示例
      const MyConstructor = await ethers.getContractFactory("MyConstructor");
      // 括号内的123就是传入构造函数的参数
      const myConstructor = await MyConstructor.deploy(123);
      
    • 使用Ethers.js/Web3.js手动部署时:将构造参数按要求填入参数数组,不要留空。
  • 额外代码优化建议:你当前的getData函数没有修改合约状态,建议加上view修饰符,避免调用时不必要的gas消耗,修改后代码为:
    function getData() public view returns(string memory) {
        return "hello world"; 
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:57:03