暂无介绍
用 OpenZeppelin 和 Foundry 创建和部署可升级的 ERC20 代币
深入探讨可升级合约的架构
所有以太坊开发者都清楚以太坊世界的一条铁律:合约一旦发布就无法修改。因此,对于合约的发布基本上都采用一种慎之又慎的态度,期望在发布前可以做到尽善尽美,力争合约能正常运行一万年。可是,智者千虑必有失,合约发布百分百不出问题几乎是不可能任务。
本章内容【合约升级漏洞】
在这篇博客中,我们将学习开发可升级智能合约背后的基本设计原则。最后,你会更清楚为什么要升级智能合约,如何升级智能合约,以及升级时需要考虑的问题。本文章主要关注以太坊和基于EVM的智能合约。
Dapp全栈开发:合约升级
合约升级方案
随着其自身发展,智能合约已经远非一个基础的“合约”而已了。 现在我们用智能合约创造了一整个生态!但是无论我们编码如何小心,测试如何细致,如果我们的系统变得复杂起来,就免不了更新逻辑去打补丁修bug,抵御恶意攻击或者增加必要的特性。有时,我们甚至需要升级合约去应对EVM的改变或者新发现的漏洞。
关于openzepplin智能合约可升级代理的安全问题与防御措施。
我们通过delegatecall这一方式实现了合约升级,同时通过对合约状态存储的理解明白了为什么会存在存储冲突并采用继承的方式进行规避,最后我们的升级是建立在代理合约的fallback函数之上的,这个函数没有返回值,我们通过Solidity Assembly的方式进行数据返回。合约升级在技术上是不可或缺的手段,较好的使用可以帮助我们修复合约漏洞,对合约进行功能迭代,但如果使用不当则会造成较坏的影响,所以合约升级应该配合有效的升级治理方案。
在这篇文章中,我们将详细分析现有的智能合约升级策略,描述我们在实践中观察到的弱点,并为需要升级的合约提供建议。
已下架已下架
当使用OpenZeppelin Upgrades编写可升级合约时,有一些在编写Solidity代码时需要记住一些注意事项。
使用OpenZeppelin升级插件部署的智能合约可以通过升级来修改代码,同时保留原合约地址、状态和余额。这让帮助我们为项目添加新功能,或修复在生产中可能发现的任何错误。
译者推荐:这是我看到关于合约升级及治理写的最好的好文章,有点长,但读完必定有收获。原文来自 OpenZeppelin首席开发人员 Santiago Palladino 关于合约升级的报告,本文详细讨论了当前各种升级方式的原理、各自的优缺点,同时列举了采用相应方案的项目,以便大家进行代码级的参考。在最后一部分,作者还提出了多种配合升级的治理方案。
2241 回答,2135赞同
0 回答,827赞同
13 回答,101赞同
0 回答,99赞同
0 回答,89赞同
6 回答,54赞同
2 回答,49赞同
5 回答,43赞同
0 回答,40赞同
0 回答,28赞同