EthPandaOps 团队发布了 Xatu 数据集,其中包含完整的 EVM 执行跟踪数据,包括每个操作码的 gas 消耗、调用框架层次结构和预聚合分析。他们还构建了 Gas Profiler 和 Gas Repricing Simulator 两个工具,用于检查操作码级别的 gas 消耗,并模拟 gas 重新定价方案。

以太坊交易会触发一系列 EVM 操作码,每个操作码根据协议的 gas 计划消耗 gas。如果你想大规模地理解这种执行过程,跨越所有交易和区块,你需要一个归档节点和大量的耐心。
我们已经为你完成了这项工作。Xatu 数据集 现在包括完整的 EVM 执行跟踪数据:每个操作码的 gas 消耗,调用帧层次结构,以及跨越 9 个新表的预聚合分析。数据从区块 24,120,000 开始,并持续更新到 HEAD。
在此数据之上,我们在 The Lab 中构建了两个工具:
原始数据来自 debug_traceTransaction structlogs:逐步的 EVM 执行跟踪,记录每个操作码、其 gas 成本、堆栈深度和错误状态。我们针对每个最终确定的交易运行此操作,并将结果聚合到 canonical_execution_transaction_structlog_agg 中,该表存储每个帧、每个操作码的摘要。
从那里,CBT
通过几个层转换这些原始 structlog 数据:
canonical_execution_transaction_structlog_agg
int_transaction_call_frame
int_transaction_call_frame_opcode_gas
int_transaction_opcode_gas
int_block_opcode_gas
fct_opcode_gas_by_opcode
每日 / 每小时
fct_opcode_ops
每日 / 每小时
每一层都建立在前一层的基础上。中间表 (int_) 馈送到事实表 (fct_) 中,这些表为 The Lab 中的时间序列视图提供支持。所有这些都可以在 Xatu 数据集 中直接查询。
| 表 | 描述 |
|---|---|
| int_transaction_call_frame | 每个交易的调用树结构。每一行是一个调用帧,包含自身 gas、累积 gas、固有 gas、退款、调用类型、目标地址和函数选择器。 |
| int_transaction_call_frame_opcode_gas | 每个帧的操作码分解。特定调用帧执行了哪些操作码,以及每个操作码消耗了多少 gas。 |
| int_transaction_opcode_gas | 交易级别的操作码聚合。一个交易中所有帧的操作码总数和 gas。 |
| int_block_opcode_gas | 区块级别的操作码聚合。每一行是一个操作码在单个区块内的使用情况:计数、gas 和错误计数。 |
| fct_opcode_gas_by_opcode_daily | 按操作码排序的每日 gas 消耗。包括每次执行的平均 gas、区块计数和错误率。 |
| fct_opcode_gas_by_opcode_hourly | 上述的每小时版本,用于更细粒度的分析。 |
| fct_opcode_ops_daily | 每日 EVM 吞吐量:ops/sec,带有 p5/p50/p95 百分位数、布林带和 7 天移动平均线。 |
| fct_opcode_ops_hourly | 每小时版本,带有 6 小时移动平均线。 |
EVM 执行跟踪数据从区块 24,120,000 到 HEAD 可用。我们也在回填更早的区块。考虑到历史数据的量,这需要一段时间,但我们会随着覆盖范围的扩大而更新。
中间表和事实表会增量更新,因此新区块会在最终确定后不久显示。
Gas 分析器 允许你在三个级别探索 gas 数据:网络、区块 和 交易。
在网络级别,你可以跟踪每秒的操作码操作随时间的统计频带,查看按操作码类别分解的 gas 消耗。
深入到一个区块,查看每个交易的 gas 分解和操作码热图。更深入地进入一个交易,检查完整的调用树和操作码级别的 gas 分布,一直到嵌套的 DELEGATECALL 中的特定 SSTORE。

Gas 重新定价模拟器 使用修改后的 gas 计划重新执行区块,使用你的自定义成本运行实际的 EVM。选择一个区块(或最多 50 个的范围),覆盖操作码成本和动态 gas 参数(存储访问、调用成本、内存扩展、日志记录、哈希等)的任何组合,并查看发生了什么变化。
模拟器会告诉你哪些交易会使用更多或更少的 gas,哪些会超过区块 gas 限制,哪些会在成功和失败之间切换。它运行真正的 EVM 执行,因此检查 gasleft() 的合约可能会在修改后的成本下采用不同的代码路径。模拟器会将这些标记为不同的交易。
假设你想知道如果 SLOAD_COLD 从 2100 变为 3000 会发生什么。与其抽象地推理它,不如针对最近的区块运行它,看看哪些交易会中断。

所有 9 个表都已在 Xatu 数据集 中上线。Gas 分析器 和 Gas 重新定价模拟器 都在 The Lab 中。
如果你对基于此数据构建的内容有任何问题或想法,请在 Twitter 或 Xatu Telegram 群组 中找到我们。
爱你们,
EthPandaOps 团队
- 原文链接: ethpandaops.io/posts/evm...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!