如何修改或隐藏Etherscan上显示的旧implementation合约地址
问题说明
使用Solidity开发的可升级智能合约已完成多轮升级,每次升级后对应的implementation(逻辑实现)合约地址都会变更,但Etherscan对应地址页面始终留存显示旧的implementation合约地址。
- 涉及对象:Rinkeby测试网对应代理合约的Read Proxy读取页面
- 问题现象:页面留存显示历史升级前的旧implementation合约地址
- 目标:找到修改或隐藏页面留存的旧implementation合约地址的可行操作方案。
操作方案
首先排除链上升级未生效的问题:先调用代理合约标准的implementation()视图方法,确认返回值是你最新升级后的逻辑合约地址。如果返回值仍是旧地址,说明之前的升级交易没有实际生效,需要先重新发送正确的升级交易完成链上状态更新,再处理Etherscan的显示问题。
Etherscan留存旧implementation地址本质是平台侧的代理映射缓存没有自动更新,不需要在合约层面做任何特殊操作,按以下步骤触发平台更新即可:
- 打开对应代理合约的Etherscan页面,找到顶部
Contract标签的下拉菜单,依次选择More Options->Is this a proxy? - 在跳转的代理校验页面直接点击
Verify按钮,Etherscan会重新扫描代理合约标准存储槽,读取当前链上真实生效的implementation地址 - 扫描校验完成后,平台会自动替换缓存的代理映射信息,旧的implementation地址记录会被覆盖,代理读取页只会展示当前生效的最新逻辑合约地址,不会再留存旧地址显示。
如果点击Verify后仍然显示旧地址,可以直接提交Etherscan官方支持工单,附上代理合约地址、对应升级交易的哈希、最新的implementation合约地址,说明已完成合约升级需要更新代理显示信息即可,工单通常1-2个工作日会处理完成,测试网处理速度略慢于主网。
- 不存在单独“隐藏”旧implementation地址的独立操作:Etherscan的代理合约页面只会展示当前校验到的生效中implementation地址,只要平台侧的代理映射缓存更新完成,旧地址自然不会再出现在代理页面的标识区域。
内容的提问来源于stack exchange,提问作者PrincePRS
相关产品推荐
相关产品推荐

