采用无条件支付的mempool分片

本文提出了一种基于Blob基础费用机制的以太坊mempool垂直分片策略,旨在防御通过提交不可用Blob数据进行的DoS攻击。

9个月前更新
9个月前更新

问题描述

下面我们将讨论一种可能的策略,利用 Blob 基础费用机制来抑制 DoS 攻击,从而实现内存池分片。正如前面所讨论的,当 Blob 数据被发布到内存池但支付费用时(例如,由于 Blob 不可用),就可能发生此类攻击。

更具体地说,这里的内存池分片被理解为一种机制,允许我们将 Blob 数据分解成小块(cells),然后通过这些小块在内存池中传播。这与当前 Blob 数据整体传播的情况形成对比。

虽然“水平分片”的方案在一定程度上已经解决了数据吞吐量最大化的问题,但探索“垂直分片”也有明显的动机。水平分片可以理解为对内存池本身进行分片,而垂直分片可以理解为对 Blob 进行分片(从而也分片了内存池)。鉴于目前共识层上的 Blob 是以这种垂直方式分片的,我们认为在執行層上也复制这种分片方式是有意义的。

机制概述

我们考虑的机制基于一个非常简单的想法。不是仅在 Blob 被包含在区块中时才收取 Blob 基础费用,而是使支付无条件。也就是说,一旦 Blob 被提交到内存池,无论它是否实际被包含在区块中,都会收取基础费用。

这里的逻辑是,如果以这种无条件的方式收取基础费用,那么依靠用 Blob 充斥内存池(不产生任何费用)的 DoS 攻击将付出代价(理解为惩罚),而在所有参与方诚实行为的情况下,Blob 发送者不会承担额外成本。

稍加思考就会发现,引入这种无条件支付可能会引入一种潜在攻击,对 Blob 发送者产生直接的财务影响。特别是,如果我们天真地使 Blob 基础费用变为无条件,一个不诚实的区块提议者可以收取 Blob 的费用而不包含它。今天对 Blob 发送者的审查攻击,会因额外的财务损失而变得更加严重。

在接下来的章节中,我们将讨论解决这个问题的不同机制。

简单修复:存款加最终支付

由于刚刚讨论的攻击从根本上源于区块提议者和 Blob 发送者之间可能不一致的激励,解决这个问题的简单方法是重新调整它们。

具体来说,我们可以将 Blob 基础费用分为:

  • 无条件存款。
  • 有条件最终支付,区块提议者从中获得一部分作为奖励。

具体细节,即存款百分比和提议者奖励百分比,需要更详细地考虑(例如,它们可以是静态的、动态的,Blob 发送者可以选择提议者奖励百分比等)。尽管如此,通过适当选择的参数,很可能找到一个良好的折中点,使得两种攻击(用不可用的 Blob 充斥内存池和带有财务成本的审查攻击)对攻击者来说都具有足够高的财务成本,从而失去吸引力。

委员会:带有附加利益的修复

Diagram.001

正如我们所见,区块提议者的潜在攻击基本上归结为一种带有额外财务成本的审查攻击。因此,使用已有的机制来应对这一点是有意义的。特别是,我们可以引入两个委员会,它们应该从 FOCIL 和 ePBS 中为人所熟知:

  • 插槽 \(N\) 的包含委员会 (IC),该委员会编制一份 Blob 列表,供下一个区块提议者考虑
  • 插槽 \(N\) 的可用性委员会 (AC),该委员会检查 IC 列出的 Blob 的可用性。

注意: 所谓考虑一个 Blob,我们指的是收取(存款)基础费用的过程。考虑一个 Blob 不一定要将其包含在区块中,而仅仅意味着不完全忽略它。

同样,关于这些委员会的规模及其内部运作(或者是否使用来自 FOCIL/ePBS 的相应委员会)的细节将在后面讨论。

目前,我们将 IC 视为输出一个列表 \(L_{global}^N\) 的过程,将 AC 视为输出一个位串 \(x^N \in \{0,1\}^{|L_{global}^N|}\) 的过程,其中 \(x_i^N\) 的值表示 \(L_{global}^N\) 的第 \(i\) 个元素是否可用。

注意: 我们显然不希望 \(L_{global}^N\) 实际上是一个 Blob 列表。相反,它应该是一个包含轻量级指针(指向要采样的 Blob)的列表。

对于插槽 \(N\),IC、AC 和 Blob 提议者之间的交互如预期所示。Blob 提议者收到 \((L_{global}^N, x^N)\) 对,默认情况下会考虑 \(L_{global}^N\) 中至少 \(1-\epsilon\) 比例的 Blob \(B_i\),如果 \(x_i^N=1\),则将其包含。此外,插槽 \(N\) 的证明者将对 \(L_{global}^N\) 中的所有 Blob \(B_i\) 执行 DAS,并且只有当区块考虑了 \(L_{global}^N\) 中至少 \(1-\epsilon\) 比例的 Blob,并且证明者对可用性的本地视图一致时,才会投票支持该区块。

这样做的效果是:

  • 强制区块提议者考虑某个特定的(子)Blob 集合。这提供了抗审查性。
  • 向提议者发出(不)可用性信号。这向提议者提供了关于(不)可用性的保证,使她不必下载 \(L_{global}^N\) 中的所有 \(B_i\)。
  • 通过将区块接受条件与证明者和提议者对可用性的观点对齐,强制区块提议者诚实行为。这应对了上述带有额外财务成本的审查攻击问题。

此外,我们想强调,列表 \(L_{global}^N\) 起到了为插槽 \(N\) 定义“有效内存池”的作用。当提交到内存池的 Blob 数量超过带宽限制所支持的数量时,这一点尤为重要。这允许将 DAS 所需的大部分数据传播移到关键路径之外。事实上,它甚至可以完全解耦,并与共识层异步进行。具体来说,插槽 \(N\) 的 IC 和 AC 可以在插槽 \(N-1\) 期间执行其操作,但事实上它们甚至可以在插槽 \(N-k\) 期间执行。将数据传播放在关键路径之外显然有多个优点。一方面,它允许更高的吞吐量,而不会遇到诸如“免费期权问题”之类的问题。另一方面,如果大部分 Blob 数据在关键路径外传播,则有可能仍然在关键路径中传播少量对同步性可能至关重要的 Blob(就像今天一样),从而有效开辟不同类型 Blob 的潜力。最后这一点高度推测,因此我暂且不提。

技术实现

这里我们将更深入地探讨上述提议机制的实现方式。特别是,我们必须澄清以下内容的实现:

  • 无条件支付机制。
  • IC 和 AC 的内部运作。

这可以通过将 Blob 传播分成两部分来实现。当提交一个 Blob 时,发送者首先发送 Blob 交易头 \(\mathrm{tx_{h_i}}\)(包括 gas 信息、nonce、from、blob 版本化哈希等)。这通过验证(即最大费用 > blob 基础费用)在网络中传播。

在某个预定时间 \(t_0\),IC 输出并传播 \(L_{global}^N\),其中 \(L_{global}^N\) 可以是交易头哈希 \(H(\mathrm{tx_{h_i}})\) 的列表。如果发送者的 Blob 被包含在 \(L_{global}^N\) 中,则 DAS 开始,Blob 发送者必须使 Blob 数据可用(我们未指定具体如何做,因为这完全灵活,并且可以适用于我们设想的任何 DAS 设计)。

在适当选择的 \(\Delta t\) 时间后,AC 输出并传播其结果字符串 \(x_N\)。

在插槽 \(N\) 中,对于 \(L_{global}^N\) 中的所有 Blob,区块提议者包含:

  • 如果 AC 认为可用,则包含完整的 Blob 交易。
  • 如果 AC 认为不可用,则仅包含 Blob 基础费用交易。

值得考虑的一种可能性是:允许一个在插槽 \(N\) 中已经支付了 Blob 基础费用但因数据不可用而未被包含的 Blob,在插槽 \(N+1\) 中变为可用并被包含,而无需重复收费。

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

0 条评论

请先 登录 后评论
5cby1hKFSPuIt8GPPKnGcQ
5cby1hKFSPuIt8GPPKnGcQ
江湖只有他的大名,没有他的介绍。