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

使用Hardhat部署可升级合约触发invalid format type错误求助

解决Hardhat部署可升级合约时的"invalid format type"错误

问题描述

使用Hardhat部署可升级合约,已完成依赖安装与合约编译,但部署时触发如下错误:

Error: invalid format type (argument="format", value=true, code=INVALID_ARGUMENT, version=abi/5.6.1)
    at Logger.makeError (/Users/mac/Documents/MEME MASTER/node_modules/@ethersproject/logger/src.ts/index.ts:261:28)
    at Logger.throwError (/Users/mac/Documents/MEME MASTER/node_modules/@ethersproject/logger/src.ts/index.ts:273:20)
    at Logger.throwArgumentError (/Users/mac/Documents/MEME MASTER/node_modules/@ethersproject/logger/src.ts/index.ts:277:21)
    at ConstructorFragment.format (/Users/mac/Documents/MEME MASTER/node_modules/@ethersproject/abi/src.ts/fragments.ts:720:20)
    at /Users/mac/Documents/MEME MASTER/node_modules/@ethersproject/abi/src.ts/interface.ts:167:63
    at Array.map (<anonymous>)
    at Interface.format (/Users/mac/Documents/MEME MASTER/node_modules/@ethersproject/abi/src.ts/interface.ts:167:36)
    at /Users/mac/Documents/MEME MASTER/node_modules/@openzeppelin/hardhat-upgrades/src/utils/deploy-impl.ts:113:41
    at resumeOrDeploy (/Users/mac/Documents/MEME MASTER/node_modules/@openzeppelin/upgrades-core/src/deployment.ts:76:30)
    at async /Users/mac/Documents/MEME MASTER/node_modules/@openzeppelin/upgrades-core/src/impl-store.ts:63:23 {
  reason: 'invalid format type',
  code: 'INVALID_ARGUMENT',
  argument: 'format',
  value: true
}

尝试部署至Goerli等多个测试网,问题均未解决。

修复步骤

1. 修复依赖版本兼容性

该错误核心是@ethersproject/abi与@openzeppelin/hardhat-upgrades版本不匹配:新版本ethers的format方法不再接受布尔值参数,而旧版OpenZeppelin插件仍在使用该调用方式。

  • 查看当前依赖版本:
    npm list @ethersproject/abi @openzeppelin/hardhat-upgrades
    
  • 安装兼容版本:
    npm install @openzeppelin/hardhat-upgrades@latest @ethersproject/abi@^5.7.0
    

2. 清理缓存并重新编译

版本调整后,清除旧编译产物避免干扰:

npx hardhat clean
npx hardhat compile

3. 检查部署脚本的ABI处理逻辑

如果部署脚本中手动处理ABI,确认未传递true作为format参数。错误示例:

const formattedAbi = new ethers.utils.Interface(contractAbi).format(true);

正确用法需传入字符串类型格式参数(如'full'、'minimal'):

const formattedAbi = new ethers.utils.Interface(contractAbi).format('full');

4. 校验合约ABI生成

查看artifacts目录下的合约JSON文件,确认ABI结构无异常。若合约使用特殊语法(如可升级合约的initialize函数),确保Solidity编译器版本与依赖兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:58:33