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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:54:23