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