# About Gas

By [Untitled](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339) · 2023-10-02

---

Gas优化
=====

1.  变量声明为constant immutable 使用位运算符
    
2.  函数参数声明为calldata memory
    
3.  循环使用unchecked避免溢出检查
    
4.  uint256占满32字节插槽最节省gas，变量打包（在一个插槽中放置多个变量）
    
5.  revert配合error最省gas，同时可以携带变量。require的gas随字符串长度增加
    
6.  运算中使用局部变量
    
7.  创造子合约时 clone > new > create2
    
8.  增加使用`i = i +n`，递增使用 `++i`
    
9.  重入保护中，使用Uint12 > Uint01 > Bool，0到非0转换会消耗大量gas
    
10.  "<" 和 ">"比"≤" 和 "≥"更加高效，EVM没有针对"≤" 和 "≥"的OPCODE
    
11.  通过优化函数名，增加calldata中方法id的0字节的个数来节省gas（0字节消耗 4 gas，非0字节消耗 16 gas）
    
12.  合约内所有函数是一个数组，调用时会先遍历，通过排序函数减少遍历复杂度
    
13.  短路判断，update后delete变量或恢复初始值，创建变量时不赋值（使用初始值）
    
14.  构造函数非payable，使用bytes32存字符串，使用定长数组，使用事件存储数据，mapping操作比array便宜

---

*Originally published on [Untitled](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339/about-gas)*
