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

使用Hardhat测试Solidity Payable函数时参数报错问题排查

问题分析与修复方案

错误原因

你的Solidity合约safeMint函数仅定义了两个参数(address to和uint256 tokenId),但测试代码中直接将ETH金额作为第三个位置参数传入。在ethers.js中,调用payable合约函数时,发送ETH必须通过覆盖参数(overrides)对象传递(而非普通位置参数)。你传入的cost是BigNumber类型,而ethers.js期望第三个参数是包含value字段的对象,这就导致了类型不匹配的错误。

修复后的测试代码

describe("mint", () => {
  it("should succeed when sending correct ETH amount", async function () {
    await contract.deployed();
    const cost = ethers.utils.parseEther("0.1");
    // 通过overrides对象的value字段传递ETH金额
    await contract.safeMint("0x65.....", 1, { value: cost });
  }); 
});

额外注意事项

  • 确保合约内的mintPrice变量值与测试中传入的0.1 ETH一致(即ethers.utils.parseEther("0.1")对应的数值),否则require(msg.value >= mintPrice)会触发错误。
  • 原测试代码存在语法错误:await contract.safeMint(...)缺少闭合括号,修复时需补上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:55:26