1. 为什么先学成本模型
Gas 优化不是“背技巧”,而是先知道成本主要来自哪里:
- 存储读写(
SLOAD/SSTORE) - 外部调用(
CALL) - 日志写入(
LOG) - 内存扩展与复杂计算
核心结论:写存储通常比算术更贵。
2. 性能度量三件套
2.1 Gas 报告
forge test --gas-report
用于查看每个函数的大致 gas 区间。
2.2 Snapshot 基线
forge snapshot
把当前性能保存成基线,后续 PR 做差异比较。
2.3 版本固定
[profile.default]
solc_version = "0.8.34"
evm_version = "prague"
optimizer = true
optimizer_runs = 200
性能评估一定要固定编译参数,否则数据不可比。
3. 测量方法论
建议流程:
- 定义目标函数(如
swap/deposit) - 固定输入规模(小/中/大)
- 记录基线
- 优化一项后再次测量
- 保留回归测试,避免“省 gas 但改坏语义”
4. 常见误区
- 只看单次测试,不做长期基线
- 优化前后输入条件不一致
- 忽略编译器版本与 EVM 目标差异
- 为省极小 gas 牺牲可读性和审计性
5. 参考链接
- Solidity Releases: https://soliditylang.org/blog/category/releases/