数据可用性
去信任是公共区块链的一个主要前提(“不信任,验证”)。
以太坊减少信任假设的方法之一是强制执行数据可用性规则。
区块生产者需要发布每个区块的数据,哪些节点在本地参与以太坊的共识存储。
以太坊网络上的所有节点都在从对等方接收到的块中执行交易,以确保块生产者提出的更改与节点独立计算的更改精确匹配。这就是节点验证新信息是否有效的方式,而不是必须相信区块生产者是诚实的。如果缺少任何数据,这是不可能的。
数据可用性很重要,因为如果我们不能用我们可用的数据复制某些东西,从区块链的角度来看,它就不存在。对区块数据的访问使验证节点能够使用其以太坊世界状态的版本来不信任地重播交易,并独立验证每个区块的正确性。
什么是数据可用性?
数据可用性是区块提议者发布区块的所有交易数据并且交易数据可供其他网络参与者使用的保证。
以太坊交易以块的形式处理。
这些区块链在一起形成“区块链”。
每个块有两个主要部分:
-
区块头:这包含有关区块的一般信息(元数据),例如时间戳、区块哈希、区块编号等。
-
块体:这包含作为块的一部分处理的实际交易。
在提议新区块时,区块生产者必须发布整个区块,包括交易数据(包含在区块体中)。
参与共识的节点然后可以下载块的数据并重新执行交易以确认其有效性。
如果没有节点验证交易,区块提议者可以在区块中插入恶意交易。
数据可用性问题
我们可以将数据可用性问题封装成一个问题:“我们如何验证新生成的块的数据是否可用?”。
由于以太坊的安全性假设完整节点可以访问块数据,因此这些可用数据至关重要。
如果一个区块生产者在没有所有可用数据的情况下提出一个区块,它可能会在包含无效交易的同时达到最终确定性。
即使该块是有效的,该块的数据不能完全可用于验证对用户和网络的功能有负面影响。
在讨论扩展解决方案(例如汇总)时,数据可用性问题也很重要。
这些协议通过在以太坊主网上执行交易来增加吞吐量。
然而,为了让他们从以太坊获得安全性,他们必须在主网上发布交易数据,允许任何人验证在主链上执行的计算的正确性。
数据可用性和轻客户端
尽管数据可用性的经典概念涉及交易数据对验证节点的可见性,但较新的研究集中在使用轻客户端验证数据可用性。对于轻客户端,数据可用性问题涉及验证块的可用性,而无需下载整个块。
轻客户端是一个以太坊节点,它只同步到最新的区块头并从全节点请求其他信息。由于他们不下载块,轻客户端无法验证交易或帮助保护以太坊。
但是,正在进行工作以确保轻客户端无需下载块即可证明数据可用性。如果轻客户端可以验证一个块的可用性,他们可以通过提醒其他节点一个块的不可用性来为以太坊的安全做出贡献。
一个相关的研究领域集中在使数据在无状态以太坊中可证明可用的机制上。无状态客户端概念是以太坊的一个提议版本,其中验证节点不必在验证块之前存储状态数据。
无状态有望提高以太坊的安全性、可扩展性和长期可持续性。由于验证节点的硬件要求较低,更多的验证者可以加入网络并保护网络免受恶意行为者的侵害。
数据可用性与数据可检索性
数据可用性不同于数据可检索性。数据可用性是节点在提议添加到链时下载区块的交易数据的能力。
换句话说,当一个区块尚未通过共识时,数据可用性是相关的。
数据可检索性是节点从区块链中检索历史信息的能力。区块链的历史由存储过去事件信息的古老区块和收据组成。
尽管出于存档目的可能需要历史区块链数据,但节点可以在没有它的情况下验证链并处理交易。
核心以太坊协议主要关注数据可用性,而不是数据可检索性。
以太坊不会永远存储它处理过的每笔交易的数据,因为这样做会增加全节点的存储需求,对以太坊的去中心化产生负面影响。
幸运的是,数据可检索性是一个比数据可用性更容易解决的问题。检索历史区块链数据的能力只需要一个诚实的节点来存储它就可以检索。
此外,一些实体,例如区块链浏览器,有动机存储档案数据并根据要求将其提供给其他人。
为什么数据可用性很重要?
区块链安全
数据可用性对于区块链安全至关重要,否则“数据扣留攻击”将变得司空见惯。
当区块生产者发布区块但不共享用于构建区块的交易数据时,就会发生数据扣留攻击。
如果发生数据扣留攻击,全节点无法验证以太坊世界状态更新的正确性。
这为恶意区块提议者提供了颠覆协议规则并在以太坊网络上推进无效状态转换的余地。
块数据对全节点的可见性至关重要,因为其他网络参与者,例如轻客户端,依赖全节点来验证网络的状态。 与全节点不同,轻客户端只检查块头,不下载块体。
因此,围绕数据可用性的规则确保了全节点可以验证区块并防止链被破坏。
分散的可扩展性
以太坊的目标是在不牺牲去中心化和安全性的情况下扩展计算。由于整体区块链架构的限制,数据可用性对于实现去中心化的可扩展性至关重要。 数据可用性和第 2 层扩展
第 2 层扩展解决方案,例如汇总
,通过处理以太坊主执行层的交易来扩展网络吞吐量和延迟。链下交易被压缩并分批发布到以太坊上——数以千计的交易可能发生在链下,但以太坊需要处理与每批提交相关的一个链上交易。这减少了基础层的拥塞并降低了用户的费用,同时确保更快的交易。
但是,以太坊要保证 rollups 的安全性,需要一种机制来验证链下交易的有效性。这就是数据可用性发挥作用的地方。
乐观汇总将压缩的交易数据作为调用数据发布到以太坊。这允许任何人验证汇总的状态,并提供交易有效性的保证。如果交易无效,验证者可以使用可用的交易数据来构建欺诈证明
去挑战它。
零知识 (ZK) 汇总不需要发布交易数据,因为零知识有效性证明
保证状态转换的正确性。但是,如果不访问其状态数据,我们无法保证 ZK-rollup 的功能(或与之交互)。
例如,如果操作员隐瞒有关汇总状态的详细信息,用户将无法知道他们的余额。
此外,他们无法使用新添加的块中包含的信息执行状态更新。
区块链中数据可用性系统的类型
链上数据可用性
解决数据可用性的标准解决方案是强制区块生产者在链上发布所有交易数据并让验证节点下载它。
链上数据可用性是“单片区块链”的一个特性,它在单层上管理数据可用性、交易执行和共识。
通过在网络上冗余存储状态数据,以太坊协议确保节点可以访问重现交易、验证状态更新和标记无效状态转换所需的数据。
然而,链上数据的可用性给可扩展性带来了瓶颈。单片区块链的处理速度通常很慢,因为节点必须下载每个块并重播相同的交易。
它还需要完整的节点来存储越来越多的状态——这一趋势可能会影响去中心化。
如果以太坊的状态螺旋式上升,验证者必须投资更大的机器,这可能会减少愿意运行验证节点的人数。
链下数据可用性
链下数据可用性系统将数据存储移出区块链:区块生产者不会在链上发布交易数据,而是提供加密承诺来证明数据的可用性。
这是模块化区块链使用的一种方法,其中链管理一些任务,例如交易执行和共识,并将其他任务(例如,数据可用性)卸载到另一层。
许多扩展解决方案采用模块化方法,将数据可用性与共识和执行分开,因为这被认为是在不增加节点要求的情况下扩展区块链的理想方式。
例如,validiums 和 Plasma 使用链下存储来减少发布在链上的数据量。
虽然链下数据可用性提高了效率,但它对去中心化、安全性和去信任化具有负面影响。
例如,validiums 和 Plasma 链的参与者必须信任区块生产者不会在提议的区块中包含无效交易。区块生产者可以采取恶意行为(即通过推进无效状态转换)并通过隐瞒状态数据来削弱挑战恶意交易的企图。
由于与链下存储相关的问题,一些扩展解决方案将交易数据存储在父区块链上,例如以太坊。
例如,Optimistic rollups 和 ZK-rollups 不存储交易数据,而是使用以太坊主网作为数据可用性层。
数据可用性问题有哪些解决方案?
如前所述,数据可用性问题涉及验证新提议区块的交易数据可用性的能力。这个问题的解决方案采用了一些机制来保证数据的可用性。
数据可用性抽样
数据可用性采样是一种用于保证数据可用性的加密机制。数据可用性采样允许区块链节点验证提议区块的数据是否可用,而无需下载整个区块。
在 DAS 系统中,节点在多轮中对块的小块随机块进行采样,以验证数据可用性。由于许多节点同时对块的不同部分进行采样,因此可以以高统计确定性验证其可用性。
当应用于以太坊等区块链时,数据可用性采样可确保轻客户端也参与保证链的安全性和功能性。轻客户端可以在没有昂贵硬件的情况下运行,让任何人都可以更轻松地在以太坊网络上进行验证。
数据可用性证明
虽然数据可用性抽样提供了区块可用性的统计保证,但恶意节点仍然可以隐藏一些数据。
DAS 技术仅证明大部分块数据可用,而不是整个块可用。甚至隐藏少量交易数据的区块生产者也可能带来很大的危害。
为了解决这个问题,我们将数据可用性采样与纠删码结合起来创建“数据可用性证明”。纠删码是一种允许我们通过添加冗余片段(称为纠删码)将数据集加倍的技术。如果原始数据丢失,纠删码可用于重建原始数据。
当在区块链中实施时,纠删码提高了数据的可用性,因为一小部分数据就足以重建一个区块中的整个交易集。在这个系统中,恶意区块生产者需要扣留超过 50% 的区块才能执行数据扣留攻击。以前,一个区块生产者只需要夺取 1% 的区块数据就可以进行恶意行为。
使用纠删码块,轻客户端具有统计确定性,即整个块数据已在网络上发布。这也意味着轻客户端不必依赖完整节点来提醒他们区块不可用。
数据可用性委员会
纯验证通过区块生产者将交易数据存储在链下,使它们在一定程度上集中化。
这降低了去中心化和安全性,因为块生产者可以发布无效交易并通过隐藏交易数据来隐藏汇总的真实状态。
一些validiums试图通过要求区块生产者将交易数据存储在构成数据可用性委员会(DAC)的受信任方中来解决这个问题。
DAC 离线记录链下数据的副本,但需要在发生争议时使其可用。
DAC 成员还发布链上证明,以证明上述数据确实可用。
股权证明数据可用性委员会
虽然数据可用性委员会比验证中的现状要好,但信任假设仍然存在。
如果 DAC 与区块生产者勾结扣留交易数据怎么办?
DAC 通常规模较小,从而增加了串通的风险以及外部行为者损害该组织的可能性。
一些validiums用权益证明(PoS)验证器系统代替DAC。 在这里,任何人都可以成为验证者并在链下存储数据。
但是,他们必须提供“保证金”,并将其存放在智能合约中。 如果出现恶意行为,例如验证者扣留数据,则可以削减保证金。
权益证明数据可用性委员会比常规 DAC 安全得多。
它们不仅无需许可和无需信任,而且还具有精心设计的激励机制来鼓励诚实的行为。
以太坊和数据可用性的未来
尽管汇总可以通过链下计算扩展吞吐量,但它们的容量受到底层区块链的数据吞吐量的限制。
如果 rollups 要将以太坊用作数据可用性层,它必须增加其数据存储和处理能力。
分片是一种提高以太坊执行层数据吞吐量的方法。在分片中,网络被分成选定数量的子链——每个子链都有一组专用的验证器。
验证者只需为其分片运行完整节点,并为其他分片以轻客户端容量运行。
分片增加了可用于汇总的数据空间,因为存储数据的工作分散在不同的分片中。
但是数据分片引入了一个新问题:“如果一个分片上的验证者变得恶意并开始处理无效的状态转换怎么办?”。
这是可能的,因为完整节点不再能够访问与当前情况相同的交易数据。
实现数据分片需要为节点创建一个系统,在不下载块的情况下验证其他分片中的数据可用性,否则分片的目的就失效了。
为了解决这个问题,以太坊的较新的扩展提议,例如 Danksharding,依靠数据可用性采样来验证网络是否已经看到了 blob 的全部内容。
该系统将单个节点从直接下载和验证的负担中解脱出来。
参考资料
https://ethereum.org/zh/developers/docs/data-availability/