智能合约如何升级?

今年(2020年)以太坊上的DeFi项目非常火爆,你会发现,这些项目经常会升级。不是说智能合约不可篡改吗?为啥还可以升级?

合约升级设计

在以太坊上的智能合约并不是像我们平常用的手机或电脑上的软件,先删除再安装新版本,或者使用覆盖安装,或者打一个升级补丁。

智能合约的升级比较复杂,我这里提供一个针对非专业人士的科普版本。

以太坊的账户分为外部账户和合约账户,智能合约就是部署在合约账户里。智能合约的创建通过一个外部账户发送一笔内置了代码的交易到以太坊系统指定地址来实现的。

智能合约所有的函数执行动作都需要外部账户发送交易来触发。智能合约之间也可以通信和触发函数执行,但起初的原点还得是一个外部账户来触发。而且可以相互通信的智能合约,都是预先设计好的。

一个大型的复杂的合约产品设计,会拆分成多个智能合约来具体部署,其中有一个是主控制合约,其他的可以被称为子合约。就像我们写程序时有主函数和子函数一样。让这些合约之间的相互调用和通信来完成复杂的业务逻辑。

每一个智能合约一经部署,都是不可篡改的,但,子合约是可以被替换的,可以新部署一个子合约来替换掉旧的合约。智能合约的升级就是部署一个新的子合约,替换掉原先的子合约,并让主控制合约从此调用这个新子合约。

一般一个大型的Dapp,在用户层面就是一个主控制合约,这个合约地址是不会变的,代码也是不会升级的。但主控制合约连接着大量的子合约,这些子合约是可以被替换的。

用更专业一点的术语来描述是这样的,以太坊的合约会被设计成两部分,一部分控制器;另一部分是业务执行逻辑,分别使用不同的合约账户来部署。合约升级的过程就是对业务执行逻辑的替换,并且重新和控制器映射。

区块链上的智能合约不可篡改的特性,让合约的升级机制从一开始就要设计好。一个大型的智能合约从一开始就要想好要实现哪些功能,不能像精益创业那样先出一个最少功能的可运行的版本,然后再去不停迭代。

可升级和中心化

智能合约可升级,这就意味着智能合约的管理员有非常大的权限。这对去中心化是一个挑战。

以太坊上现在火热的这些DeFi项目,资产都是“托管”型的。在CeFi里,如交易所,用户将币充值给交易所,交易所有完全的控制权。在以太坊的DeFi里,如Compound,用户也是要将资产充值到智能合约的。

理论上用户充值到compound的资产是只受合约代码控制,但充值业务的子合约是可升级的,管理员可以改业务逻辑。

所以理论上目前以太坊上的很多合约也是存在一定的中心化信任问题。

EOS上的智能合约是可以直接覆盖升级的,都不需要像ETH这样通过子合约替换。有些EOS的智能合约部署后,为了对外宣称自己不会犯中心化的作恶,干脆直接更改了合约账号的权限,放弃升级的权力。

智能合约在一定程度上是需要信任项目主体的。

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/22753

联系我们

aliyinhang@gmail.com