智能合约升级定义
What is a smart contract upgrade?
A smart contract upgrade is an
action that can arbitrarily(任意地) change the code executed(被执行) in an address
while preserving(保存) storage and balance.
智能合约升级是一种在保留存储和余额的同时,而又可以任意更改在地址中执行代码的操作。
首先看看智能合约升级的替代方案
(1)合约注册表
由多个合约组成的系统可能依赖合约注册中心。每当合约 A 需要与 B 进行交互时,它首先会查询注册表以获得 B 的地址。通过对注册表的修改,管理员可以将 B 替换为替代实现 B',从而改变其行为。但是,此机制在切换到 B'时不会保留 B 的状态,如果需要手动迁移,则可能会出现问题。此模式的某些版本**通过在存储合约delegatecall()业务逻辑合约,达到将存储和逻辑解耦来缓解这种情况**:状态保持在不变的存储合约中,并且只能根据需要更改的业务逻辑合约。我们将在本文后面部分深入探讨逻辑和存储合约分离。
[参见我之前写的--链下预言机的代理合约的两种设计模式 2020年10月25日](https://blog.csdn.net/Tesla_Zhou/article/details/109272288)
(2)策略模式
更改合约中部分特定功能函数的代码。放弃在合约A中实现某特定函数来执行某特定功能,而是采用**在合约A中通过调用未实现某特定功能的接口**,又有其它实现了该接口的特定不同算法的合约B、B`、B``、B```......来处理该任务,通过在合约A中切换合约B、B`、B``、B```......,可以有效地在不同的“策略”之间进行切换。
【合约A中切换接口,例如:function getB (InterfaceB newInterfaceB) { …} ,其中newInterfaceB在函数体中为一个address】
Compound 就是一个很好的例子,它具有不同的 RateModel实现计算利率及其