使用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
相关产品推荐
相关产品推荐

