使用Ethers.js调用带value与参数的合约函数报错求助
解决Ethers.js调用Payable合约函数时的invalid BigNumber value错误
问题原因
你混淆了合约函数输入参数和交易覆盖参数(overrides)的传递方式:
- 合约的
mint函数要求第一个参数是uint256 _count,这是合约逻辑需要的参数 value是交易中附带的ETH金额,属于Ethers.js的交易覆盖选项,必须单独作为第二个参数传入
你当前的写法把两个参数打包成一个对象传给mint,Ethers会把这个对象当作_count参数(要求是uint256类型),因此触发了BigNumber无效的报错。
正确调用代码
// 合约参数在前,交易overrides在后 await contract.mint( ethers.BigNumber.from(2), // 合约函数的_count参数 { value: ethers.utils.parseEther("0.1") // 交易的value选项 } );
也可以直接传数字(Ethers会自动转换为BigNumber):
await contract.mint(2, { value: ethers.utils.parseEther("0.1") });
额外建议(避免价格不匹配报错)
为了防止合约中IncorrectPrice的revert错误,建议先从合约获取定价,计算出准确的value:
const pricePerNFT = await contract.price(); const totalValue = pricePerNFT.mul(2); // 乘以购买数量2 await contract.mint(2, { value: totalValue });
内容的提问来源于stack exchange,提问作者Pexate
相关产品推荐
相关产品推荐

