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

Hardhat验证ProxyAdmin合约失败:字节码不匹配问题求助

排查Hardhat验证ProxyAdmin字节码不匹配问题
  • 核对Hardhat Upgrades版本一致性
    这个错误最常见的原因是部署合约时使用的@openzeppelin/hardhat-upgrades版本和现在验证时的版本不一致,插件不同版本的默认ProxyAdmin合约字节码可能存在差异。

    • 找到部署时的包锁文件(package-lock.json或yarn.lock),搜索@openzeppelin/hardhat-upgrades获取当时的版本号
    • 本地安装对应版本:
      npm install @openzeppelin/hardhat-upgrades@x.x.x
      # yarn用户执行
      yarn add @openzeppelin/hardhat-upgrades@x.x.x
      
    • 重新运行验证命令:npx hardhat verify --network matic 0x877D0e3fB2732d074aa70D961320e3AE58320705
  • 检查是否使用了自定义ProxyAdmin
    如果部署时未使用插件默认的ProxyAdmin,而是自定义了该合约,直接用默认逻辑验证会出现字节码不匹配:

    • 确认部署脚本中是否有自定义ProxyAdmin的部署代码,比如手动部署了自研的ProxyAdmin合约并关联代理
    • 验证时直接指定自定义的ProxyAdmin合约进行验证,若合约无构造参数,运行:
      npx hardhat verify --network matic 0x877D0e3fB2732d074aa70D961320e3AE58320705
      
    • 如果自定义ProxyAdmin有构造参数,需要在命令后追加对应的参数(比如管理员地址)
  • 手动比对字节码定位差异
    若上述方法无效,直接对比区块链上的字节码和本地编译的字节码:

    • 从Polygon Scan获取已部署ProxyAdmin的字节码(合约详情页的「Bytecode」板块)
    • 本地编译对应版本的ProxyAdmin(默认的在@openzeppelin/hardhat-upgrades依赖中,自定义的则编译自研合约),拿到编译后的字节码(项目artifacts目录下)
    • 忽略字节码开头的构造参数编码部分,对比核心运行时字节码是否一致,找到差异点后针对性排查
  • 检查部署脚本的配置修改
    查看部署脚本是否修改了Hardhat Upgrades的默认配置:

    • 是否用configureUpgradeable方法修改了ProxyAdmin的相关配置
    • 是否在部署代理时指定了非默认的ProxyAdmin地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:01:01