智能合约的升级策略 / 学习智能合约#26

in hive-180932 •  4 years ago 

upgrades.jpg

区块链有不可变性,但这并不意味着不能合理地修改。有不少人抱着“代码即法律”的观点,其实法律都是由人来定的。如果法律不再适用于当前的状态,是不是可以去修改呢?!

已经上链的智能合约是无法修改的,如果需要新的功能咋办呢?只能发布新的合约啰!uniswap从V1到V2就是这种思路。这种升级的思路在很多人看来不太理想,总想着有新的方法可以实现升级。

upgrades2.jpg

https://docs.openzeppelin.com/upgrades-plugins/1.x/proxies

openzeppelin发布了一个可以升级的方法,如上所示:在所有执行合约的前面加一个代理合约,用户与代理合约交互。执行合约更新后,在代理合约中更新下地址即可,合约地址不发生变化,用户感觉不到合约的变化,以此来实现流畅的升级。

在openzeppelin的升级方法中,合约仍然具有不可变性,只是在用户这头加了一个盖子,以让用户感觉不到这种变化。而代理合约后面的执行合约就可以方便地升级,继承前一个合约的方法和数据,不用做出太多的牺牲。

目前这种使用代理合约来升级的方法没有在头部的应用中看到,比如uniswap 、yfi等。大家可能更愿意看到一种显示的升级来体现变化,而不是owner偷偷升级以更改参数!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!