solidity0.8.0的应用案例9:代理合约

news/2024/11/23 2:08:49/

代码由OpenZeppelin的Proxy合约简化而来。

代理模式

Solidity合约部署在链上之后,代码是不可变的(immutable)。这样既有优点,也有缺点:

  • 优点:安全,用户知道会发生什么(大部分时候)。
  • 坏处:就算合约中存在bug,也不能修改或升级,只能部署新合约。但是新合约的地址与旧的不一样,且合约的数据也需要花费大量gas进行迁移。

有没有办法在合约部署后进行修改或升级呢?答案是有的,那就是代理模式

代理模式

 

 代理模式将合约数据和逻辑分开,分别保存在不同合约中。我们拿上图中简单的代理合约为例,数据(状态变量)存储在代理合约中,而逻辑(函数)保存在另一个逻辑合约中。代理合约(Proxy)通过delegatecall,将函数调用全权委托给逻辑合约(Implementation)执行,再把最终的结果返回给调用者(Caller)。

代理模式主要有两个好处:

  1. 可升级:当我们需要升级合约的逻辑时,只需要将代理合约指向新的逻辑合约。
  2. 省gas:如果多个合约复用一套逻辑,我们只需部署一个逻辑合约,然后再部署多个只保存数据的代理合约,指向逻辑合约。

提示:对delegatecall不熟悉的朋友可以看下本教程第23讲Delegatecall。

代理合约

一个简单的代理合约,它由OpenZeppelin的Proxy合约简化而来。它有三个部分:代理合约Proxy,逻辑合约Logic,和一个调用示例Caller。它的逻辑并不复杂:

  • 首先部署逻辑合约Logic
  • 创建代理合约Proxy,状态变量implementation记录Logic合约地址。
  • Proxy合约利用回调函数fallback,将所有调用委托给Logic合约
  • 最后部署调用示例Caller合约,调用Proxy合约。
  • 注意Logic合约和Proxy合约的状态变量存储结构相同,不然delegatecall会产生意想不到的行为,有安全隐患。

http://www.ppmy.cn/news/1054296.html

相关文章

野狼测评工作室:电视机顶盒哪个牌子好?电视机顶盒排行榜

欢迎各位来到野狼测评,本期工作室的测评产品是电视机顶盒,电视机顶盒不仅可以让老电视变得智能化,也可以让配置落后的智能电视在不换新的前提下升级配置,本周我们测评了十几款热门电视机顶盒,盘点电视机顶盒排行榜&…

区块链-Web3.0-什么是Web3.0?

一、什么是Web 3.0 Web 3.0,也被称为“去中心化Web”或“智能Web”,是互联网的下一代,它使用了分布式系统技术、区块链技术和智能合约等新型技术,旨在构建一个更加去中心化、安全、透明和智能的互联网。Web 3.0 可以带来更广泛的…

微服务框架之SpringBoot面试题汇总

微服务框架之SpringBoot面试题汇总 什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂。Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。因此&…

LeetCode150道面试经典题-- 求算数平方根(简单)

1.题目 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 2.示例 …

EasyExcel+POI制作带有有效性校验及下拉联动的Excel模板

文章目录 1.背景2.实现功能的Excel特性2.1.特性介绍2.2.下拉框联动2.3.单元格自动匹配Id2.4.错误提示 3.代码实现3.1.基础流程代码3.2.名称管理器配置3.3.有效性配置3.4.函数填充3.5.其他补充 4.总结 1.背景 最近在做一个CRM系统的人员销售目标导入的相关需求,需要…

假如你是一名专业的程序员,你都知道哪些程序员是如何实现财富自由的?

我可以分享一些程序员如何实现财富自由的一般原则和方法。然而,请注意每个人的情况都不同,成功的路径可能因个人技能、市场需求、机会和运气而异。以下是一些常见的方法: 1. **创业**:很多成功的程序员选择创业,开发自…

学习ts(六)数据类型(元组、枚举、Symbol、never)与类型推论

1.元组 元组(Tuple)是固定数量的不同类型的元素的组合。是数组的变种。 元组与集合的不同之处在于,元组中的元素类型可以是不同的,而且数量固定。元组的好处在于可以把多个元素作为一个单元传递。如果一个方法需要返回多个值&…

【C++奇遇记】内存模型

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…