注:
仅作技术交流,禁止商用
如有侵权,请联系删除
1 openzeppelin的透明代理方式
最流行,但是有一定安全隐患和合约代码编写要求
1 数据存储在proxy合约上,通过admin接口来升级和更新proxy合约地址
2 访问到proxy合约的请求,会因为没有对应的方法触发fallback, 在fallback里调用 逻辑合约来完成实际功能。
对逻辑合约的编写有一定要求,比如不允许在构造函数中初始化,不允许使用delegatecall和selfdestruct, 更新版本时不需要修改变量顺序和类型等。并且还可以优化(ProxyAdmin合约方式)
2 eip1822的uups代理标准(openzeppelin建议使用)
一句话描述:逻辑合约继承一个接口(upgradeTo), 从而proxy合约可以去掉升级的功能并节省gas,但逻辑合约代码会更臃肿
3 usdt自己实现的更新合约更新策略
较为简单,但稍显定制化,不通用,方案2参考了一些usdt升级实现