W3
EIP-1967EIP接口Final(2019-04-30)

代理存储槽标准

规定代理合约把实现地址、管理员等元数据放在特定哈希槽位,避免与业务存储冲突。

适用链:全部 EVM 链

为什么重要:不按标准来的代理,浏览器与工具无法自动识别实现地址,用户也就看不到真实逻辑。

函数签名与选择器

选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。

签名 / 字段选择器 / topic0说明
implementation 槽keccak256("eip1967.proxy.implementation") - 1。
admin 槽keccak256("eip1967.proxy.admin") - 1。
beacon 槽keccak256("eip1967.proxy.beacon") - 1。

代码模板

读取实现地址(viem)
读取实现地址(viem)TypeScript

实现与使用时的常见陷阱

  • 该槽是「哈希减一」,不是直接的 keccak 结果。算错了读到的永远是 0。
  • 透明代理与 UUPS 都遵循 1967 槽位,但升级权限的位置不同:透明代理在 admin,UUPS 在实现合约里。
  • 代理合约不能有构造函数初始化状态(构造函数写的是代理自己的存储),必须用 initialize 函数并加防重复初始化。

相关标准

同属「接口」的其他标准
想把这个标准用起来?开发者路径的第 1–2 阶段讲了怎么把它写进项目;合约 IDE里有对应的可编辑模板与静态自检;链上 API 参考则给出前端调用它的三种写法。