gas优化之自定义错误

  • iszzm123
  • 发布于 7 小时前
  • 阅读 18

Solidity0.8.4引入的自定义错误(customerror)是require("message")的高效替代品。它不仅在部署时节省大量字节码,还在交易失败(revert)时显著降低返回数据带来的gas开销。

Solidity 0.8.4 引入的自定义错误(custom error) 是 require("message") 的高效替代品。它不仅在部署时节省大量字节码,还在交易失败(revert)时显著降低返回数据带来的 gas 开销。

// require string 会存储字符串,很贵
require(msg.sender == owner, "Not owner") 
//0x08c379a0                                                         // Error(string) 选择器 (4 bytes)
//0000000000000000000000000000000000000000000000000000000000000020 // 字符串偏移 (32 bytes)
//0000000000000000000000000000000000000000000000000000000000000009 // 字符串长度 (32 bytes)
//4e6f74206f776e65720000000000000000000000000000000000000000000000 // "Not owner" 补齐到 32 字节
//总长度 = 4 + 32 + 32 + 32 = 100 字节(实际更可能是 4 + 32 + 32 + 32 = 100,因为字符串补零)。

// 自定义错误,不存储字符串
error NotOwner(address caller);
if (msg.sender != owner) revert NotOwner(msg.sender);
//0x9c2eb2d2                                                         // NotOwner() 选择器 (4 bytes)
//0000000000000000000000001234567890123456789012345678901234567890 // 参数 (32 bytes)
//总长度 36 字节(无参数时为 4 字节)。对比 require 的 100 字节起步,体积缩减超过 60%,且参数越多节省越夸张。
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
iszzm123
iszzm123
最近有应聘的意向