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

Polygon主网部署OpenZeppelin代理合约失败求助(测试网成功)

解决Polygon主网代理合约部署异常问题

问题复盘

  • 同一合约在Polygon Mumbai测试网部署成功,合约地址0xe286e267c6ed4cbf3cf42bbb7fea05ec8b92da79可正常查看代理合约功能
  • Polygon主网部署后,该地址无法显示「Read as proxy」「Write as proxy」标签,无法查询合约名称、符号等信息
  • 部署时报错:
/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/node_modules/@openzeppelin/upgrades-core/src/deployment.ts:180
      throw new InvalidDeployment(deployment);
            ^
Error: No contract at address 0x42c6C675eEa86798c2A6291Daa653D592787D6c1 (Removed from manifest)
    at waitAndValidateDeployment (/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/node_modules/@openzeppelin/upgrades-core/src/deployment.ts:180:13)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at fetchOrDeployGeneric (/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/node_modules/@openzeppelin/upgrades-core/src/impl-store.ts:70:5)
    at deployImpl (/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/node_modules/@openzeppelin/hardhat-upgrades/src/utils/deploy-impl.ts:96:22)
    at deployProxyImpl (/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/node_modules/@openzeppelin/hardhat-upgrades/src/utils/deploy-impl.ts:74:10)
    at Proxy.deployProxy (/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/node_modules/@openzeppelin/hardhat-upgrades/src/deploy-proxy.ts:35:28)
    at main (/Users/estalella/Documents/gitlab/crypto-nft/final/hardhat/scripts/deployProxy.cjs:16:19)

解决步骤

1. 清理OpenZeppelin升级插件本地缓存

报错提示地址从manifest中移除,说明本地部署记录与链上状态不一致。删除项目根目录下的.openzeppelin文件夹(存储升级插件的缓存和部署记录):

rm -rf .openzeppelin/

重新执行部署脚本,插件会重新生成正确的部署记录。

2. 调整主网Gas配置

Polygon主网Gas价格波动大,部署代理合约时可能因Gas不足导致交易未完全确认。在hardhat.config.js中手动设置更高的Gas参数:

module.exports = {
  networks: {
    polygon: {
      url: "YOUR_POLYGON_RPC_URL",
      accounts: ["YOUR_PRIVATE_KEY"],
      gasPrice: ethers.utils.parseUnits("50", "gwei"),
      gasLimit: 3000000
    }
  }
};

3. 验证链上合约状态

主网显示的地址可能仅为交易发起后返回的预估值,实际合约未部署成功:

  • 检查该地址的链上字节码,若为空或不符合代理合约字节码,说明部署失败
  • 通过Hardhat控制台调用代理合约的implementation()方法(透明代理),验证是否能返回有效实现合约地址

4. 重新部署时指定新代理地址(可选)

若旧地址已出现异常,重新部署时可指定新地址避免复用问题:

const proxy = await upgrades.deployProxy(Contract, [INIT_ARGS], {
  initializer: "initialize",
  proxyAddress: "NEW_PROXY_ADDRESS"
});

5. 确认合约符合代理部署规范

确保合约满足OpenZeppelin代理合约要求:

  • 无构造函数,使用initialize函数完成初始化
  • 继承Initializable合约
  • 避免使用selfdestruct、delegatecall等破坏代理逻辑的操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:47:52