Hardhat部署代理合约后ProxyAdmin验证失败问题求助
解决Hardhat验证ProxyAdmin合约字节码不匹配的问题
1. 确保OpenZeppelin依赖版本一致
部署代理合约时使用的@openzeppelin/hardhat-upgrades和@openzeppelin/contracts-upgradeable版本必须与当前项目依赖版本完全相同。不同版本的ProxyAdmin合约代码可能存在差异,直接导致字节码不匹配。检查package.json中的版本号,若有更新过依赖,回退到部署时的版本。
2. 复制对应版本的ProxyAdmin源码
不要使用第三方来源的ProxyAdmin代码,直接从项目依赖的OpenZeppelin包中提取:
- 找到
node_modules/@openzeppelin/contracts-upgradeable/proxy/admin/ProxyAdmin.sol文件 - 将该文件完整复制到本地
contracts目录下,确保代码与部署时插件使用的完全一致
3. 核对编译器配置
检查hardhat.config.js中的Solidity配置,必须与部署时的设置完全匹配:
- Solidity版本(比如
0.8.17)不能变更 - 优化器(optimizer)的开关和参数要一致,部署时开启优化的话,验证时也必须开启
4. 清除缓存并重新编译
执行以下命令清除旧编译缓存,重新生成字节码:
npx hardhat clean npx hardhat compile
5. 指定合约路径验证
如果上述步骤无效,尝试在验证命令中明确指定合约路径和名称:
env $(cat .env) npx hardhat verify --network goerli 0x45a87e0E632a4C269De0FEE6a6FbABF7B4f8b92d --contract contracts/ProxyAdmin.sol:ProxyAdmin
6. 对比字节码排查差异
- 从Goerli区块浏览器查看目标地址的字节码
- 本地编译后的字节码位于
artifacts/contracts/ProxyAdmin.sol/ProxyAdmin.json的bytecode字段 - 对比两者是否一致,若不一致,重新检查代码版本、编译配置是否正确
内容的提问来源于stack exchange,提问作者Yilmaz
相关产品推荐
相关产品推荐

