执行依赖 - 分片

本文分析了以太坊区块内交易的依赖关系,发现大部分区块具有高度并行性,平均60-80%的交易是完全独立的,但也有少量区块存在严重的依赖关系和较长的关键路径,限制了并行性。MEV搜索者在区块顶部的竞争加剧了这种依赖性。研究还发现,本地构建的区块通常比MEV-Boost构建的区块依赖性更少。

执行依赖

感谢 Julian, IgnacioBen 的反馈和审查。

TL;DR: 大多数以太坊区块都是高度可并行化的。平均而言,60-80% 的交易完全独立,并且依赖链很浅。然而,少数区块具有高度的纠缠和长的关键路径,限制了并行性——尤其是在区块顶部 (ToB) 附近,MEV 搜索者在那里竞争排序。

dependency.pics 上探索一些交易依赖关系图。


交易依赖关系图

对于以下内容,目标是量化区块内交易彼此之间的依赖程度,从而指导我们理解区块的可并行化程度。

该数据集包括从 22,195,599 到 22,236,441 的区块。它特别关注与存储相关的依赖关系,而其他潜在的依赖关系来源(例如账户余额)被有意排除。

对于每个区块 B,我们定义一个有向图:

G_B = (V_B, E_B)

其中:

  • 顶点

V_B = \{ t_1, t_2, \dots, t_n \} 代表 B 中的交易,按其交易索引排序。

对于任何 i < j 的 t_i, t_j \in V_B,包含一条有向边

(t_i, t_j) \in E_B

如果交易 t_i 写入一个存储槽,而交易 t_j 稍后访问该存储槽(通过 SLOAD 或 SSTORE)。

这个图 G_B 编码了由依赖关系强加的执行顺序。有向边确保如果 (t_i, t_j) \in E_B,则 t_i 必须在 t_j 之前执行。因此,G_B 的结构揭示了并行执行的潜力——不相交子图中的交易可以并发执行。

hrhrhtrherte (2)\ hrhrhtrherte (2)540×340 53.3 KB

在图中,弱连接组件捕获了顺序依赖链——例如,tx A 依赖于 tx B,而 tx B 又依赖于 $C$——以及收敛的瓶颈依赖,其中多个节点(如 tx A 和 tx B)依赖于单个节点(例如,tx C)。

下面显示了一个代表性的单个区块依赖关系图示例:

Screenshot from 2025-04-05 12-30-09\ Screenshot from 2025-04-05 12-30-09985×551 70.5 KB

在这个区块中,我们观察到大多数交易是孤立的,表明依赖性最小。但是,我们也注意到一些连接的交易形成较大的弱连接组件。

现在,缩小范围以查看多个区块的趋势,我们专注于以下指标:

  • 关键路径长度:区块中最长的依赖交易链。较短的路径表明更多可并行化的工作。
  • 每个区块的平均依赖数:跨区块的平均依赖边数,反映了通常存在的交易间协调的程度。
  • 每个节点的平均度数:每个交易的平均依赖数,表明交易的纠缠程度。较高的值意味着更紧密的耦合。
  • 孤立节点百分比:没有依赖关系的交易份额。高百分比表示广泛的并行执行潜力。
  • 巨型组件比率:最大弱连接组件中节点的比例。接近 1 的值表示大多数交易是相互连接的;较低的值表示碎片化。
  • 工作/跨度比率:总交易数除以关键路径长度。这提供了理论并行加速的上限——比率越高,并发的潜力越大。

histograms (3)\ histograms (3)1000×800 46.8 KB

直方图显示,大多数区块具有短的依赖路径,超过长度 10 后急剧下降,表明罕见的深度顺序链。每个区块的平均依赖数很低,通常低于 100,并且每个节点的平均度数集中在 0.3 左右,表明交易仅略微互连很大一部分交易——在 60% 到 80% 之间——完全孤立,这使它们成为并行执行的理想选择。巨型组件比率在各个区块中保持较低水平,表明具有许多小组件的碎片化图。最后,工作/跨度比率通常超过 10,突出了并行性的巨大空间

虽然平均情况的见解很有帮助,但解决最坏情况对于可扩展性至关重要。具有较长依赖链、高度纠缠或低隔离度的异常区块可能会显着影响吞吐量。

关于这一点,我们在以下内容中看到了上述所有指标的最坏情况示例。每个图代表单个以太坊主网区块的依赖关系图。交易表示为节点依赖关系表示为有向

graph_grid (2)\ graph_grid (2)2400×2100 576 KB

虽然大多数区块都可以很好地并行化,但我们观察到具有长依赖序列的区块,这些区块不能简单地并行化。

自己尝试一下这些图:dependency.pics

最依赖的交易通常位于区块顶部(ToB),这个区域对 MEV 搜索者和构建者特别有吸引力。

histogram_tx_index (1)\ histogram_tx_index (1)1000×300 13.7 KB

此外,我们观察到本地构建者和 MEV-Boost 构建者之间存在显着差异,前者通常构建具有较少依赖关系的区块。平均而言,本地构建的区块大约有 ~14 笔交易 依赖于区块中的先前交易。对于 MEV-Boost 构建者,平均每个区块大约有 ~40 笔交易

result_df (5)\ result_df (5)6477×1260 397 KB

当然,随着时间的推移,本地构建者的区块越来越小的总体趋势(更多信息 here)也起到了作用。

最后,当查看最常访问的合约和存储槽组合时,我们看到顶部位置中有几个著名的项目,包括稳定币、WETH、Uniswap 和 MetaMask。与 之前分析的发现 一致,我们再次将合约 0x399... 识别为最常读取的合约(SLOAD 的数量最多)。有关此行为的更多详细信息和解释,请参阅链接的分析。像 WETH、USDC 或 USDT 这样的合约中的特定存储槽几乎在每个区块中都会经历读取和写入。

avg_slot_usage (3)\ avg_slot_usage (3)1000×500 38.2 KB

延伸阅读

  • 原文链接: ethresear.ch/t/execution...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
以太坊中文
以太坊中文
以太坊中文, 用中文传播以太坊的最新进展