提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- [7. Gas 机制与优化](#7. Gas 机制与优化)
-
- [7.1 Gas 基础原理](#7.1 Gas 基础原理)
-
- [7.1.1 为什么需要 Gas?](#7.1.1 为什么需要 Gas?)
- [7.1.2 Gas 计算规则](#7.1.2 Gas 计算规则)
- [7.2 EIP-1559 详解](#7.2 EIP-1559 详解)
-
- [7.2.1 动态 BaseFee 机制](#7.2.1 动态 BaseFee 机制)
- [7.2.2 Priority Fee(小费)策略](#7.2.2 Priority Fee(小费)策略)
- [7.3 Gas 优化技巧](#7.3 Gas 优化技巧)
-
- [7.3.1 存储优化技巧](#7.3.1 存储优化技巧)
- [7.3.2 循环优化](#7.3.2 循环优化)
- [7.3.3 短路求值](#7.3.3 短路求值)
- [7.3.4 事件 vs 存储](#7.3.4 事件 vs 存储)
- [7.3.5 使用 calldata 替代 memory](#7.3.5 使用 calldata 替代 memory)
- [7.4 Gas 优化工具](#7.4 Gas 优化工具)
-
- [7.4.1 Gas Reporter](#7.4.1 Gas Reporter)
- [7.4.2 Solidity Optimizer](#7.4.2 Solidity Optimizer)
- [7.4.3 Gas Profiler](#7.4.3 Gas Profiler)
- [7.5 实际案例: Uniswap V3 的 Gas 优化](#7.5 实际案例: Uniswap V3 的 Gas 优化)
7. Gas 机制与优化
7.1 Gas 基础原理
7.1.1 为什么需要 Gas?

场景对比:

7.1.2 Gas 计算规则
操作码(Opcode) 的 Gas 成本:

存储操作是最昂贵的:

7.2 EIP-1559 详解
7.2.1 动态 BaseFee 机制

BaseFee 计算公式:


历史 BaseFee 趋势:

7.2.2 Priority Fee(小费)策略


7.3 Gas 优化技巧
7.3.1 存储优化技巧
1: 打包存储变量

技巧 2: 使用 immutable 和 constant

技巧 3: 批量操作

7.3.2 循环优化


7.3.3 短路求值

7.3.4 事件 vs 存储

7.3.5 使用 calldata 替代 memory

7.4 Gas 优化工具
7.4.1 Gas Reporter

输出示例:

7.4.2 Solidity Optimizer

7.4.3 Gas Profiler

7.5 实际案例: Uniswap V3 的 Gas 优化
Uniswap V3 采用了多种 Gas 优化技术:

