跳到主要内容

EIP-1967 Upgradeable Proxy

存储冲突的解决方案

Summary

和可升级代理类似,但是他是通过非结构化存储模式来降低存储冲突的风险,他不会将逻辑合约的地址存储在slot 0或者其他的standard storage slot中。

EIP-1967 将地址存储在预先决定的slot中。比如在OpenZeppelin中使用keccak-256(eip1967.proxy.implementation-1)。同时由于该插槽的广泛使用,大部分的区块浏览器可以识别并且处理何时使用代理

为什么需要-1 , 因为-1可以提供额外的随机性,不然slot是可被预测的。

同时EIP-1967还制定了一个用来管理admin storageslot.

看起来他已经很好了,但是仍然有很多的缺点:

  • 容易发生功能重复
  • 低安全性
  • 每次调用都会产生delegatecall的费用