本文详细介绍了区块链中的数据可用性(Data Availability)问题,解释了其含义、挑战,并探讨了数据可用性层在扩展区块链中的作用。同时,文章还讨论了解决数据可用性问题的不同方案,包括链上和链下存储,以及数据可用性采样(DAS)和纠删码等技术,最后阐述了数据可用性层对Web3开发者和模块化区块链的意义及影响。
由 Alchemy 编写
由 Brady Werkheiser 审核
发布于2022年8月4日 阅读时长10分钟
模块化和单体区块链 的核心任务包括执行交易、就交易排序达成共识以及保证交易数据的可用性。最后一部分——数据可用性——对于区块链至关重要,也是本文的重点。
数据可用性指的是所有与交易相关的数据都可供区块链网络上的节点使用。数据可用性很重要,因为它允许节点独立验证交易并计算区块链的状态,而无需彼此信任。
本指南将详细解释数据可用性的含义以及解决“数据可用性问题”为何重要。你还将了解数据可用性层在扩展区块链中所扮演的角色,以及为解决数据可用性问题而提出的不同解决方案。
区块链中的数据可用性指的是节点下载对等网络中传播的所有区块中包含的数据的能力。理解数据可用性需要掌握当前区块链中的区块验证过程。
首先,区块生产者将:
从 mempool 中获取交易
使用这些交易生成一个新区块
将新区块广播到 P2P 网络,以便添加到链中
在工作量证明网络中,区块生产者被称为“矿工”,在 PoS 网络中被称为“验证者”。
接下来,验证节点(又名 完整节点)将:
从新提议的区块中下载交易
重新执行交易以确认其符合共识规则。
一旦网络认为区块有效,则将该区块添加到链的头部
下图以比特币为例说明了区块验证:
一个展示了交易数据如何在区块链网络中广播的图表。[来源 https://globalxetfs.co.jp/en/research/bitcoin-the-basics/index.html]
但是,如果区块提议者拒绝发布交易数据,而只广播区块头(其中包含关于交易的元数据,但不包含交易本身)呢?
在这种情况下,完整节点将无法检查所提议区块的完整性。而且,只下载区块头的轻节点很容易被欺骗,从而接受无效区块。
为了避免这个问题,区块链——尤其是单体链——要求区块提议者使区块数据对网络的其余部分可用。
除了实现安全性之外,数据可用性规则还鼓励“无需信任”:对等方可以独立验证交易和区块,而不是信任网络中的其他人。
数据可用性带来的挑战是:要求节点下载和验证数据会降低吞吐量,并且使用链上存储来存储越来越多的信息会限制可以运行节点基础设施的实体数量。
单体区块链通过在多个节点上冗余存储状态数据来确保数据可用性,这样需要数据的对等方只需要从另一个对等方请求即可。但是,这种简单的数据可用性实现方式存在问题。
强制大量网络节点下载、验证和存储相同的数据会大大降低区块链的吞吐量。这就是以太坊每秒只能处理 15-20 笔交易,而比特币的处理速度约为每秒 5-7 笔交易的原因。
链上数据存储还会导致区块链大小呈指数级增长,这进一步增加了需要存储不断增加的状态量的完整节点的硬件要求。
高性能硬件成本的上升往往会减少愿意运行节点的个人数量,这直接增加了中心化的风险。
数据可用性也与区块链可扩展性相关。模块化链通常设计为通过将数据可用性与共识和执行分离来扩展吞吐量。在这种安排下,节点不需要存储区块链数据,从而消除了上一节中描述的一些约束。
然而,网络仍然需要保证所有区块数据对相关方可用。这构成了数据可用性问题的基础:“我们如何才能知道每个区块背后的数据已经发布,_而无需_访问整个区块?”
我们将在后面的章节中讨论数据可用性问题的解决方案。现在,让我们探讨“数据可用性层”的概念及其对区块链的影响。
在区块链中,数据可用性层是一个存储区块链数据可用性并就其达成共识的系统。“数据可用性层”指的是交易数据存储的位置。
有两种类型的数据可用性层:
这是许多区块链中的标准方法,其中数据由执行交易的节点存储在链上。虽然这确保了高数据可用性,但它限制了去中心化和可扩展性。
这种方法要求将交易数据存储在原始区块链网络之外。链下数据可用性层可以是另一个区块链,也可以是开发人员选择的任何数据存储系统。在这种情况下,数据可用性层侧重于存储数据,而不是执行。
分片是一种区块链扩展方法,涉及将网络分成几个并行运行的子链。每个子链中的节点处理不同的任务,目标是实现计算资源的有效利用。
以太坊当前的 扩展路线图 包括实施 数据分片 的计划——一种各种节点集群存储不同数据片段的系统。将有 64 条独立运行的分片链,节点仅下载发布到其指定分片的数据。这意味着完整节点不再需要像现在这样存储相同的数据。
一个展示了以太坊中分片链分布的图表。[来源 https://vitalik.ca/general/2021/04/07/sharding.html]
通过分片,以太坊将采用多个数据可用性层,而不是在一个位置存储状态数据。区块不必在整个网络中传播,并且只需要一组有限的节点来验证每个区块的数据。这直接转化为可扩展性,因为网络将能够更快地处理交易。
此外,在多个层之间存储数据进一步分散了以太坊。
根据 最新统计数据,完整节点目前存储整个区块链,大约是 1TB 的数据,但如果 64 个分片都在运行,则只需要存储 1/64 的链数据。这将有可能降低完整节点的存储要求并增加以太坊上的验证者数量。
Rollup 通过将计算和状态存储从以太坊的执行环境(以太坊虚拟机)中移开来扩展以太坊。EVM 仅接受链下计算的结果并将其应用于其状态,而无需重新执行交易,从而提高处理速度并降低成本。
Rollup 比其他以太坊扩展解决方案(包括侧链或 Plasma)更安全的原因在于它们对以太坊数据可用性的依赖。Optimistic Rollup 和 零知识 Rollup 除了在以太坊上发布交易结果外,还在 Layer 1 上以 CALLDATA 的形式发布交易数据。
从 Rollup 发布到以太坊的区块数据是公开可用的,允许任何人执行交易并验证 Rollup 链。
它还提高了抗审查性,因为潜在的区块生产者可以使用发布的数据来重建链的状态并开始生成新区块。由于此措施,没有任何单个 Layer 2 运营商可以任意冻结链并审查 Rollup 上的用户。
在数据可用性层提供安全性的前提下,Rollup 可以针对可扩展性进行优化。例如,Rollup 可以选择更大的区块和更快的区块时间来提高处理速度。
虽然这增加了节点的硬件要求(大多数 Rollup 都有一些执行交易的“超级节点”),但状态数据的可用性允许任何人质疑无效的状态转换或生成区块以防止审查。
模块化区块链是处理特定功能的区块链,例如执行、共识或数据可用性,并依赖其他区块链和链下系统来执行其余任务。模块化区块链堆栈包含不同的模块化链,它们以不同的方式协同工作以实现设定的目标。
模块化区块链堆栈中的数据可用性层通常负责存储交易数据,但也可能提供关于交易排序的共识。例如,专注于执行的模块化区块链(例如 Rollup 和 Validium)依赖于链下数据可用性层来存储状态更新后面的数据。
数据可用性层本身就是一个模块化链,因为它专注于存储数据并将执行外包给其他链。与常规区块链不同,纯数据可用性层不会检查区块生产者发布的数据的有效性。节点只需要就交易的排序达成共识,并确认已支付正确的费用。
一个展示了数据可用性层在模块化区块链堆栈中的位置的图表。[来源 https://celestia.org/learn/modular-architectures/]
单独的数据可用性层的存在为区块链开发者带来了重要的好处,包括更快的开发周期和更便宜的用户费用。
通过使用数据可用性层,启动新区块链或特定于应用程序的链的开发人员可以从一开始就获得有意义的安全属性。区块链的安全性通常是通过验证节点的分布来衡量的,但是在早期阶段实现验证者的理想分布是不现实的。
相反,这些新的区块链可以专注于执行和结算,同时依赖现有的数据可用性网络来保证安全性。因此,即使只有少数节点在执行链,他们通过发布无效交易和审查用户来恶意行为的能力也受到限制。
这是因为计算欺诈证明和有效性证明以验证执行所需的状态数据保证可用。数据可用性还使同步到区块链的状态更容易,这是生成新区块的必要条件。
对以太坊上有限区块空间的竞争推高了交易费用,这对于需要在链上发布大量数据的去中心化应用程序 (dApp) 来说并不理想。dApp 可以以低廉的价格将数据存储在针对数据可用性优化的层上,而不是在以太坊上发布数据。
使用数据可用性层的费用较低有两个原因:节点需要收取更少的费用来弥补硬件费用,并且数据可用性网络可以增加区块大小,这意味着可以将更多交易包含在区块中。
节点只关心数据存储,不需要投资于执行交易所需的带宽或硬件。因此,节点没有压力收取高额费用来收回在硬件上的投资。
由于 数据可用性采样,数据可用性网络可以增加区块大小,而不会损害去中心化和安全性。
数据可用性采样允许节点随机采样一个区块以确认其可用性,而无需下载所有数据。对区块空间的竞争减少意味着在数据可用性区块链上存储数据的平均成本更低。
数据可用性问题的解决方案通常采用两种方法:修改链上数据存储或将数据存储在链下。我们在下面探讨两种类型的数据可用性解决方案。
修改后的链上存储需要改变数据在链上的存储方式,以实现效率和安全性。一种修改后的链上存储是指前面讨论的数据分片过程。
在分片区块链中,节点只下载和存储发布在特定分片中的数据。换句话说,验证者为一个分片运行一个完整节点,并以轻客户端的身份为其他分片运行。
这里显而易见的问题是:“节点如何在不下载这些区块的情况下,确保其他分片的数据可用?”
这就是数据可用性采样发挥作用的地方。
数据可用性抽样是一种验证区块可用性的机制,而无需下载所有内容。节点通过下载区块的随机部分来应用数据可用性抽样,以查看它们是否可用。
随着许多节点随机抽样一个区块,隐藏区块数据的可能性降低。如果一个节点发现区块的某个部分不可用,它可以发出警报并提醒其他节点。
一个展示了节点抽样一个“blob”区块以检查其可用性的图表。[来源:Vitalik Buterin]
虽然数据可用性采样可以给节点提供高度的统计确定性,即区块的数据是可用的,但它不能完全排除数据扣留攻击。数据扣留攻击发生在区块生产者提议新区块但不发布所有交易数据时。
即使区块生产者发布了区块的大部分内容,隐藏一小部分数据仍然具有安全隐患。如果 Rollup 运营商执行了一项无效交易,将大量用户的代币转账给自己,并扣留了挑战所需的数据怎么办?
为了对数据扣留具有更高的安全保证,我们将 数据可用性抽样与擦除编码相结合。
擦除编码是一种密码学原语,用于提高数据的完整性和可用性,它涉及通过添加冗余片段(称为擦除码)来使数据集翻倍,这样,冗余片段的任何组合都可以帮助恢复原始数据。
以太坊中的分片链 使用“blob”(二进制大对象)发布交易数据,这类似于区块。在发布 blob 之前,区块生产者必须通过擦除编码扩展原始数据。这样,任何人都可以通过访问一些擦除码来重建整个区块。
擦除编码使得执行数据扣留攻击更加困难。使用擦除编码的区块,节点只需要一小部分就可以恢复原始数据。因此,区块生产者需要隐藏整个数据集的大部分(超过 50%)才能成功地隐藏数据。
链下数据存储涉及将数据存储在其他地方,以避免给节点带来负担。链下数据存储解决方案分为两类:数据可用性委员会 (DAC) 和数据可用性网络。
数据可用性委员会 (DAC) 是一组被许可的实体,其任务是离线保存区块链数据的副本。DAC 通常由被任命担任该角色的受信任实体组成。
区块生产者在执行状态转换时,需要将交易数据发送给 DAC 的成员。这降低了中心化风险,因为 DAC 可以向用户提供数据,特别是如果区块生产者开始恶意行为。
Validium 是一种类似于 ZK-Rollup 的以太坊扩展解决方案,它使用 DAC 来保证数据可用性。除了计算零知识证明以验证交易批次之外,区块提议者还必须从 DAC 的成员那里获得证明(签名)。在接受新的交易批次之前,此“可用性证明”会与以太坊上的有效性证明一起验证。
使用 DAC 的项目示例包括 DiversiFi 和 ImmutableX。
虽然数据可用性委员会在一定程度上帮助解决了数据可用性问题,但它们也有一些缺点。DAC 的规模通常很小,这使得恶意行为者很容易破坏该组织。而且由于 DAC 的成员是“受信任的”实体,因此没有系统来惩罚不当行为。
数据可用性网络旨在分散存储区块链数据的过程并消除信任假设。数据可用性网络与数据可用性委员会类似,但有三个主要区别:无需许可的架构、无需信任和容错能力。
数据可用性网络通常是一个区块链,其唯一目的是对交易进行排序和存储数据。
诸如 Celestia 和 Polygon Avail 之类的数据可用性网络使用 PoS 系统,该系统允许任何人成为数据可用性管理器。为此,用户只需投入所需的权益即可开始参与区块链。
PoS 数据可用性网络使用密码经济激励来确保节点诚实地行动。每个负责存储数据的节点都必须在一个智能合约中抵押一些资金,如果他们未能按要求提供数据,这些资金可能会被削减。此功能消除了数据可用性委员会中存在的信任假设。
PoS 数据可用性网络通常比数据可用性委员会拥有更高的参与度。这使得恶意行为者更难以破坏该组织并进行数据扣留攻击。
一个展示了 Polygon Avail 的数据可用性网络架构的图表。
数据可用性在区块链保持功能和安全的能力中起着关键作用。尤其是在模块化区块链的上下文中,数据可用性层允许有意义的去中心化和安全性。
以太坊的 未来可扩展性计划 也依赖于其数据存储容量。Rollup 受制于父链上的数据吞吐量,因此引入了数据分片和其他升级,以提高以太坊作为 Layer 2 解决方案的数据可用性层的性能。
\
\
以太坊\
\
以太坊分片:区块链分片简介\
\
什么是区块链分片,它与以太坊有什么关系?
\
\
以太坊\
\
什么是增强交易?\
\
探索一种新型交易,保证交易被挖掘并针对 Gas 进行优化
\
\
以太坊\
\
什么是以太坊承诺级别?\
\
了解安全(已验证)、最终确定和最新承诺级别
Alchemy 将最强大的 web3 开发人员产品和工具与资源、社区和传奇支持相结合。

>- 原文链接: [alchemy.com/overviews/da...](https://www.alchemy.com/overviews/data-availability-layer)
>- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!