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

如何查找代理合约中存储的implementation实现合约地址?

可升级代理合约实现地址查询方法

你贴出的代码已经说明该代理合约遵循EIP-1967标准的存储槽规范,有多种方式可以查询到对应的implementation合约地址:

  • 直接读取指定存储槽
    EIP-1967标准明确规定了实现合约地址的固定存储槽为0x360894a13ba1a341da0bd3349e45cfe1f79dad0428cc8c76e4632ac2fc12872,也就是你代码中_IMPLEMENTATION_SLOT常量的实际值。你可以直接调用链上RPC的eth_getStorageAt方法,传入代理合约地址和该存储槽编号,返回结果转换为地址格式就是当前的实现合约地址。
    以web3.js调用为例,示例代码如下:
const implementationSlot = "0x360894a13ba1a341da0bd3349e45cfe1f79dad0428cc8c76e4632ac2fc12872";
const rawValue = await web3.eth.getStorageAt(proxyAddress, implementationSlot);
const implementationAddress = web3.utils.toChecksumAddress("0x" + rawValue.slice(-40));
  • 调用公开查询接口
    大部分符合标准的代理合约都会实现implementation()公开查询方法,你没在当前代码段找到对应逻辑,是因为这部分逻辑通常封装在代理的父合约(比如OpenZeppelin的ERC1967Proxy基础合约)中,不会重复写在自定义代理的代码里。如果是透明代理模式,需要用代理管理员地址调用该方法才能拿到正确返回,普通用户调用该方法会自动将请求转发给实现合约,不会返回代理存储的地址。

  • 区块浏览器直接查看
    主流公链的区块浏览器已经内置了EIP-1967代理的识别逻辑,打开代理合约的详情页后,会直接在显眼位置标注出当前绑定的Implementation合约地址,无需手动调用接口查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:24:04