付费视频,请购买课程( ¥2,000.00 )后再观看
Solidity智能合约Gas优化策略
19次播放
1天前
视频 AI 总结: 视频深入探讨了Solidity智能合约的Gas优化策略。核心内容涵盖了通过优化数据结构(如可迭代链表)减少存储成本,平衡链上链下计算(如Merkle树用于白名单验证),区分部署与交易Gas优化,以及利用Multicall技术批量处理交易和读取数据,从而显著降低Gas消耗并提升用户交互体验。
关键信息:
- 数据结构优化:
- 使用可迭代链表(基于mapping)替代数组,实现添加/删除的常量Gas消耗,并支持遍历,避免数组遍历的高Gas成本。
- 避免在链上进行复杂排序,将排序逻辑放在链下计算,链上仅做验证,以减少昂贵的存储槽写入。
- 链上链下平衡:
- 利用事件(Events)替代存储变量,用于外部查询,大幅降低Gas消耗。
- 非文本数据(如图片)应存储在IPFS等链下方案。
- Merkle树:适用于处理大量数据(如白名单),仅将根哈希存储在链上,具体验证路径在链下生成并在链上验证,实现去中心化且低Gas的验证。
- Gas类型优化:
- 区分部署Gas和交易Gas,通过编译器
runs参数优化,Yul中间语言可进一步减小字节码。 - 合约字节码大小限制为24KB。
- 区分部署Gas和交易Gas,通过编译器
- Multicall:
- 写入操作:通过
delegatecall到自身,将多个交易封装为一笔,减少基础Gas消耗,提升用户体验。需注意payable函数和msg.sender在其中的潜在问题。 - 读取操作:利用Multicall3等聚合合约,将多个RPC请求合并,减少网络开销,并确保所有数据来自同一区块高度,避免数据不一致。
- 写入操作:通过
- NFT铸造优化 (Lazy Minting):
- 通过延迟写入NFT所有者信息(仅写入第一个,后续按需更新),降低批量铸造的Gas成本,但会增加转移成本,适用于不常转移的场景。