本文介绍了以太坊智能合约Gas评估与测量的必要性,提出了使用Foundry的Gas Report、Gas Snapshots以及gasleft()在合约内部进行测量这三种常用的Gas评估方法,可以帮助开发者识别优化点、验证优化效果以及防止性能退化。同时,还提供了详细的使用示例和注意事项,以便开发者能够更好地掌握这些工具并将其应用到实际开发中。
《Solidity开发教程》是一个系统深入介绍Solidity开发的教程。
本文总结了以太坊智能合约中使用汇编进行优化的几个关键技巧,包括使用汇编回滚并附带错误消息、通过接口调用函数时重用内存数据、优化常见数学运算、使用 SUB/XOR 替代 ISZERO(EQ()) 检查不等式、利用汇编进行地址零检查、高效利用 selfbalance()、处理小数据(哈希和事件)以及在多次外部调用和合约创建时重用内存空间等。通过这些技巧,开发者可以显著降低 Gas 消耗,提升智能...
本文总结了Solidity编译器Gas优化的20个技巧,包括使用严格不等式、拆分require和revert语句、使用命名返回、反转if-else语句、使用++i递增、无溢出数学运算、优化for循环、使用do-while循环、避免不必要的变量转换、短路布尔运算、避免公开变量、优化器参数选择、优化函数名称、位移代替乘除法、缓存calldata、无分支算法、内联内部函数、哈希比较数组和字符串、使...
本文介绍了以太坊中calldata的优化策略,包括使用虚荣地址、避免在calldata中使用有符号整数,以及calldata比内存更便宜的特性。同时,讨论了2024年Cancun升级后,EIP-4844 使用 Blob 交易后,L2 网络calldata 优化重要性降低的情况。
本文总结了以太坊智能合约开发中常用的Gas优化技巧,包括避免从零到一的存储写入、缓存存储变量、打包相关变量及结构体、保持字符串长度小于32字节、使用不可变或常量、利用瞬时存储、使用映射代替数组避免长度检查、使用unsafeAccess避免冗余检查、使用位图代替布尔值、使用SSTORE2或SSTORE3存储大量数据、使用存储指针而非内存、避免ERC20代币余额归零、倒序计数以及选择合适大小的u...
本文总结了10个以太坊智能合约Gas优化的设计模式和技巧,包括使用multidelegatecall批量处理交易,利用ECDSA签名替代默克尔树,使用ERC20Permit合并授权和转账,以及使用状态通道等。同时推荐了更高效的Solidity库Solady, 通过汇编进行极致优化,在ERC20 Transfer、ERC721 Mint等方面,能节省19% - 40% Gas。
本文总结了优化以太坊智能合约跨合约调用,减少 Gas 消耗的六个实用技巧。包括使用转账钩子处理代币,使用 fallback 或 receive 处理以太币转移, 使用 ERC2930 访问列表预热存储槽,缓存外部合约调用结果,在路由器合约中实现 multicall,以及通过单体架构避免跨合约调用。
本文介绍了一些在以太坊智能合约开发中用于 Gas 优化的非常规设计模式。这些技巧包括利用 gasprice() 或 msg.value 传递信息、操纵环境变量、使用 gasleft() 进行分支决策、不检查 send() 的成功与否、将所有函数设为可支付函数、外部库跳转以及在合约末尾添加字节码等。虽然这些方法可能在 Gas 优化竞赛中有所帮助,但在生产环境中使用时应极其谨慎。
本文总结了以太坊智能合约开发中,由于Solidity编译器升级、EVM升级(特别是Cancun升级)以及生态系统变化而不再有效或重要性大幅降低的优化技巧。例如,external不再比public节省gas,跨交易使用 SELFDESTRUCT 清理存储已失效,L2上极致优化calldata中的零字节重要性降低,过度依赖SSTORE2存储临时数据也被临时存储所取代。开发者应保持更新...
external
public
SELFDESTRUCT