---
title: "什么是数据可用性层?"
description: "数据可用性层是什么、它如何工作,以及在后合并时代的 Ethereum 环境中它为何对模块化区块链如此重要"
---

# 什么是数据可用性层?

[模块化和单体区块链](https://www.alchemy.com/overviews/modular-vs-monolithic-blockchains)的核心任务包括执行交易、对交易顺序达成共识，以及保证交易数据的可用性。最后一部分——数据可用性——对区块链至关重要，也是本文的重点。

数据可用性指的是，所有与交易相关的数据都可供区块链网络上的节点获取。数据可用性之所以重要，是因为它使节点能够独立验证交易、计算区块链的状态，而无需相互信任。

本指南将详细解释数据可用性的含义，以及解决"数据可用性问题"为何重要。你还将了解数据可用性层在扩展区块链方面所起的作用，以及为解决数据可用性问题而提出的各种方案。

## **数据可用性是什么意思？**

区块链中的数据可用性指的是节点能够下载通过点对点网络传播的所有区块中包含的数据的能力。要理解数据可用性，需要先了解目前区块链的区块验证流程。

### **区块验证是如何工作的？**

首先，**区块生产者**会：

1. 从[内存池](https://www.alchemy.com/overviews/what-is-a-mempool)中获取交易
1. 用这些交易生成一个新区块
1. 将新区块广播到P2P网络，以便添加到链上

在工作量证明网络中，区块生产者被称为"矿工"；在权益证明网络中，则被称为"验证者"。

接下来，**验证节点**（也称[全节点](https://www.alchemy.com/overviews/archive-nodes)）会：

1. 从新提出的区块中下载交易
1. 重新执行这些交易，确认其符合共识规则
1. 一旦网络认定该区块有效，就将其添加到链的最前端

下图以比特币为例说明了区块验证过程：

<ImageBlock
  src="https://media.alchemy.com/1703853086-how-transaction-data-is-broadcast-in-networks.png"
  alt="展示交易数据如何在区块链网络中广播的示意图"
  width={1600}
  height={1019}
  caption="展示交易数据如何在区块链网络中广播的示意图。[来源https://globalxetfs.co.jp/en/research/bitcoin-the-basics/index.html ]"
/>

但如果区块提议者拒绝发布交易数据，只广播包含交易元数据但不包含交易本身的区块头，会怎样呢？

在这种情况下，全节点将无法检查所提议区块的完整性。此外，只下载区块头的轻节点也很容易被诱骗接受无效区块。

为避免这一问题，区块链——尤其是单体链——要求**区块提议者**将区块数据公开给网络中的其他节点。

除了增强安全性之外，数据可用性规则还能促进"无需信任"：节点可以独立验证交易和区块，而不必信任网络中的其他人。

## **数据可用性面临哪些挑战？**

**数据可用性带来的挑战在于：要求节点下载并验证数据会降低吞吐量，而使用链上存储来处理数量日益庞大的信息，会限制能够运行节点基础设施的实体数量。**

单体区块链通过在多个节点上冗余存储状态数据来保证数据可用性，这样需要数据的节点只需向其他节点请求即可。但这种朴素的数据可用性实现方式存在问题。

强制大量网络节点下载、验证并存储相同的数据，会大幅降低区块链的吞吐量。这就是为什么Ethereum每秒只能处理15-20笔交易，而Bitcoin的处理速度约为每秒5-7笔交易。

链上数据存储还会导致区块链体积呈指数级增长，这进一步提高了全节点的硬件要求，因为它们需要存储不断增加的状态数据。

高规格硬件成本的上升，往往会降低愿意运行节点的个人数量，这直接增加了中心化的风险。

### **数据可用性与区块链扩展**

数据可用性在区块链可扩展性方面同样具有重要意义。模块化链通常通过将数据可用性与共识、执行分离来扩展吞吐量。在这种安排下，节点不再需要存储区块链数据，从而消除了上一节所述的部分限制。

尽管如此，网络仍需保证所有区块数据对相关方是可用的。这构成了数据可用性问题的核心："在无法访问整个区块的情况下，我们如何知道每个区块背后的数据已被发布？"

我们将在后面的章节讨论数据可用性问题的解决方案。现在，让我们先探讨"数据可用性层"这一概念及其对区块链的意义。

## **什么是数据可用性层？**

在区块链中，数据可用性层是一个存储区块链数据并对其可用性提供共识的系统。"数据可用性层"指的是交易数据存储的位置。

数据可用性层有两种类型：

### **1. 链上数据可用性层**‍

这是许多区块链采用的标准方式，即数据由执行交易的节点存储在链上。虽然这能确保较高的数据可用性，但会限制去中心化程度和可扩展性。

### 2. **链下数据可用性层**‍

这种方式要求将交易数据存储在原始区块链网络之外。链下数据可用性层可以是另一条区块链，也可以是开发者选择的任何数据存储系统。在这种情况下，数据可用性层专注于存储数据，而非执行。

## **数据可用性层如何帮助Ethereum扩展？**

分片是一种区块链扩展方案，它将一个网络拆分为多条并行运行的子链。每条子链中的节点处理不同的任务，目标是实现计算资源的高效利用。

Ethereum目前的[扩展路线图](https://www.alchemy.com/overviews/ethereum-2-0-your-guide-for-2022)包括实施[数据分片](https://www.alchemy.com/overviews/ethereum-sharding-an-introduction-to-blockchain-sharding)的计划——这是一种由不同节点集群存储不同数据片段的系统。届时将有64条独立运行的分片链，节点只需下载发布到其所分配分片的数据。这意味着全节点不再需要像目前这样存储相同的数据。

<ImageBlock
  src="https://media.alchemy.com/1703771502-shard-chains.jpeg"
  alt="展示 Ethereum 中分片链分布的示意图"
  width={1542}
  height={687}
  caption="分片链"
/>

通过分片，Ethereum将采用多个数据可用性层，而不是将状态数据存储在单一位置。区块不必在整个网络中传播，只需一部分节点来验证每个区块的数据。这直接带来了可扩展性的提升，因为网络将能够更快地处理交易。

此外，将数据分散存储在多个层中，也进一步促进了Ethereum的去中心化。

根据[近期统计数据](https://etherscan.io/chartsync/chaindefault)，全节点目前需要存储整条区块链，大约1TB的数据，但在64个分片运行后，只需存储链上数据的1/64。这有望降低全节点的存储要求，并增加Ethereum上的验证者数量。

## **数据可用性层如何与Rollups协同工作？**

Rollups通过将计算和状态存储从Ethereum的执行环境——[Ethereum虚拟机](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)——中移出，来扩展Ethereum。EVM只接受链下计算的结果，并将其应用到自身状态中，无需重新执行交易，从而提高了处理速度并降低了成本。

Rollups之所以比其他Ethereum扩展方案（包括侧链或Plasma）更安全，是因为它们依赖Ethereum来保证数据可用性。除了在Ethereum上发布交易结果之外，[乐观Rollups](https://www.alchemy.com/overviews/optimistic-rollups)和[零知识Rollups](https://www.alchemy.com/blog/zero-knowledge-rollups)还会以CALLDATA的形式将交易数据发布到Layer 1上。

从Rollup发布到Ethereum的区块数据是公开可用的，任何人都可以执行交易并验证该Rollup链。

这一机制也提升了抗审查能力，因为已发布的数据可供潜在的区块生产者用来重建链的状态并开始生产新区块。由于这一措施，任何单一的Layer 2运营方都无法随意冻结链、审查Rollup上的用户。

在数据可用性层提供安全保障的前提下，Rollups可以专注于优化可扩展性。例如，一个Rollup可以选择更大的区块和更快的出块时间，以提升处理速度。

虽然这提高了对节点的硬件要求（大多数Rollup只有少数几个执行交易的"超级节点"），但状态数据的可用性使任何人都能挑战无效的状态转换，或生产区块以防止审查。

## **数据可用性层如何与模块化区块链协同工作？**

模块化区块链是指专门处理某一特定功能（如执行、共识或数据可用性）的区块链，其余任务则依赖其他区块链和链下系统来完成。模块化区块链技术栈由多个不同的模块化链组成，它们以不同方式协同工作，以实现既定目标。

模块化区块链技术栈中的数据可用性层通常负责存储交易数据，不过它也可能提供关于交易顺序的共识。例如，专注于执行的模块化区块链（如Rollups和validiums）依赖链下数据可用性层来存储状态更新背后的数据。

数据可用性层本身就是一种模块化链，因为它专注于存储数据，并将执行任务外包给其他链。与常规区块链不同，纯粹的数据可用性层不会检查区块生产者所发布数据的有效性。节点只需就交易顺序达成共识，并确认支付了正确的费用。

<ImageBlock
  src="https://media.alchemy.com/1703853301-position-of-data-availability-layer-in-modular-blockchain-stack.jpeg"
  alt="展示数据可用性层在模块化区块链堆栈中所处位置的示意图"
  width={1050}
  height={650}
  caption="展示数据可用性层在模块化区块链技术栈中所处位置的示意图。[来源https://celestia.org/learn/modular-architectures/ ]"
/>

## **数据可用性层对Web3开发者意味着什么？**

独立的数据可用性层的存在，为区块链开发者带来了重要好处，包括更快的开发周期和更低的用户费用。

### **1. 更快的开发周期**

借助数据可用性层，开发新区块链或应用专属链的开发者从一开始就能获得有意义的安全属性。区块链的安全性通常以验证节点的分布情况来衡量，但在早期阶段实现理想的验证者分布是不现实的。

相反，这些新区块链可以专注于执行和结算，同时依靠现有的数据可用性网络来保障安全。因此，即使只有少数节点在执行该链，它们通过发布无效交易和审查用户来作恶的能力也是有限的。

这是因为计算**欺诈证明和有效性证明**（用于验证执行）所需的状态数据被保证是可用的。数据可用性还使同步区块链状态变得更容易，而这正是生产新区块的先决条件。

### **2. 更低的用户费用**

对Ethereum上有限区块空间的竞争推高了交易费用，这对于需要在链上发布大量数据的[去中心化应用](https://www.alchemy.com/dapps/top/defi-dapps)来说并不理想。dApp可以选择在专为数据可用性优化的层上廉价地存储数据，而不是在Ethereum上发布数据。

使用数据可用性层的费用较低，原因有二：一是节点为收回硬件成本所需收取的费用较低；二是数据可用性网络可以增大区块大小，这意味着每个区块可以容纳更多交易。

#### **1. 节点所需硬件成本更低**

节点只关注数据存储，无需为执行交易所需的带宽或硬件进行投资。因此，节点不必为收回硬件投资成本而承受收取高额费用的压力。

#### **2. 数据可用性网络可以增大区块大小**

得益于[数据可用性采样](https://arxiv.org/abs/1809.09044)，数据可用性网络可以在不损害去中心化和安全性的前提下增大区块大小。

数据可用性采样使节点能够随机抽样一个区块的一部分，从而确认其可用性，而无需下载全部数据。对区块空间的竞争较少，意味着在数据可用性区块链上存储数据的平均成本更低。

## **数据可用性方案有哪些不同类型？**

解决数据可用性问题的方法通常分为两类：修改链上数据存储方式，或将数据存储在链下。下面我们来探讨这两类数据可用性方案。

### **1. 改进的链上存储**

改进的链上存储需要改变数据在链上的存储方式，以实现效率和安全性。前文提到的数据分片过程，就是改进链上存储的一种形式。

在分片区块链中，节点只下载并存储发布在特定分片中的数据。换句话说，验证者为一个分片运行全节点，而对其他分片则以轻客户端的方式运作。

这里显而易见的问题是："在不下载其他分片区块的情况下，节点如何确定那些数据是可用的？"

这正是数据可用性采样发挥作用的地方。

#### **什么是数据可用性采样（DAS）？**

数据可用性采样是一种无需下载整个区块即可验证其可用性的机制。节点通过下载区块中随机的部分，来判断其是否可用，从而实施数据可用性采样。

当大量节点对一个区块进行随机采样时，隐藏区块数据的可能性会降低。如果某个节点发现区块的某个片段不可用，它可以发出警报，通知其他节点。

<ImageBlock
  src="https://media.alchemy.com/1703853421-nodes-sampling-a-block.png"
  alt="展示节点通过采样区块（“blob”）来检查其可用性的示意图"
  width={401}
  height={232}
  caption="展示节点通过采样区块（“blob”）来检查其可用性的示意图。[来源：Vitalik Buterin]"
/>

虽然数据可用性采样能够让节点在统计意义上高度确信区块数据是可用的，但它无法完全排除数据扣留攻击的可能性。数据扣留攻击是指区块生产者提议新区块，但并未发布全部交易数据。

即使区块生产者发布了区块的大部分内容，隐藏其中一小部分数据仍会带来安全隐患。设想一下：如果某个Rollup运营方执行了一笔无效交易，将大量用户的代币转移给自己，并扣留发起挑战所需的数据，会怎样？

为了获得更高的安全保障、防范数据扣留，我们[将数据可用性采样与纠删码结合使用](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding)。

#### **什么是纠删码？**

纠删码是一种用于提高数据完整性和可用性的密码学基础技术，它通过为数据集添加冗余片段（称为纠删码）使其翻倍，从而使得这些冗余片段的任意组合都能帮助恢复原始数据。

[Ethereum中的分片链](https://www.alchemy.com/overviews/danksharding)使用"blob"（二进制大对象）来发布交易数据，其性质类似于区块。在发布blob之前，区块生产者必须通过纠删码对原始数据进行扩展。这样一来，任何人只需获取部分纠删码，就能重建整个区块。

纠删码使数据扣留攻击更难以实施。对于经过纠删码处理的区块，节点只需一小部分数据即可恢复原始数据。因此，区块生产者若想成功隐藏数据，就需要隐藏整个数据集中的很大一部分——超过50%。

### **2. 链下数据存储**

链下数据存储是指将数据存储在其他地方，以避免给节点带来负担。链下数据存储方案分为两类：数据可用性委员会（DAC）和数据可用性网络。

#### **1. 数据可用性委员会（DAC）**

数据可用性委员会（DAC）是由一组被授权的实体组成的集合，负责离线保存区块链数据的副本。DAC通常由受信任、被指定担任此角色的实体组成。

区块生产者在进行状态转换时，需要将交易数据发送给DAC成员。这降低了中心化风险，因为DAC可以向用户提供数据——尤其是在区块生产者开始作恶时。

[Validiums](https://www.alchemy.com/overviews/ethereum-scaling-solutions)是一种与ZK-rollups类似的Ethereum扩展方案，它使用DAC来保证数据可用性。除了计算零知识证明以验证交易批次外，区块提议者还必须获得DAC成员的证明（签名）。这一"可用性证明"与有效性证明一起，在Ethereum上经过验证后，新的交易批次才会被接受。

使用DAC的项目示例包括DiversiFi和ImmutableX。

虽然数据可用性委员会在一定程度上有助于解决数据可用性问题，但它们也存在一些缺陷。DAC的规模通常较小，这使得恶意行为者容易攻陷整个群体。而且由于DAC成员是"受信任"的实体，目前并没有相应的机制来惩罚其不当行为。

#### 2. 数据可用性网络

数据可用性网络旨在使区块链数据的存储过程去中心化，并消除信任假设。数据可用性网络与数据可用性委员会类似，但存在三个关键区别：[无需许可](https://www.alchemy.com/overviews/permissionless-vs-permissioned-blockchains)的架构、无需信任性，以及容错能力。

##### **无需许可的架构**

数据可用性网络通常是一条专门用于交易排序和数据存储的区块链。

**Celestia**和**Polygon Avail**等数据可用性网络采用权益证明系统，允许任何人成为数据可用性管理者。要做到这一点，用户只需投入所需的质押金即可开始参与该区块链。

##### **无需信任性**

权益证明数据可用性网络利用加密经济激励来确保节点诚实行事。每个负责存储数据的节点都必须在智能合约中质押一定资金，如果未能按要求提供数据，这些资金就会被罚没。这一特性消除了数据可用性委员会所存在的信任假设。

##### **容错能力**

权益证明数据可用性网络的参与者集合通常比数据可用性委员会更庞大。这使得恶意行为者更难攻陷整个群体，实施数据扣留攻击。

<ImageBlock
  src="https://media.alchemy.com/1703853524-architecture-of-polygon-avail-data-availability-network.png"
  alt="展示 Polygon Avail 数据可用性网络架构的示意图。"
  width={1053}
  height={787}
  caption="展示 Polygon Avail 数据可用性网络架构的示意图。"
/>

## 结论

数据可用性在保证区块链保持功能性和安全性方面起着关键作用。尤其是在模块化区块链的语境下，数据可用性层为实现有意义的去中心化和安全性提供了基础。

Ethereum的[未来扩展计划](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698)同样依赖于其数据存储能力。Rollups受限于父链上的数据吞吐量，这也是引入数据分片以及其他升级、以提升Ethereum作为Layer 2解决方案的数据可用性层性能的原因所在。
