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 storage
的slot
.
看起来他已经很好了,但是仍然有很多的缺点:
- 容易发生功能重复
- 低安全性
- 每次调用都会产生
delegatecall
的费用