数据可用性
上次编辑: @maxwellcotto(opens in a new tab), Invalid DateTime
免信任是公共区块链的大前提(“不信任,就验证”)。 以太坊减少信任假设的方法之一是强制执行数据可用性相关规则。 区块生产者需要发布每个区块的数据,参与以太坊共识的节点在本地存储这些数据。
以太坊网络的所有节点执行从对等节点接收的区块中的交易,确保区块生产者提出的变化与节点独立计算的变化完全一致。 这就是节点验证新信息是否有效的方式,而无须信任区块生产者是诚实的。 如果缺少任何数据,这种验证是无法进行的。
数据可用性非常重要,因为如果我们不能使用可用数据重现变化,从区块链的角度看,该变化是不存在的。 如果能够获取区块数据,验证节点就可以使用它们自己的以太坊世界状态重新执行交易而无需信任,并独立验证每个区块的正确性。
前言
你应该很好地理解区块链基础知识,尤其是共识机制。 本页面还假设读者熟悉区块、交易、节点、扩容解决方案和其他相关主题。
什么是数据可用性?
数据可用性保证区块提议者发布区块的所有交易数据并且交易数据对于其他网络参与者可用。 以太坊交易在区块中处理。 这些区块连接在一起形成“区块链”。
每个区块有两个主要部分:
- 区块头:包含关于区块的一般信息(元数据),例如时间戳、区块哈希、区块编号等。
- 区块体:包含作为区块的一部分处理的实际交易。
提出新区块时,区块生产者必须发布整个区块,包括交易数据(包含在区块体中)。 然后,参与共识的节点可以下载区块的数据并重新执行交易以确认其有效性。 如果没有验证交易的节点,区块提议者可以在区块中插入恶意交易并逃脱惩罚。
数据可用性问题
我们可以把数据可用性难题概括为一个问题:“我们如何验证一个新产生区块的数据是否可用?”。 数据可用性非常重要,因为以太坊的安全在于假设全节点可以获取区块数据。
如果区块生产者在并非所有数据可用的情况下提出了一个区块,区块可以达成最终确定性但会包含无效交易。 即使区块是有效的,但那些不能完全进行验证的区块数据将对用户和网络的功能造成负面影响。
数据可用性问题也和扩容解决方案相关,如卷叠。 这些协议通过在以太坊主网线下执行交易来增加吞吐量。 然而,为了可以从以太坊获得安全性,这些协议必须在主网发布交易数据,让任何人能够验证在主链外执行的计算的正确性。
数据可用性和轻客户端
尽管传统的数据可用性概念涉及交易数据对验证节点的可见性,但更新的研究侧重于使用轻客户端验证数据可用性。 对于轻客户端来说,数据可用性问题是指在无需下载整个区块的情况下验证区块的可用性。
轻客户端是一种以太坊节点,它只同步最新的区块头并向全节点请求其他信息。 由于轻客户端不下载区块,它们无法验证交易或帮助保护以太坊的安全。
然而,相关工作已经开展,确保轻客户端能在无需下载区块的情况下证明数据可用性。 如果轻客户端可以验证区块的可用性,它们就可以通过提醒其他节点某个区块不可用,提升以太坊的安全性。
一个相关研究领域侧重于研究一种在无状态以太坊中证明数据可用性的机制。 无状态客户端概念(opens in a new tab)是以太坊的一个提议版本,即在验证区块前,验证节点无需存储状态数据。
无状态性有望提升以太坊的安全性、可扩展性和长期可持续性。 由于对验证节点的硬件要求较低,更多验证者可以加入网络并保护网络免受恶意参与者的侵害。
数据可用性与数据可检索性
数据可用性不同于数据可检索性。 数据可用性是指区块被提出以便添加到区块链时,节点下载区块交易数据的能力。 换句话说,数据可用性与区块尚未达成共识时相关。
数据可检索性是指节点从区块链中检索历史信息的能力。 区块链历史记录由老旧区块和存储过往事件信息的收据组成。 虽然存档可能需要区块链历史数据,但节点无需使用历史数据就可以验证链并处理交易。
核心以太坊协议主要涉及数据可用性,而不是数据可检索性。 以太坊不会永远存储处理过的每笔交易的数据,否则会提高全节点的存储要求,对以太坊的去中心化产生负面影响。
幸运的是,与数据可用性相比,数据可检索性问题解决起来要容易许多。 只需一个诚实节点存储区块链历史数据并让其可检索,即可获得检索区块链历史数据的能力。 此外,区块链浏览器等部分实体提供了一些激励措施,对存储存档数据以及在其他人请求时提供数据给予鼓励。
更多关于数据可检索性问题解决方案的信息(opens in a new tab)。
为什么数据可用性很重要?
区块链安全
数据可用性对于区块链安全至关重要,否则“数据隐藏攻击”将变得司空见惯。 当区块生产者发布一个区块但不共享用于构建区块的交易数据时,数据隐藏攻击就会发生。
如果发生数据隐藏攻击,全节点将无法验证以太坊世界的状态更新是否正确。 这让恶意区块提出者得以打破协议规则并在以太坊网络上推进无效的状态转换。
区块数据对全节点的可见性非常重要,因为轻客户端等其他网络参与者依赖全节点来验证网络的状态。 与全节点不同,轻客户端只检查区块头,不下载区块体。 因此,数据可用性相关规则确保全节点可以验证区块并避免区块链遭到破坏。
去中心化的可扩展性
以太坊的目标是扩展计算而不牺牲去中心化和安全性。 由于单层区块链架构的限制,数据可用性对于实现去中心化的可扩展性至关重要。
数据可用性和二层网络扩容
二层网络扩容解决方案(例如卷叠)通过在以太坊主执行层之外执行交易来扩展网络的吞吐量并减少延迟。 链下交易在压缩后分批次发布到以太坊上 — 数千笔交易可以在链下进行,但是以太坊需处理与每个提交批次相关的一笔链上交易。 这就缓解了基础层上的拥塞并减少了用户的费用,同时保证了更快捷的交易。
然而,为了让以太坊保证卷叠的安全,需要一种机制来验证链下交易的有效性。 这就是数据可用性的用武之地。
乐观卷叠将压缩后的交易数据作为 calldata
发布到以太坊。 这让任何人都能验证卷叠的状态并保证交易的有效性。 如果一笔交易是无效的,验证者可以使用可用数据构造一个欺诈证明,来质疑该交易。
零知识 (ZK) 卷叠无需发布交易数据,因为零知识有效性证明可保证状态转换的正确性。 然而,如果不能获取其状态数据,我们就不能保证零知识卷叠的功能(或者与它交互)。
例如,如果运营者隐瞒了卷叠状态的细节,用户就无法知道自己的余额。 而且,用户也不能使用新添加区块中的信息来执行状态更新。
区块链中数据可用性系统的类型
链上数据可用性
解决数据可用性问题的标准解决方案是,强制区块生产者在链上发布所有交易数据并让验证节点下载。 链上数据可用性是“单层区块链”的一个特征,可在单个层上管理数据可用性、交易执行和共识。 通过在整个网络上冗余存储状态数据,以太坊协议确保节点可以获取所需数据来重现交易、验证状态更新并标记无效的状态转换。
然而,链上数据可用性带来了可扩展性瓶颈。 单层区块链处理速度一般比较慢,因为节点必须下载每一个区块并且重新执行相同的交易。 它还需要全节点存储数量不断增长的状态 — 这种趋势会影响去中心化。 如果以太坊的状态数量激增,验证者必须购买更大的机器,这可能会减少愿意运行验证节点的人数。
链下数据可用性
链下数据可用性系统将数据存储移至区块链以外:区块生产者不在链上发布交易数据,而是提供一种加密承诺来证明数据的可用性。 模块化区块链(opens in a new tab)采用了这种方法。在模块化区块链中,区块链管理一些任务(例如交易执行和共识),同时把其他任务(例如数据可用性)分流到另一层。
很多扩容解决方案都采用模块化方法,将数据可用性与共识和执行分开,这被视作一种扩展区块链且不会增加节点要求的理想方式。 例如,Validium 和 plasma 使用链下存储减少发布到链上的数据量。
虽然链下数据可用性提高了效率,但它对于去中性化、安全性和免信任有负面影响。 例如,Validium 和 Plasma 区块链的参与者必须信任区块生产者不会在提出的区块中包含无效交易。 区块生产者可以通过隐瞒状态数据采取恶意行为(即推进无效的状态转换)并妨碍对恶意交易进行质疑的尝试。
因为链下存储存在的问题,有些扩容解决方案将交易数据存储在父区块链(如以太坊)上。 例如,乐观卷叠和零知识卷叠不存储交易数据,而是使用以太坊主网作为数据可用性层。
数据可用性问题有哪些解决方案?
如上所述,数据可用性问题涉及验证新提出区块的交易数据可用性的能力。 该问题的解决方案采用了一些机制来保证数据可用性。
数据可用性采样
数据可用性采样是一种保证数据可用性的加密机制。 数据可用性采样允许区块链节点验证所提出区块的数据是否可用,而无需下载整个区块。
在数据可用性采样系统中,节点分多次、少量随机对区块中的一部分采样,以验证数据可用性。 由于许多节点同时对区块的不同部分进行采样,区块的可用性可以得到验证,并且具有较高的统计学确定性。
当应用到区块链(如以太坊)时,数据可用性采样确保轻客户端也能参与保证区块链的安全和功能。 轻量客户端无需昂贵的硬件即可运行,使任何人都可以更轻松地在以太坊网络上进行验证。
更多关于数据可用性采样的信息。(opens in a new tab)
数据可用性证明
虽然数据可用性采样可以在统计学上保证区块可用性,但恶意节点仍然可以隐藏一些数据。 数据可用性采样技术只能证明大部分区块数据是可用的,但不能证明整个区块是可用的。 即使区块生产者隐藏少量交易数据也能造成非常大的伤害。
为了解决整个问题,我们将数据可用性采样和擦除编码(opens in a new tab)相结合,创建出“数据可用性证明”。 擦除编码是一种技术,它允许我们通过增加冗余数据片断(称为擦除代码)来使数据集翻倍。 如果原始数据丢失,擦除代码可以用来重建原始数据片段。
在区块链中实施时,擦除代码提高了数据可用性,因为一小部分数据就足以重建区块中的整个交易集。 在这个系统中,恶意区块生产者需要隐藏超过 50% 的区块来执行数据隐藏攻击。 之前,区块生产者只需要扣留 1% 的区块数据就可以实施恶意行为。
借助包含擦除代码的区块,轻客户端就获得了统计学确定性,即整个区块数据都发布在网络上。 它也意味着轻客户端无需依赖全节点来提醒它们一个区块不可用。
更多关于数据可用性证明的信息。(opens in a new tab)
数据可用性委员会
纯 Validium 将交易数据在链下存储到区块生产者,在一定程度上使它们中心化。 这削弱了去中心化和安全性,因为区块生产者可以通过隐藏交易数据来发布无效交易并隐藏卷叠的真实状态。
有些 Validium 试图通过让区块生产者将数据存储在可信方(即组成数据可用性委员会 (DAC))来解决这个问题。 数据可用性委员会在线下存储链下数据,但在出现争议事件时需要提供这些数据。 数据可用性委员会的成员还需要发布链上认证来证明这些数据确实是可用的。
更多关于数据可用性委员会的信息。(opens in a new tab)
权益证明数据可用性委员会
虽然数据可用性委员会要优于 Validium 的现状,但信任假设仍然存在。 如果数据可用性委员会与区块生产者串通一气隐藏交易数据,怎么办? 数据可用性委员会规模通常不大,这增加了串通的风险以及外部参与者破坏该团体的可能性。
有些 Validium 使用权益证明 (PoS) 验证者系统代替数据可用性委员会。 在该系统中,任何人都能成为验证者并在链下存储数据。 然而,他们必须提供“保证金”,并且保证金存入到智能合约中。 在发生恶意行为时,例如验证者隐藏数据,保证金会被罚没。
权益证明数据可用性委员会比常规数据可用性委员更安全。 它们不仅是无需许可和免信任的,而且有精心设计的激励措施来鼓励诚实行为。
更多关于权益证明数据可用性委员会的信息。(opens in a new tab)
以太坊和数据可用性的未来
虽然卷叠可以通过链下计算来扩大吞吐量,但它们的容量受到底层区块链的数据吞吐量限制。 如果卷叠使用以太坊作为数据可用性层,就必须增加它的数据存储和处理能力。
分片是一种提议的方法,用来增加以太坊执行层的数据吞吐量。 在分片中,网络分割成若干个子链,每个子链都有一组专门的验证者。
验证者只需对他们所在的分片运行全节点,对其他分片则充当轻客户端。 分片增加了卷叠可用的数据空间,因为存储数据的工作被拆分到不同的分片上。
但数据分片引入了一个新问题:“如果一个分片上的验证者心存恶意并且开始处理无效状态转换,那该怎么办?”。 这是可能的,因为全节点不再像目前这样可以访问相同的交易数据。 实现数据分片需要创建一个系统,让节点无需下载区块就能验证其他分片的数据可用性,否则分片的目的就没有意义了。
为了解决这个问题,以太坊较新的扩容提案,如 Danksharding(opens in a new tab),依靠数据可用性采样来验证二进制大对象的全部内容是否被网络看到。 该系统减轻了单个节点直接下载和验证的负担。
延伸阅读
- 到底什么是数据可用性?(opens in a new tab)
- 什么是数据可用性?(opens in a new tab)
- 数据可用性问题(opens in a new tab)
- 以太坊链下数据可用性概况(opens in a new tab)
- 数据可用性检查入门知识(opens in a new tab)
- 分片 + 数据可用性委员会提案释义(opens in a new tab)