本文提出了一种名为 SubnetDAS 的中间数据可用性抽样(DAS)方案,旨在弥合 EIP-4844 和完整 Danksharding 之间的差距。该方案为每个样本设立一个子网,节点通过连接到相应子网来获取样本,从而在不影响网络活跃度和增加节点要求的前提下,实现更高的扩展性。同时,该方案牺牲了查询的不可链接性,但并不影响整个链的可用性保证和Rollup的安全性。
作者: Francesco 和 Ansgar。感谢 Mark Simkin 在安全分析方面的讨论和帮助,以及 EF 研究团队的各位成员提供的反馈。
这是一种基于子网的 DAS 提案,旨在弥合 EIP-4844 和完整 Danksharding 之间的差距,就像 peerDAS 一样。我们提出了一种 DAS 构造,其中每个样本都有一个子网,节点通过连接到这些子网来获取它们的样本。我们认为,与 EIP-4844 相比,它可以在不危及整个网络的活跃性或增加节点要求的情况下,提供更大的规模。
为此,我们确实牺牲了一些东西,即查询的不可链接性,或者更确切地说,是在此 DAS 框架内稍后解决此问题的可能性。要检索样本,节点必须加入相应的子网,并且在尝试这样做时,它会暴露其查询。这使得攻击者只能发布这些样本,从而说服它相信数据是可用的,而实际上并非如此。查询的链接性是所有 DAS 构造都面临的问题,但特别难以看出如何在基于子网的构造中解决它。它不会影响整个链的可用性保证,因此也不会影响 Rollup 的安全性,但它确实削弱了完整节点针对双重支出的安全性。我们将在稍后详细讨论这个问题,并认为这种削弱并不像看起来那么严重,并且对于中间 DAS 解决方案来说,这可能是一个明智的权衡。
我们认为子网是中间解决方案的主要网络结构的合理候选者,原因如下:
未来兼容性:我们认为子网基础设施即使在 DAS 的未来迭代中也会被使用,因此这种努力是可重用的:
无论 DAS 的最终网络构造是什么,完整 Danksharding 的网络结构可能都将涉及子网,其中 Danksharding 正方形的行和列被分发,并且至少验证者会加入这些子网以下载分配给他们保管的行和列(peerDAS 中也假设了这一点)
即使在以后的迭代中,对于验证者的分叉选择,使用某种形式的 subnetDAS 可能仍然有意义,这不需要使用完整节点在其分叉选择中使用的相同 DAS 构造来跟踪链并确认交易(有关详细信息,请参见此处)。当用于此目的时,subnetDAS 的弱点是可以接受的或无关紧要的:
查询的链接性无关紧要,因为对于验证者的分叉选择,我们只关心全局可用性保证,而不是单个可用性保证(不必担心双重支出保护,因为这不用于确认交易)。
可以预期验证者比完整节点具有更高的带宽要求,因此即使对于长期而言,为验证者保持与 4844 相似的带宽要求可能也是可以的。
即使在以后的迭代中,也可以选择使用 subnetDAS 作为分叉选择过滤器,同时仅作为确认规则的一部分使用一些额外的采样(同样,有关详细信息,请参见 此处)。例如,完整节点可以仅使用 subnetDAS 进行分叉选择来跟踪链(验证者参与共识),同时仅进行一些对等采样来确认交易。对等采样的活跃性失败只会影响完整节点确认交易的能力,而不会影响 p2p 网络、共识和超级完整节点的交易确认。这种额外的采样甚至可以是可选的,让完整节点在确认安全性和活跃性之间选择自己的权衡。与前一点一样,由于作为确认规则的一部分进行的额外采样,查询的链接性将无关紧要。
参数 | 值 | 描述 |
---|---|---|
b | 128 | Blob 的数量 |
m | 2048 | 列子网的数量 = 样本的数量 |
k | 16 | 每个Slot的样本 = 每个节点的列子网 |
r | 1 | 每个验证者的行子网 |
Blob 大小为 128 KiB,与 EIP-4844 相同,未扩展数据的总吞吐量为每个Slot 16 MiB。
使用示例参数,每个列子网拥有 k/m = 1/128 的所有完整节点,并且每个行子网拥有 r/n = 1/128 的所有验证者
Blob 在行子网中分发,样本在列子网中分发,同时进行。
完整节点通过连接到相应的子网来查询每个Slot的 k 个样本。这只是对 1D 扩展进行采样,但样本是“长的”(列而不是点)。
使用示例参数,总共为 16^2 = 256 KiB,甚至低于 EIP-4844(对于验证者,还需要从行子网下载 r=1 扩展 Blob 的额外负载,额外增加 256 KiB)。
保留期内的数据可检索性提出了与此处类似的问题。为了解决这些问题,子网的轮换可以错开,并在数据保留期的时间范围内进行。在 subnetDAS 中这样做所产生的影响与在 peerDAS 中所产生的影响截然不同,因为子网的选择就是样本的选择,因此不每Slot轮换子网的选择意味着始终对相同的索引进行采样。
为了解决这个问题,我们可以让节点连接到 2k 个子网,其中 k 个是稳定的,k 个是每Slot轮换的。连接到前者纯粹是为了帮助提高子网密度和数据可检索性,而后者实际上用于采样。尽管如此,subnetDAS 无论如何都特别容易受到查询的链接性的影响,因此即使在这种情况下,稳定的子网选择也可能是有意义的。
本地重建可以在行子网中进行。如果行子网中缺少某些数据,但列子网中存在,则同时位于两个子网中的验证者会在行子网中 Gossip 缺失的数据。一旦 > 50% 的扩展 Blob 可用,行子网中的所有验证者都会在本地重建它,然后将此行中的任何数据(他们缺少的数据)转发到他们的列子网。
我们分析了这种构造的两个安全方面(同样,有关安全概念的更多详细信息,请参见此处):
这些与完整节点的两个角色相对应:有助于强制执行网络规则,并允许与链进行最小信任的交互。第一个安全属性是使完整节点能够有助于强制执行构建在以太坊上的 Rollup 的规则的原因,最终保证了它们的安全性,前提是只有少数完整节点视为规范的链永远不会最终成为以太坊链,即使所有验证者都是恶意的。重要的是,这在即使对手提前知道所有查询的情况下也成立。
第二个概念更加强大:我们要求根本无法欺骗任何采样节点(除非概率可以忽略不计)。为了实现这一点,我们不能假设对手提前知道所有查询。实际上,它需要查询不可链接性,即隐藏一组查询来自同一节点/参与者的能力,因为如果没有这种能力,对手始终只能提供单个节点要求的数据。
如果 Rollup 在较弱的概念(全局安全性)下是安全的,并且数据可用性的全部意义在于让 Rollup 使用它,那么我们为什么需要这种更强的安全概念?这是因为 DA 层与以太坊链的其余部分紧密耦合:如果某些 Blob 数据不可用,完整节点只会忽略该链。诱骗完整节点认为不可用数据是可用的,可能会使它们遭受安全违规,即双重支出:他们确认有效链中的交易看起来安全且可用,但实际上不可用,因此最终不会成为规范的以太坊链。这适用于确认以太坊交易以及 Rollup 交易,因为 Rollup 状态是从规范的以太坊链派生的。
我认为引入没有查询不可链接性的 DAS不会对以太坊完整节点针对双重支出的安全性产生太大的改变。有两种情况,基于完整节点首先使用的确认规则:
此外,请记住,那些交易大量价值并希望获得与今天的完整节点相同的针对双重支出的安全保证的人可以选择运行下载所有数据的超级完整节点,而且这肯定不是一个过高的成本。至少值得讨论的是,完整节点交易确认安全性的这种(我们认为较小的)安全降低是否真的值得坚持。
确认 Rollup 交易的安全性情况非常相似,但还有一些围绕有效性的考虑因素,同样取决于 Rollup 节点使用的确认规则。让我们假设基线确认规则是以太坊最终性,然后使用一些 Rollup 特定的条件对其进行增强。
对于有效性 Rollup,明智的选择显然是在确认之前等待有效性证明,尽管不一定是在以太坊本身上发布和验证它。这样的节点确实获得了与以太坊完整节点在确认最终确定交易时获得的完全相同的安全保证(模有效性系统中或验证器实施中的问题),因为有效性是有保证的。换句话说,唯一的攻击向量是与我们在上一节中讨论的相同类型的双重支出。
对于乐观 Rollup,有多种选择。可以运行 Rollup 完整节点并简单地验证所有状态转换,在这种情况下,显然没有额外的担忧。当然,这并不理想,因为原则上 Rollup 节点可能比以太坊节点重得多。它也可以只等待 Rollup 桥确认交易,这同样安全,但由于欺诈证明期,需要更长的确认期。另一种选择是侦听 p2p 网络上(启动消息)欺诈证明,这可以使用比桥更短的欺诈证明期来完成。如果不可用数据已最终确定并且节点被诱骗认为它是可用的,则可以诱导运行这种快速确认规则的节点确认无效交易。
总结:即使对手提前知道所有查询,也无法说服超过一小部分采样节点相信不可用数据是可用的
对于自适应对手,它在决定使哪些数据可用之前一次性考虑所有查询,当从总共 m 个样本中下载 k 个样本时,成功定位 \epsilon 分数的 n 个节点的概率可以用 \binom{n}{n\epsilon}\binom{m}{m/2} 2^{-kn\epsilon} 来联合 bound:对手选择 n\epsilon 节点的子集,从 \binom{n}{n\epsilon} 个可能的子集中选择一个子集,一个由至少 \frac{m}{2} 个样本组成的子集,使其不可用,从 \binom{m}{m/2} 个这样的子集中选择一个子集,并且在给定这些选择的情况下,成功的概率为 2^{-kn\epsilon}。逼近二项式系数,我们得到 \left(\frac{2^{n}}{\sqrt{\frac{n\pi}{2}}}e^{-\frac{\left(n\ -\ 2n\epsilon\right)^{2}}{2n}}\right)\frac{2^{m}}{\sqrt{\frac{m\pi}{2}}}2^{-kn\epsilon} = \left(\frac{2^{n}}{\sqrt{\frac{n\pi}{2}}}e^{-\frac{\left(n\ -\ 2n\epsilon\right)^{2}}{2n}}\right)\frac{2^{\left(m-kn\epsilon\right)}}{\sqrt{\frac{m\pi}{2}}}, 并且我们希望这个值 < 2^{-30} 或类似的值。这给了我们 (n + m - kn\epsilon) - \log_{2}\left(e\right)\frac{n\left(1\ -\ 2\epsilon\right)^{2}}{2} < \log_2(\sqrt{nm}\frac{\pi}{2})-30
在下面的图中,我们设置 k = 16 和 m = 2048。在 y 轴上,我们有 n,即节点的数量,在 x 轴上,我们有 \epsilon,即可被欺骗的最大节点比例(特别是在这里,概率 \ge 2^{-30},但结果对选择的失败概率几乎不敏感)。只要我们至少有 2000 个节点,不到 10% 的节点可以被欺骗性地说服存在不可用的数据。此外,在 6000 到 10000 个节点之间,可攻击节点的比例下降了 5% 到 4%。
(你可以在此处使用这些参数)
也许值得注意的是,在考虑提前知道所有查询的对手的这种分析中,具有 m = 512^2(在正方形上采样)和 k = 75 的完整 Danksharding 采样并没有做得更好。实际上,它表现得更糟,这仅仅是因为 m 有多大。这不应该完全令人惊讶,因为此构造中的节点需要下载更大比例的数据(0.256 KiB/32 MiB,或 1/128,与 37.5 KiB/128 MiB,或 ~1/3000 相比)。也就是说,这只是一个可能不严格的界限,因此一个坏的界限并不一定意味着安全性差。另一方面,如果该界限被证明是严格的,则意味着具有如此高的 m 的全局安全性不能抵抗完全自适应的对手,而是也需要对查询的不可链接性做出一些假设。
当然,我们可以通过恶化其他两个中的一个或两个来提高带宽要求、安全性和吞吐量中的任何一个。例如,将 Blob 的数量减半为 b = 64,并将样本的数量加倍为 k=32 将保持带宽要求不变,同时使吞吐量减半,但会给我们一个更好的安全曲线。另一方面,我们可以通过设置 b = 256 和 k = 8 来使吞吐量加倍,同时保持带宽要求不变,从而牺牲安全性。在这里,我们比较 k=8,16,32 的安全性,即分别对应于最大吞吐量 32MiB、16MiB 和 8MiB。
(你可以在此处使用这些参数)
- 原文链接: ethresear.ch/t/subnetdas...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!