本文详细探讨了区块链中的数据可用性采样技术(DAS),介绍了该技术的必要性、理论基础和实际挑战。通过将模型比喻为一个黑暗房间里的公告板,文章分析了如何用冗余和纠错编码(如Reed-Solomon编码)来验证数据可用性。同时,本文指出了当前技术面临的多个挑战,包括样本随机性、安全性、网络协议效率等,并提出未来的研究方向。
任何 layer-1 区块链的核心责任之一是保证 数据可用性(data availability)。这一保证对客户端能够理解 layer-1 区块链本身是至关重要的,也是像 rollups 这样的更高层应用的基础。为此,一个经常被讨论的技术是 数据可用性验证的随机采样,该技术在2018年由 Mustafa Al-Bassam, Alberto Sonnino, 和 Vitalik Buterin 的论文 中被广泛传播。该技术是 Celestia 区块链的核心,并被提议纳入权益证明(PoS)以太坊的“Danksharding”。
本文的目的是解释数据可用性采样(DAS)的基本知识、其所基于的模型以及在实践中实现该技术时面临的挑战和开放问题。我们希望这篇文章能够激发研究者的兴趣,吸引他们关注这一问题,并推动新的想法以解决一些突出挑战(参见 以太坊基金会近期的提案请求)。
某些人(例如一个 layer-1 区块提议者或 layer-2 排序器)产生了一块数据。他们声称已将其“提供给”公众。你的目标是检查可用性声明,即如果你需要获得数据,实际上能否获得它?
数据的可用性至关重要。基于乐观欺诈证明的系统,如 Optimism,需要数据可用性来进行验证,甚至基于有效性证明的系统,如 StarkNet 或 Aztec,也需要数据可用性以确保活性(例如,证明资产所有权以获取 rollup 的逃生阀或强制交易纳入机制)。
到目前为止,对于问题的表述有一个简单的“天真的”测试程序,早期系统如比特币隐式采用:只需尝试下载整个数据块。如果你成功,你就知道它是可用的;如果你未成功,你则认为它不可用。然而,现在我们希望测试数据可用性 而不自己下载太多数据,例如,因为数据超过了我们能够处理的大小,或者因为在我们实际上不关心的数据上花费大量带宽“仅仅”是为了验证其可用性似乎是浪费。在这一点上,我们需要一个模型来澄清仅“部分数据”的下载或保留意味着什么。
计算机科学中的一种常见做法是首先在一个具有相当充裕功能的模型中描述一种新技术;随后再解释如何实现该模型。我们在此采用类似于 DAS 的方式,然而,正如我们将看到的,当我们试图实例化模型时,会出现有趣的开放 R&D 问题。
在我们的模型中,有一个在黑暗房间里的公告板(见下面的漫画)。首先,区块生产者进入房间,并有机会在公告板上写一些信息。当区块生产者离开时,它可以给你,即验证者,提供一小块信息(大小不与原始数据线性增长)。你进入房间时带着一个光束非常狭窄且电量不足的手电筒,因此你只能读取公告板上很少的不同位置的内容。你的目标是让自己相信,区块生产者确实在公告板上留下了足够的信息,以便如果你打开灯并读取完整的公告板,你将能够恢复该文件。
乍一看,这似乎有些棘手:我们可以要求区块生产者在公告板上写下完整的文件。现在考虑两种可能性:或者生产者诚实地写下完整的文件,或者生产者不当行为并遗漏了某个小块信息,从而使文件整体不可用。通过仅检查公告板上少数地点,你无法可靠地区分这两种情况——因此,你无法可靠地检查数据可用性。我们需要一种新方法!
在这里,纠错的 Reed-Solomon 码发挥作用。让我们稍作绕道来回顾一下这些内容。从高层次来看,纠错编码的工作方式是这样的:一个 k 个 信息块 被编码为一个(更长的)n 个 编码块 的向量。编码的 速率 $ R = k / n $ 衡量了码所引入的冗余。随后,我们可以从某些编码块的子集中 解码 原始信息块。
如果代码是 最大距离可分(MDS),那么原始 k 个信息块可以从任意 k 个编码块的子集恢复,这是一个有用的效率和健壮性保证。Reed-Solomon 码是一种流行的 MDS 码家族,其运作方式如下。记得在学校的时候你可能学过两个点唯一决定一条直线:
这是因为一条直线可以用一个包含两个系数的阶数为 1 的多项式表示:$ y = a_1 x + a_0 $
(假设目前为止这些点具有不同的 x 坐标)。实际上,这一洞察可以推广:任何阶数为 $ t - 1 $ 的多项式,与描述该多项式的系数 $ {ai}{i=0}^{t-1} $ 相对应,由该多项式经过的任意 t 个点唯一确定。换句话说:一旦你知道该多项式在 t 个不同位置的评估结果,你就可以通过首先恢复多项式然后评估它来获取它在任何其他位置的评估结果。
Reed-Solomon 码便是基于这一洞察构建的。在编码时,我们从 k 个信息块 $ {ai}{i=0}^{k-1} $ 开始,构造关联多项式 $ f(X) = \sum_{i=0}^{k-1} a_i X^i $
,并在 n 个不同的 x 坐标处对其进行评估,以获取编码块。由于上述洞察,这些编码块中的任何 k 个都能唯一恢复阶数为 k-1 的多项式,通过读取系数来获取原始信息块。瞧!
回到我们的数据可用性问题:我们现在要求区块生产者将文件切成 k 个块,使用一个比如说速率为 $ R = 1/2 $ 的 Reed-Solomon 码进行编码,并将 n = 2k 个编码块写入公告板。假设目前为止区块生产者至少在编码方面诚实,我们稍后将看到如何使这一假设得以兑现。再次考虑这两种情况:生产者要么诚实并写下所有的块,或者生产者行为不当,想要让文件不可用。请记住,我们可以从 2k 个编码块中恢复原始文件中的任何 k 个。因此,为了使文件不可用,区块生产者最多能写下 $ k - 1 $ 个块。换句话说,现在至少需要有 k + 1,即超过一半的 2k 个编码块会丢失!
但现在,这两种情况,即完整写入的公告板和半空的公告板,很容易区分:你可以在少数随机抽样的位置检查公告板,若每个抽样位置都有相应的块,则认为文件可用;若任何抽样位置为空,则认为文件不可用。注意,如果文件不可用,因此公告板中(超过)一半的内容为空,你错误地认为文件可用的概率是 $ < 2^{-r} $,即在 r 上是指数级的小。
这在给定的“黑暗房间中的公告板”模型中简单明了。让我们考虑这个模型:组成部分代表什么?我们可以在真正的计算机系统中实现它们吗,如何实现?
事实上,为了帮助识别理论和实践之间的差距,我们使用“奇怪”的“黑暗房间中的公告板”模型来解释问题和解决方案,其隐喻与真实计算系统几乎没有相似之处。这是为了促使你思考真实和模型世界的某些方面如何对应,以及它们如何可能(不)实现。如果你留有模型中的部分尚未能够翻译成计算机/网络/协议等效的内容,你会知道还有待完成的事情——这可能是你理解上的差距,或者开放的研究问题! ;)
以下是一些挑战的非详尽集合,其中一些有社区多年来找到合理答案,而其他则仍然是开放研究问题。
挑战 A:如何确保公告板上的块实际上是由提议者写的? 想想在网络中经过的采样块的修改。这是区块生产者在离开时可以传递给采样节点的小块信息。当区块生产者离开时,采样节点进入黑暗室时,这一小块信息起到了作用。在实践中,这实现为一个 绑定向量承诺(想想 Merkle 树)到写入公告板的原始内容,它作为区块头的一部分共享。基于该承诺,区块生产者可以在公告板上留下每个编码块的证明,显示这些块确实是由区块生产者写的。这些块在传输中无法被第三方更改,因为承诺方案不允许伪造修改块的有效证明。注意,这本身并不阻止区块生产者在公告板上写入无效/不一致的块,我们接下来会讨论这一点。
挑战 B:强制要求区块生产者正确地进行擦除编码。 我们在上述方案中假设区块生产者正确地编码信息块,以便擦除编码的保证成立,因此从足够的编码块中实际上可以恢复信息块。换句话说,区块生产者所能做的只是 保留 块,而不能用 无效 块混淆我们。实际上,有三种常被讨论的方法来排除无效的编码:
挑战 C:“公告板”是什么?“在哪里”?提议者如何“写入”公告板? 在我们讨论“公告板”是什么以及“在哪里”,提议者如何将内容写入公告板,以及验证者如何从中“读取”/“采样”之前,让我们回顾两种基本点对点网络原语的显著缺陷:
考虑到这一点,我们可以回到如何实现公告板及其读写操作的核心问题上。编码块存储在哪里?它们如何到达那里?当前存在三种突出的考虑方法:
这些方法面临的挑战包括:
挑战 D:“如何”实现随机采样? 这个问题有两个方面:如何在网络中找到并传输所需的块(即,如何从公告板“读取”),以及如何确保采样与对手保持“随机”,即对手区块生产者无法(过多)适应性改变其策略,具体取决于谁查询了哪些块。
请注意,上述问题仅解决了采样(从公告板 现在 的“读取”),而未解决“在未来的任何时间从公告板读取”的问题。具体而言,GOSSIP 实际上实现了一个 短暂的 公告板(只能在其内容被写入/传播时读取/采样),而 DHT 实现了一个 永久的 公告板(也可以在之后的时间进行读取/采样)。通常,所需的是一个永久公告板(其持久性要求从“天”到“永远”不等,具体取决于设计的确切情况),为此 GOSSIP 必须与 DHT 结合使用,以便路由块,但由此面临前面讨论的挑战。REPLICATE 则立即实现一个永久公告板。
下表显示了常见点对点协议如何实现模型中的功能。具体而言,面向 gossip 的方法有两个变体,一个使用 gossip 来采样块,另一个使用 DHT 来采样块,而在这两种情况下,“块被写到公告板”通过 gossip 处理,“在稍后时刻从公告板读取”则使用 DHT。相反,DHT 导向的方法完全依赖于 DHT 来处理所有涉及的操作。在基于副本的协议中,每个节点从附近的完整副本读取/采样块,使用请求/响应协议。它有效地使用 gossip 来初步分发块,尽管两个对等体之间的 gossip 技术上也可能通过请求/响应协议实现。
此外,在所有上述技术中,“谁采样什么”至少部分会泄漏给对手,从而使对手能够通过自身的行为适应性地削弱/促进某些节点采样的块传播,因此欺骗某些节点相信区块(不可)用。尽管 早期的工作表明,只有少数节点可能被欺骗,但这并不理想。或者说 早期的工作假设匿名的网络通信,这种想法在实践中至少带来了相当大的性能损失,甚至直接变得不切实际。
挑战 E:如何“修复”公告板的内容? 也就是说,如果一个编码块丢失(例如,因为存储该块的节点已下线;如何检测这一点?),如何恢复?天真的修复涉及解码和重新编码,因此对通信和计算造成了相当大的负担,特别是对于常见的 Reed-Solomon 纠错码。谁承担这一负担?他们如何获得补偿?如何避免恶意区块生产者通过保留一些编码块来给采样节点造成困扰,从而迫使节点为昂贵的修复支出资源?那分布式修复机制呢?如何检索必需的块以进行修复,回到关于“在未来”从公告板读取的前一点。
挑战 F:激励机制。 如果采样是免费的,如何防止拒绝服务矢量?如果采样需要支付(如何实现?),如何使其同时保持完全匿名?如何补偿那些存储(部分)公告板的人、在点对点网络中路由信息的人或执行块修复等维护任务的人?
为完整起见,我们简要提到一个稍微不同的模型,在该模型中,DAS 能够实现稍微不同的保证。即使没有匿名和可靠的网络,对手也只能欺骗一定数量的诚实节点,让他们相信不可用的文件是可用的。否则,它就必须释放如此多的块,以至于在所有诚实节点获取的块的并集中可以恢复文件。这种模型的优势在于网络所需的属性更易实现(特别是在对手颠覆对等网络时)。缺点是无法为个别用户提供具体保证(你可能正好位于被欺骗的少数人中!),并且仍然不清楚如何收集所有诚实节点获得的样本并恢复文件(特别是在对手颠覆对等网络时)。
基于本文中提出的观察和论点,我们认为以下将是未来研究和发展的几个有趣方向:
如果你在上述任何方向上工作(或有兴趣工作),我非常希望听到你的消息!你可以通过-twitter 联系我: @jneu_net。
- 原文链接: paradigm.xyz/2022/08/das...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!