Solidity开发者应掌握的十个智能合约: ERC-20 合约,ERC-721 合约,简单拍卖合约,众筹合约,托管合约,多签钱包合约,投票合约,域名注册合约,预测市场合约,游戏合约
多年来,应用链理论已经以各种方式实现。随着时间的推移,对模块化的需求在增加,因为链开发人员意识到,通过外包运行dApp所涉及的一些工作,可以更有效地扩展他们的平台。
所有以太坊开发者都清楚以太坊世界的一条铁律:合约一旦发布就无法修改。因此,对于合约的发布基本上都采用一种慎之又慎的态度,期望在发布前可以做到尽善尽美,力争合约能正常运行一万年。可是,智者千虑必有失,合约发布百分百不出问题几乎是不可能任务。
在这篇博客中,我们将学习开发可升级智能合约背后的基本设计原则。最后,你会更清楚为什么要升级智能合约,如何升级智能合约,以及升级时需要考虑的问题。本文章主要关注以太坊和基于EVM的智能合约。
合约升级方案
随着其自身发展,智能合约已经远非一个基础的“合约”而已了。 现在我们用智能合约创造了一整个生态!但是无论我们编码如何小心,测试如何细致,如果我们的系统变得复杂起来,就免不了更新逻辑去打补丁修bug,抵御恶意攻击或者增加必要的特性。有时,我们甚至需要升级合约去应对EVM的改变或者新发现的漏洞。
我们通过delegatecall这一方式实现了合约升级,同时通过对合约状态存储的理解明白了为什么会存在存储冲突并采用继承的方式进行规避,最后我们的升级是建立在代理合约的fallback函数之上的,这个函数没有返回值,我们通过Solidity Assembly的方式进行数据返回。合约升级在技术上是不可或缺的手段,较好的使用可以帮助我们修复合约漏洞,对合约进行功能迭代,但如果使用不当则会造成较坏的影响,所以合约升级应该配合有效的升级治理方案。
译者推荐:这是我看到关于合约升级及治理写的最好的好文章,有点长,但读完必定有收获。原文来自 OpenZeppelin首席开发人员 Santiago Palladino 关于合约升级的报告,本文详细讨论了当前各种升级方式的原理、各自的优缺点,同时列举了采用相应方案的项目,以便大家进行代码级的参考。在最后一部分,作者还提出了多种配合升级的治理方案。