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

调用合约payable mint方法时出现non-payable无法覆盖value错误求助

解决合约mint方法测试报错方案

错误根源

合约代码里的mint明明声明了payable,但测试用的合约实例ABI未正确标记该方法为可接收ETH,导致传入value参数时触发non-payable method cannot override value错误。

修复步骤

  • 重新编译合约
    用编译工具重新生成ABI:

    • Hardhat环境执行:npx hardhat compile
    • Truffle环境执行:truffle compile
      确保测试文件导入的是编译后最新的合约ABI,避免引用旧版本。
  • 验证ABI正确性
    找到编译生成的ETHDaddy.json文件,检查abi数组内的mint方法定义,必须包含"stateMutability": "payable":

    {
      "inputs": [{"internalType": "uint256", "name": "_id", "type": "uint256"}],
      "name": "mint",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
    

    若缺失该字段,说明编译过程异常,排查合约代码语法错误或编译工具版本兼容性(当前用的是ethers.js contracts/5.7.0,确保编译工具与ethers版本匹配)。

  • 确认合约实例创建逻辑
    测试文件中创建合约实例时,必须使用最新ABI:

    const ETHDaddy = await ethers.getContractFactory("ETHDaddy");
    // 部署新合约或连接已部署合约
    const ethDaddy = await ETHDaddy.deploy(); 
    await ethDaddy.deployed();
    

额外排查

  • 若连接的是已部署合约,确保传入的ABI是最新编译产物,而非旧备份文件。
  • AMOUNT需为有效BigNumber(比如ethers.utils.parseEther("0.1")),但从错误信息看该参数格式正常,大概率不是问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:01:06