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

前端调用智能合约报错non-payable method cannot override value

报错根因

该报错是ethers.js的本地校验拦截导致,和链上合约逻辑、传入的ETH金额计算无关:

  • ethers.js判断合约方法是否支持转ETH,完全依赖初始化合约实例时传入的ABI定义,不会主动查询链上合约的实际方法修饰符
  • 报错信息non-payable method cannot override value的含义是:你当前传入的NFT.abi中,mintTo方法被标记为非payable类型,因此ethers直接拦截了带value参数的调用,不会将交易广播到链上
  • 你代码里value: ethers.utils.parseEther("0.00420")的写法是正确的,报错里打印的BigNumber值和该金额完全匹配,不存在参数格式错误
修复方案
  • 修正ABI定义
    打开项目中导入的NFT.abi文件,找到mintTo方法对应的条目,将stateMutability字段的值改为payable,正确的方法定义示例如下:
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "mintTo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    }
    
  • 校验ABI完整性
    建议直接从对应版本的合约编译产物中复制完整ABI,不要手动删减、拼接ABI内容,避免其他方法也出现类似的属性标记错误。
  • 重启前端服务,重新触发铸造逻辑即可,你现有的合约调用、传参代码不需要额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:27:10