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 函数并加防重复初始化。
相关标准
同属「接口」的其他标准