Truffle测试报错:Solidity函数参数数量无效求助
解决"Invalid number of arguments to Solidity function"报错问题
这个报错的根源在于你调用合约fund函数的方式不符合老版本Web3.js(Truffle 4配套的Web3 0.20.x版本)的要求,导致Web3误以为你传入了过多的参数。
问题分析
你的合约里fund函数只接受1个参数(uint projectId),但在测试代码中,你这样调用:
_fundEth.fund.sendTransaction(_id, { from: accounts[0], value: 1000000 });
在Web3 0.20.x中,sendTransaction方法的第一个参数应该是函数参数的数组,第二个参数才是交易选项对象。你现在把_id单独作为第一个参数,Web3会把_id和选项对象都当作fund函数的参数,相当于传入了2个参数,自然就触发了参数数量不匹配的错误。
两种修复方案
方案1:直接调用合约函数(推荐)
对于非view/pure的合约函数,Truffle允许你直接调用并传入交易选项,这种写法更简洁直观:
_fundEth.fund(_id, { from: accounts[0], value: 1000000 });
方案2:正确使用sendTransaction方法
如果你坚持要用sendTransaction,需要把函数参数放在数组里传递:
_fundEth.fund.sendTransaction([_id], { from: accounts[0], value: 1000000 });
额外提示
另外注意你提供的合约代码里,create函数使用了_indexCounter变量,但没有在合约里声明这个变量:
// 合约里缺少这个变量声明,补上才能正常编译 uint _indexCounter;
这会导致合约编译失败,记得补上这个声明才能正常部署合约。
内容的提问来源于stack exchange,提问作者Yuri van Geffen
相关产品推荐
相关产品推荐

