/GasOptimization

EVM燃气优化, EVM, Gas, GasOptimization

Primary LanguageSolidity

Gas optimization

这是一个关于EVM Gas优化的项目

当我们用Google或者时下流行的AI工具中搜索‘如何优化智能合约燃气消耗’这样的关键字时,通常得到的结果排在前面的是【Top N Solidity Gas Optimization Techniques】这样文章,并会给出以下建议:

  1. Use Mappings Instead of Arrays 尽量用MAP而不是数组;
  2. Enable the Solidity Compiler Optimizer 开启编译优化设置;
  3. Minimize On-Chain Data 尽量减少在链上存储数据;
  4. Pack Your Variables,利用合并存储变量值机制;
  5. Cache read variables in memory,在内存中缓存读变量;
  6. Store Data in calldata Instead of memory,参数使用calldata而非memery;
  7. Free Up Unused Storage,释放不再使用的存储槽空间;
  8. Use immutable and constant,使用常量值;
  9. Use the external Visibility Modifier,使用external方法可见;
  10. Use revert instead of require,使用 revert 代替 require;

这些建议确实很有帮助,不过不够完善,有的方法随着编译器的升级已经过时,有的文章的一些方法只在部分情况有用,可能会误导读者,重要的是只有在了解EVM基础的知识之后才能在燃气优化上达到好的水平。

合约开发是Web3开发中比较重点的部分,随着技术的发展,现在可以在网络上找到丰富的学习资料,许多的文档、视频和书籍,但大部分的内容是关于Solidity语法和合约安全相关,对于如何节省燃气消耗,目前还没遇到让人兴奋的学习资料。智能合约燃气优化曾是我工作内容的重要的部分(确实过程中很多让人迷茫的问题)。之前一直忙着工作,没有写点什么,现在趁着有些时间,我尝试着去更深入的学习相关知识,同时分享给大家,希望这个项目对大家有所帮助。

想要掌握燃气优化,首先需要EVM的结构基础以及合约方法在链上执行过程,然后是要掌握在Solidity语言层面不同写法带来的燃气消耗的差异,最后想要极致的燃气优化,需要借助合约编译优化配置以及内联汇编带来的强大能力。所以我把整个项目的内容分为三个部分,第一部分是EVM基础结构以及合约执行相关的基础知识,第二部分是一些语言语法层面的小技巧,第三部分是深入了解编译优化设置和内联汇编的知识。

内容列表

Part1: EVM基础结构以及合约执行相关基础知识

这一部分我们关注基础知识,配合一些简单用例来理解基础知识,并不会太多的去讨论燃气优化方法

  1. EVM相关基础知识
  2. 一个计数合约,来解释合约执行的流程和燃气消耗
  3. Calldata及优化方法
  4. 存储使用及存储合并
  5. 存储读写的燃气消耗
  6. 内存的燃气计算
  7. 日志event收费
  8. 调用合约
  9. 合约部署及编译优化设置

Part2: 语言语法层面的小技巧

这一部分我们关注语法在操作码上具体的不同导致收费的不同,而不是简单告诉大家哪个写法更好

Part3: 基于编译优化设置和内联汇编的进阶

当我开始写这个项目的时候,我自认为是自己以及掌握了大部分燃气优化的知识,但当我真的深入到细节的时候才发现自己之前的诸多遗漏,然后就进入了一个个通宵的不眠夜。

很庆幸,现在第一部分基础篇已经基本完成~

推荐

博客

  • 强烈推荐 noxx的EVM Deep Dives系列文章,
  • 这个博主主要在18年高频产出,而且质量很高 programtheblockchain

文章

网站

视频

项目