用 OpenZeppelin 和 Foundry 创建和部署可升级的 ERC20 代币
Beacon Proxy Pattern
本文讨论了以太坊上的可升级智能合约及其存储选项。作者探讨了三种主要的数据存储方法,包括各版本独立的存储、将数据存储在单独的数据库合约中,以及通过代理合约存储数据。其中,每种方法都有其优缺点,文章提供了代码示例和解决方案,展示了可升级合同在动态环境中的实现挑战和潜力。最后,作者承诺在后续文章中进一步探讨相关主题。
本文详细介绍了代理合约的概念及其在智能合约中的重要性,特别是如何通过代理合约实现智能合约的升级性和降低部署成本。文章通过示例代码和图解,深入解析了代理合约的工作原理和实现方法,并探讨了存储冲突问题及其解决方案。
本篇文章是关于可升级智能合约的系列文章中的第二篇,深入探讨了Solidity的数据存储方法及使用代理合约的潜在问题。文章重点讲解了以太坊虚拟机(EVM)的存储模型,以及如何避免不同版本智能合约之间存储布局的碰撞,提供了一些最佳实践和解决方案,具有较高的技术深度和实用价值。
EIP 1967 是一个关于代理合约存储信息位置的标准,用于解决代理合约与实现合约之间的存储冲突问题。文章详细介绍了实现地址和管理员地址的存储位置,并解释了如何防止存储冲突及如何使用 EIP 1967 来识别代理合约。
本文档描述了一种可扩展的Safe架构,旨在增加Safe的新颖集成和应用。该架构通过ExtensibleFallbackHandler实现,允许自定义方法调用和EIP-712签名验证,同时保持与现有Safe功能的向后兼容性,例如ERC-1271签名和Token回调,从而扩展Safe的功能,并允许更灵活的交互方式。
本文档介绍了 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 集成。
本文介绍了如何使用 Foundry 库来部署和管理可升级合约,包括安装 OpenZeppelin Contracts v5 或 v4 的步骤、使用 NPM 或 Soldeer 进行替代安装的方法、Foundry 的要求、运行前的配置(如安装 Node.js、配置 foundry.toml)以及在 Windows 环境下的设置等。
本文介绍了如何在Hardhat项目中使用@openzeppelin/hardhat-upgrades插件来部署和升级代理合约以及信标代理合约。文章提供了安装插件、在脚本和测试中使用的示例代码,以及升级代理合约和信标合约的步骤,并提及了完整的API文档。
@openzeppelin/hardhat-upgrades
本文档介绍了如何将项目从OpenZeppelin CLI迁移到OpenZeppelin Upgrades Plugins(适用于Truffle或Hardhat)。重点介绍了CLI和插件之间的主要区别,即插件允许开发者更灵活地管理代理合约,并提供了详细的迁移步骤和升级合约的示例。
本文介绍了如何使用@openzeppelin/truffle-upgrades 插件在 Truffle 迁移和测试中部署和升级合约的代理。 包括使用 deployProxy 和 upgradeProxy 函数部署和升级普通代理,以及使用 deployBeacon、deployBeaconProxy 和 upgradeBeacon 函数来部署和升级信标代理。
deployProxy
upgradeProxy
deployBeacon
deployBeaconProxy
upgradeBeacon
本文介绍了使用 OpenZeppelin Upgrades Plugins 升级智能合约的方法,包括升级的重要性、如何使用插件升级合约、升级的工作原理以及编写可升级合约的注意事项。通过代理合约和实现合约的分离,实现了在保持合约地址、状态和余额不变的情况下修改合约代码。