用 OpenZeppelin 和 Foundry 创建和部署可升级的 ERC20 代币
Beacon Proxy Pattern
本文讨论了以太坊上的可升级智能合约及其存储选项。作者探讨了三种主要的数据存储方法,包括各版本独立的存储、将数据存储在单独的数据库合约中,以及通过代理合约存储数据。其中,每种方法都有其优缺点,文章提供了代码示例和解决方案,展示了可升级合同在动态环境中的实现挑战和潜力。最后,作者承诺在后续文章中进一步探讨相关主题。
本文详细介绍了代理合约的概念及其在智能合约中的重要性,特别是如何通过代理合约实现智能合约的升级性和降低部署成本。文章通过示例代码和图解,深入解析了代理合约的工作原理和实现方法,并探讨了存储冲突问题及其解决方案。
本篇文章是关于可升级智能合约的系列文章中的第二篇,深入探讨了Solidity的数据存储方法及使用代理合约的潜在问题。文章重点讲解了以太坊虚拟机(EVM)的存储模型,以及如何避免不同版本智能合约之间存储布局的碰撞,提供了一些最佳实践和解决方案,具有较高的技术深度和实用价值。
EIP 1967 是一个关于代理合约存储信息位置的标准,用于解决代理合约与实现合约之间的存储冲突问题。文章详细介绍了实现地址和管理员地址的存储位置,并解释了如何防止存储冲突及如何使用 EIP 1967 来识别代理合约。
深入探讨代理(Proxy) 、可初始化代理、可升级代理、透明代理、UUPS 、信标代理、 变形合约
寻找代理合约真地址的一种方法
在手把手教你实现Bank智能合约这篇文章中,我们认真拆解了需求,罗列了相关的知识点,已经实现了基于权限控制的存款和取款逻辑。这篇文章,我们会提升难度,不仅仅要实现功能,还要思考怎么合理的去设计一个合约。
函数选择器冲突在代理模式中,如果方法不加以校验可能会出现安全漏洞.
为了使用在 Layer1 和 Layer2 之间移动的 SUDT 通证,您需要部署 ERC20 代理合约来与它们交互。这个特殊的 solidity 智能合约是由 Nervos 团队准备的,允许 EVM 与 Nervos 上的 SUDT 通证交互。
代理的核心逻辑contractProxy{addresspublicimplement;constructor(addressimpl){implement=impl;}fallback()externalpayab
代理合约是智能合约开发者的重要工具。如今,合约系统里已有多种代理模式和对应的使用规则。我们之前已经概述了可升级的代理合约安全最佳实践。本文我们将介绍了另一种在开发者社区颇受青睐的代理模式,即钻石代理模式。什么是钻石代理模式/合约钻石代理合约,也被称为“钻石”,是以太坊智能合约的一种设计模式,由
delegatecall是Solidity中的一种低级函数调用方法,它允许一个合约以调用者(caller)的上下文(context)执行另一个合约的代码。这意味着被调用的合约中的msg.sender、msg.value和存储都会是调用合约的上下文。
代理模式使智能合约能够升级其逻辑,同时维持其链上地址和状态值。对代理合约的调用会通过delegateCall的方式执行来自逻辑合约的代码,以修改代理合约的状态。本文将为大家概述代理合约的类型、相关的安全事件和建议,以及使用代理合约的最佳实践。