常见以太坊合约升级思路

常见的两种合约升级思路,一种是使用代理合约,第二种是将逻辑和数据分离成不同的合约

代理合约使用delegatecall操作码将函数调用转发到可更新的目标合约。 由于delegatecall保留了函数调用的状态,因此可以更新目标合约的逻辑,并且状态将保留在代理合约中以供更新后的目标合约的逻辑使用。与delegatecall一样,msg.sender将保持代理合约的调用者身份。

分离逻辑和数据合约将智能合约拆分两个合约,一个是包含数据(变量,结构,映射等)以及getter/setter的数据合约,另一个是包含如何更新这些数据的业务逻辑的逻辑合约。

逻辑合约通过setter更新数据,而数据合约只允许逻辑合约调用setter。这允许在保持数据不变的同时更换实现逻辑,从而实现完全可升级的系统。

或者升级逻辑合约,通过前置一个代理合约的方式。或者升级数据合约,通过迁移或指针指向的方式。

猜你喜欢

转载自blog.csdn.net/2301_76642277/article/details/130412958