---
title: "什麼是資料可用性層(data availability layer)?"
description: "在後合併(post-Merge)時代的 Ethereum 環境中,模組化區塊鏈的資料可用性層是什麼、如何運作,以及為何重要"
---

# 什麼是資料可用性層(data availability layer)?

[模組化與單體區塊鏈](https://www.alchemy.com/overviews/modular-vs-monolithic-blockchains)的核心任務包括執行交易、對交易排序達成共識，以及保證交易資料的可用性。最後這部分——資料可用性——對區塊鏈至關重要，也是本文的重點。

資料可用性指的是，區塊鏈網路中的節點都能取得所有與交易相關的資料。資料可用性之所以重要，是因為它讓節點能夠獨立驗證交易並計算區塊鏈的狀態，而不需要彼此互相信任。

本指南將詳細說明資料可用性的意涵，以及為何解決「資料可用性問題」如此重要。你也會了解資料可用性層在擴展區塊鏈上扮演的角色，以及針對資料可用性問題所提出的各種解決方案。

## **資料可用性代表什麼？**

區塊鏈中的資料可用性，指的是節點能夠下載透過點對點網路傳播的所有區塊中所包含的資料的能力。要理解資料可用性，必須先掌握目前區塊鏈的區塊驗證流程。

### **區塊驗證如何運作？**

首先，**區塊生產者**會：

1. 從[記憶體池](https://www.alchemy.com/overviews/what-is-a-mempool)中取出交易
1. 用這些交易產生新區塊
1. 將新區塊廣播至 P2P 網路，以加入鏈中

在 Proof-of-Work 網路中，區塊生產者稱為「礦工」；在 Proof-of-Stake 網路中，則稱為「驗證者」。

接著，**驗證節點**（又稱[全節點](https://www.alchemy.com/overviews/archive-nodes)）會：

1. 從新提出的區塊下載交易
1. 重新執行交易，以確認是否符合共識規則
1. 一旦網路認定該區塊有效，就將其加入鏈的最前端

以下圖示以 Bitcoin 為例，說明區塊驗證的過程：

<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 擴展？**

分片（Sharding）是一種區塊鏈擴展方法，做法是將網路拆分為多條並行運作的子鏈。每條子鏈中的節點處理不同的任務，目標是有效利用運算資源。

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 Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)——中移出，來擴展 Ethereum。EVM 只接受鏈下運算的結果，並將其套用至自身狀態，而不需重新執行交易，藉此提升處理速度並降低成本。

相較於側鏈或 Plasma 等其他 Ethereum 擴展方案，Rollups 之所以更安全，關鍵在於它們依賴 Ethereum 來確保資料可用性。除了在 Ethereum 上發佈交易結果外，[optimistic rollups](https://www.alchemy.com/overviews/optimistic-rollups) 和 [zero-knowledge rollups](https://www.alchemy.com/blog/zero-knowledge-rollups) 也會以 CALLDATA 的形式將交易資料發佈至 Layer 1。

從 Rollup 發佈到 Ethereum 的區塊資料是公開可取得的，任何人都能執行交易並驗證該 Rollup 鏈。

這也促進了抗審查性，因為未來想成為區塊生產者的人可以利用已發佈的資料重建鏈的狀態，並開始生產新區塊。由於這項機制，沒有任何單一 Layer 2 營運方能夠任意凍結該鏈或審查 Rollup 上的使用者。

由於資料可用性層提供了安全性，Rollups 可以將重心放在優化擴展性上。舉例來說，Rollup 可以選擇較大的區塊與較快的出塊時間，以加快處理速度。

雖然這會提高節點的硬體需求（大多數 Rollups 只有少數幾個「超級節點」負責執行交易），但狀態資料的可用性讓任何人都能質疑無效的狀態轉換，或生產區塊以防止審查。

## **資料可用性層如何與模組化區塊鏈搭配運作？**

模組化區塊鏈是指專門處理某項特定功能——例如執行、共識或資料可用性——並依賴其他區塊鏈與鏈下系統來完成其餘任務的區塊鏈。模組化區塊鏈堆疊由多條模組化鏈組成，這些鏈以不同方式協同運作，以達成既定目標。

在模組化區塊鏈堆疊中，資料可用性層通常負責儲存交易資料，不過它也可能對交易排序提供共識。舉例來說，專注於執行的模組化區塊鏈（例如 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. 更快的開發週期**

開發者在推出新的區塊鏈或應用專屬鏈時，只要使用資料可用性層，從一開始就能取得有意義的安全性。區塊鏈的安全性通常以驗證節點的分佈情況來衡量，但在早期階段就達到理想的驗證者分佈並不現實。

相反地，這些新區塊鏈可以專注於執行與結算，同時依賴既有的資料可用性網路來提供安全性保障。因此，即使只有少數節點在執行該鏈，這些節點透過發佈無效交易或審查使用者來從事惡意行為的能力也會受到限制。

這是因為驗證執行所需的**詐欺證明（fraud proofs）與有效性證明（validity proofs）**所需的狀態資料，能保證是可取得的。資料可用性也讓同步至區塊鏈狀態變得更容易，而這正是生產新區塊的必要條件。

### **2. 更低廉的使用者費用**

Ethereum 上有限的區塊空間競爭激烈，推高了交易費用，這對於需要在鏈上發佈大量資料的[去中心化應用程式](https://www.alchemy.com/dapps/top/defi-dapps)來說並不理想。與其在 Ethereum 上發佈資料，dApp 可以選擇將資料低成本地儲存在專為資料可用性優化的層級上。

使用資料可用性層的費用之所以較低，有兩個原因：節點所需收取的費用較低，即可回收硬體支出；此外，資料可用性網路能夠增加區塊大小，這意味著單一區塊能納入更多交易。

#### **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 營運方執行了一筆無效交易，將大量使用者的代幣轉移給自己，並扣留質疑所需的資料，會發生什麼事？

為了對資料扣留提供更高的安全保證，我們會[將資料可用性抽樣與糾刪碼（erasure coding）結合使用](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding)。

#### **什麼是糾刪碼（Erasure Coding）？**

糾刪碼是一種用於提升資料完整性與可用性的密碼學基元，做法是透過加入冗餘片段（稱為糾刪碼）將資料集加倍，如此一來，這些冗餘片段的任何組合都能協助還原原始資料。

[Ethereum 中的分片鏈](https://www.alchemy.com/overviews/danksharding)會使用「blob」（二進位大型物件）來發佈交易資料，其性質與區塊類似。在發佈 blob 之前，區塊生產者必須先透過糾刪碼擴充原始資料。如此一來，任何人只要取得部分糾刪碼，就能重建整個區塊。

糾刪碼讓資料扣留攻擊變得更加困難。對於經過糾刪碼處理的區塊，節點只需一小部分資料即可還原原始資料。因此，區塊生產者若想成功隱藏資料，就必須隱藏整個資料集的一大部分——超過 50%。

### **2. 鏈下資料儲存**

鏈下資料儲存指的是將資料儲存在其他地方，以避免加重節點的負擔。鏈下資料儲存解決方案主要有兩種：資料可用性委員會（DAC）與資料可用性網路。

#### **1. 資料可用性委員會（DACs）**

資料可用性委員會（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. 資料可用性網路

資料可用性網路旨在將儲存區塊鏈資料的流程去中心化，並消除信任假設。資料可用性網路與資料可用性委員會相似，但有三個關鍵差異：[無需許可（permissionless）](https://www.alchemy.com/overviews/permissionless-vs-permissioned-blockchains)架構、無需信任，以及容錯能力。

##### **無需許可架構**

資料可用性網路通常是一條專門用於交易排序與資料儲存的區塊鏈。

像 **Celestia** 與 **Polygon Avail** 這類資料可用性網路，採用 Proof-of-Stake 系統，讓任何人都能成為資料可用性管理者。使用者只需質押所需的資金，即可開始參與該區塊鏈。

##### **無需信任**

Proof-of-Stake 資料可用性網路利用加密經濟誘因，確保節點誠實行事。每個負責儲存資料的節點都必須在智能合約中質押一定資金，若未能在被要求時提供資料，這筆資金就會被罰沒。這項機制消除了資料可用性委員會所存在的信任假設。

##### **容錯能力**

Proof-of-Stake 資料可用性網路的參與規模，通常比資料可用性委員會來得更大。這使得惡意行為者更難滲透整個群體並進行資料扣留攻擊。

<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 解決方案資料可用性層的效能。
