Master the Art of Solidity Gas Optimization - 掌握 Solidity Gas 优化的艺术
一个系统化的智能合约 Gas 优化课程,通过实战代码、完整测试和详细文档,从零开始学习高级 Gas 优化技术。适合所有想要提升智能合约性能和降低交易成本的开发者。
"在区块链世界,每一点 Gas 的节省都是真金白银"
- 🔧 编译器优化: 循环展开、分支优化、算术运算、方法选择器优化
- ⚡ 汇编级优化: 直接使用 EVM 指令实现极致性能
- 💾 存储优化: 变量打包、位图操作、缓存策略、瞬态存储
- 🏗️ 合约架构: 函数可见性、修饰符优化、库继承、批量调用
- 🎨 设计模式: Airdrop、ERC标准、UUPS代理、投票系统、Permit签名
- 🎲 高级技巧: CREATE2部署、地址预测、预编译合约利用
- ✅ 完整测试覆盖: 每个优化都有对应的测试用例
- 📈 Gas报告对比: 优化前后的详细Gas消耗分析
- 🔬 基准测试: 使用 Foundry 的 gas snapshot 功能
- 📚 中文文档: 详细的优化原理和实现解析
- Solidity 0.8.30: 最新编译器特性
- Foundry 框架: 快速测试和部署
- 开箱即用: 预配置的优化环境
gas_master/
├── src/
│ ├── assembly/ # 汇编优化: Address0, Balance, MathOpt, MemoryExp, AssemblyErr
│ ├── compiler/ # 编译器优化: Loop, UnRoll, Split, Uint, Not, Error, ...
│ ├── contract/ # 合约层优化: External, Hooks, Clone, Multicall, PredictAddr, ...
│ ├── patterns/ # 设计模式: AirDrops, Erc20s, MerkleLib, UUPS, Votes, ...
│ ├── storage/ # 存储优化: Pack, BitMaps, Cache, Sstore, StringShort, ...
│ ├── examples/ # 示例(如有)
│ └── unorthodox/ # 非常规/实验优化(如有)
├── test/ # 与上面各模块一一对应的测试
│ ├── compiler/ contract/ patterns/ storage/ ...
├── docs/ # 中文文档(详见 docs/README.md)
├── script/ # 脚本:Create2.s.sol 等
├── lib/ # 依赖:openzeppelin, solmate, solady, sstore3, forge-std
├── precompiles_analysis.md # 预编译合约深度分析
├── foundry.toml
└── .gas-snapshot # gas 快照
必要工具:
一键开始:
# 克隆课程仓库
git clone https://github.com/your-username/gas_master.git
cd gas_master
# 安装依赖(自动安装 OpenZeppelin, Solmate, Solady 等优质库)
forge install
# 验证环境
forge build完整课程体验:
# 构建所有合约
forge build
# 运行全部测试(查看优化效果)
forge test --gas-report
# 生成 Gas 快照(用于性能对比)
forge snapshot分模块学习:
# 编译器优化模块
forge test --match-path test/compiler/ --gas-report
# 存储优化模块
forge test --match-path test/storage/ --gas-report
# 设计模式模块
forge test --match-path test/patterns/ --gas-report
# 单个案例深入学习
forge test --match-path test/storage/Pack.t.sol -vvv# 启动本地测试链(可选)
anvil
# 在另一个终端部署合约进行实验
forge script script/Create2.s.sol --rpc-url http://localhost:8545- 📜
script/Create2.s.sol: CREATE2 部署演示脚本 - 🔍
find_abc_address.sh: 暴力搜索特定前缀地址(靓号生成) - 🎲
generate_salt.sh: 随机 salt 生成器
使用示例:
# 生成以 0x0000 开头的合约地址
./find_abc_address.sh 0000
# 生成随机 salt
./generate_salt.sh- 🎯 课程总览:
docs/README.md- 完整学习路径 - 🔧 编译器优化:
docs/compiler/- 深入编译器层面优化 - 💾 存储优化:
docs/storage/- 存储结构与Gas关系 - 🏗️ 合约设计:
docs/contract/- 架构层面的优化 - 🎨 设计模式:
docs/patterns/- 常见模式的最佳实践
- 🚀 预编译合约深度分析:
precompiles_analysis.md - 💡 实战案例集锦: 各模块的
src/目录 - 🧪 测试用例解析: 各模块的
test/目录
- 🔄 循环优化:
src/compiler/Loop.sol- for vs while vs do-while 性能对比 - 📦 变量打包:
src/storage/Pack.sol- 节省高达 40% 的存储成本 - 🎯 函数可见性:
src/compiler/Visibility.sol- public vs external 的 Gas 差异
- 🎁 空投优化:
src/patterns/AirDrops.sol- Merkle Tree vs ECDSA 签名对比 - 🔗 批量调用:
src/contract/Multicall.sol- 一次交易处理多个操作 - 🧬 合约克隆:
src/contract/Clone.sol- EIP-1167 最小代理模式
- ⚡ 内联汇编:
src/assembly/- 直接操作 EVM 指令 - 🎲 CREATE2 部署:
src/Create2Deployer.sol- 确定性地址生成 - 🔧 预编译合约:
src/compiler/Precompiles.sol- 利用以太坊内置功能
完成本课程后,你将掌握:
- ✅ 减少 20-50% 的 Gas 消耗
- ✅ 理解 Gas 计算机制
- ✅ 选择最优的数据结构和算法
- ✅ 编写高性能智能合约
- ✅ 使用内联汇编优化关键路径
- ✅ 设计Gas友好的架构
- ✅ 使用 Foundry 进行 Gas 分析
- ✅ 建立性能基准测试
- ✅ 识别和解决性能瓶颈
# foundry.toml - 已为你优化配置
solc = "0.8.30" # 最新编译器
gas_reports = ["*"] # 自动生成 Gas 报告
gas_snapshot_check = true # Gas 回归测试
optimizer = true # 编译器优化开启我们欢迎所有形式的贡献!
- 🍴 Fork 本仓库
- 🌿 创建 特性分支 (
git checkout -b feature/amazing-optimization) - 💾 提交 更改 (
git commit -m 'Add amazing optimization') - 📤 推送 分支 (
git push origin feature/amazing-optimization) - 🔄 创建 Pull Request
- 🐛 发现 Bug?请提交 Issue
- 💡 有优化建议?欢迎 Discussion
- 📚 需要帮助?查看 Wiki
-
基础阶段 (1-2周)
- 完成
compiler/模块所有案例 - 理解基本的 Gas 计算原理
- 掌握 Foundry 测试框架
- 完成
-
进阶阶段 (2-3周)
- 深入
storage/和contract/模块 - 学习内联汇编基础
- 实践常见设计模式优化
- 深入
-
专家阶段 (4-6周)
- 挑战
assembly/模块 - 研究预编译合约应用
- 设计自己的优化方案
- 挑战
- 🔬 先测试,后优化: 始终以数据为准
- 📊 建立基准: 记录优化前后的 Gas 消耗
- 🎯 聚焦热点: 优化最频繁调用的函数
- 🤝 实践分享: 在社区分享你的优化发现
- 📘 Foundry Book - 完整开发指南
- 📗 Solidity Documentation - 官方文档
- 📙 EVM Codes - EVM 指令参考
- 📕 Gas Optimization Guide - 社区优化指南
- 🎬 "Solidity Gas Optimization Techniques" - 配套视频课程(即将推出)
- 🎬 "Advanced Assembly Programming" - 汇编编程深度解析
本项目采用 MIT License 开源协议。
💡 "优化不是猜测的艺术,而是测量的科学"
在每次优化前后,务必通过测试和 Gas 报告验证实际效果
🌟 Star 本项目 | 🔄 Fork 开始学习 | 📢 分享给朋友