所有以太坊开发者都清楚以太坊世界的一条铁律:合约一旦发布就无法修改。因此,对于合约的发布基本上都采用一种慎之又慎的态度,期望在发布前可以做到尽善尽美,力争合约能正常运行一万年。可是,智者千虑必有失,合约发布百分百不出问题几乎是不可能任务。
在这篇博客中,我们将学习开发可升级智能合约背后的基本设计原则。最后,你会更清楚为什么要升级智能合约,如何升级智能合约,以及升级时需要考虑的问题。本文章主要关注以太坊和基于EVM的智能合约。
本文档介绍了 OpenZeppelin Hardhat Upgrades 插件提供的 API,用于在Hardhat环境中使用OpenZeppelin Contracts进行智能合约的代理部署和升级。
本文档介绍了如何将 OpenZeppelin Foundry Upgrades 与 OpenZeppelin Defender 集成,以便通过 Defender 进行合约部署和升级。主要包括安装配置、环境设置、网络选择以及可升级和不可升级合约的部署示例,强调了使用 Defender 部署时的注意事项,如API密钥配置、网络选择、以及如何在Defender界面监控部署状态。
本文档介绍了 OpenZeppelin Foundry Upgrades API,涵盖了 Foundry artifact 和 Annotation 格式的合约名称规范,以及 deployUUPSProxy、deployTransparentProxy、upgradeProxy、deployBeacon 和 proposeUpgrade 等函数的详细用法和参数选项,旨在帮助开发者使用 Foundry 脚本或测试来部署和管理可升级的合约,以及与 OpenZeppelin Defender 集成。
本文介绍了如何将 Hardhat Upgrades 插件与 OpenZeppelin Defender 集成,以便利用 Defender 的气体定价、重新提交和自动字节码及源代码验证等功能。
本文介绍了OpenZeppelin Defender中的Deploy模块,该模块旨在安全地跨链部署和升级智能合约。它提供了配置环境、自动化部署流程、确保合约验证以及管理多链部署的功能,并与CI/CD集成,支持使用API、Hardhat和Foundry插件进行部署和升级,并允许添加metadata以方便追踪和分类。
本文介绍了如何使用 Foundry 库来部署和管理可升级合约,包括安装 OpenZeppelin Contracts v5 或 v4 的步骤、使用 NPM 或 Soldeer 进行替代安装的方法、Foundry 的要求、运行前的配置(如安装 Node.js、配置 foundry.toml)以及在 Windows 环境下的设置等。
本章内容【合约升级漏洞】
深入探讨代理(Proxy) 、可初始化代理、可升级代理、透明代理、UUPS 、信标代理、 变形合约
我们通过delegatecall这一方式实现了合约升级,同时通过对合约状态存储的理解明白了为什么会存在存储冲突并采用继承的方式进行规避,最后我们的升级是建立在代理合约的fallback函数之上的,这个函数没有返回值,我们通过Solidity Assembly的方式进行数据返回。合约升级在技术上是不可或缺的手段,较好的使用可以帮助我们修复合约漏洞,对合约进行功能迭代,但如果使用不当则会造成较坏的影响,所以合约升级应该配合有效的升级治理方案。
Dapp全栈开发:合约升级
使用非代理模式实现合约升级
合约升级方案
已下架已下架