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手动部署时:将构造参数按要求填入参数数组,不要留空。
- 使用Remix部署时:在部署按钮旁的参数输入框中填写你要给
- 额外代码优化建议:你当前的
getData函数没有修改合约状态,建议加上view修饰符,避免调用时不必要的gas消耗,修改后代码为:function getData() public view returns(string memory) { return "hello world"; }
内容的提问来源于stack exchange,提问作者WomanInBlockChain
相关产品推荐
相关产品推荐

