---
title: "資料可用性"
description: "以太坊中與資料可用性相關的問題與解決方案概述"
lang: zh-tw
---

「不要信任，要驗證」是以太坊中常見的格言。其理念是，你的節點可以透過執行從對等節點接收到的區塊中的所有交易，來獨立驗證其接收到的資訊是否正確，以確保提議的變更與節點獨立計算的變更完全一致。這意味著節點不需要信任區塊發送者是誠實的。如果資料遺失，這是不可能的。

<strong>資料可用性</strong>是指使用者可以確信驗證區塊所需的資料確實可供所有網路參與者使用。對於[以太坊](/)第一層 (L1) 上的全節點來說，這相對簡單；全節點會下載每個區塊中所有資料的副本——資料*必須*可用才能進行下載。遺失資料的區塊將被丟棄，而不會被新增至區塊鏈中。這就是「鏈上資料可用性」，也是單體區塊鏈的一個特徵。全節點不會被欺騙去接受無效交易，因為它們會自行下載並執行每一筆交易。然而，對於模組化區塊鏈、第二層 (L2) 匯總和輕客戶端而言，資料可用性的情況更為複雜，需要一些更精密的驗證程序。

## 先決條件 {#prerequisites}

你應該對[區塊鏈基礎知識](/developers/docs/intro-to-ethereum/)有良好的理解，特別是[共識機制](/developers/docs/consensus-mechanisms/)。本頁面也假設讀者熟悉[區塊](/developers/docs/blocks/)、[交易](/developers/docs/transactions/)、[節點](/developers/docs/nodes-and-clients/)、[擴容解決方案](/developers/docs/scaling/)以及其他相關主題。

## 資料可用性問題 {#the-data-availability-problem}

資料可用性問題是指需要向整個網路證明，正在新增至區塊鏈的某些交易資料的摘要形式確實代表了一組有效交易，但這樣做時不要求所有節點下載所有資料。完整的交易資料對於獨立驗證區塊是必要的，但要求所有節點下載所有交易資料是擴容的障礙。資料可用性問題的解決方案旨在提供充分的保證，確保完整的交易資料已提供給那些不自行下載和儲存資料的網路參與者進行驗證。

[輕節點](/developers/docs/nodes-and-clients/light-clients)和[第二層 (L2) 匯總](/developers/docs/scaling)是需要強大資料可用性保證，但無法自行下載和處理交易資料的網路參與者的重要範例。避免下載交易資料正是輕節點之所以「輕」的原因，也是使匯總成為有效擴容解決方案的關鍵。

資料可用性對於未來不需要下載和儲存狀態資料即可驗證區塊的[「無狀態」](/roadmap/statelessness)以太坊客戶端來說，也是一個關鍵問題。無狀態客戶端仍然需要確定資料在*某處*是可用的，並且已經被正確處理。

## 資料可用性解決方案 {#data-availability-solutions}

### 資料可用性抽樣 (DAS) {#data-availability-sampling}

資料可用性抽樣 (DAS) 是網路檢查資料是否可用的一種方式，而不會對任何單一節點造成太大負擔。每個節點（包括非質押節點）都會下載總資料中隨機選擇的一小部分子集。成功下載樣本可以高度確信所有資料都是可用的。這依賴於資料糾刪碼，它使用冗餘資訊來擴展給定的資料集（其做法是將一種稱為*多項式*的函數擬合到資料上，並在額外的點上評估該多項式）。這允許在必要時從冗餘資料中恢復原始資料。這種資料建立方式的結果是，如果*任何*原始資料不可用，*一半*的擴展資料將會遺失！每個節點下載的資料樣本數量可以進行調整，使得*如果*實際可用的資料少於一半，每個客戶端抽樣的資料片段中*極有*可能至少有一個會遺失。

在實施[完整丹克分片](/roadmap/danksharding/#what-is-danksharding)之後，DAS 將用於確保匯總營運商使其交易資料可用。以太坊節點將使用上述冗餘方案，對資料塊中提供的交易資料進行隨機抽樣，以確保所有資料都存在。同樣的技術也可以用來確保區塊生產者提供其所有資料，以保護輕客戶端。同樣地，在[提案者與建構者分離](/roadmap/pbs)機制下，只有區塊構建者會被要求處理整個區塊——其他驗證者將使用資料可用性抽樣進行驗證。

### 資料可用性委員會 {#data-availability-committees}

資料可用性委員會 (DAC) 是提供或證明資料可用性的受信任方。DAC 可以替代 DAS，[或與之結合使用](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS)。委員會帶來的安全保證取決於具體的設定。例如，以太坊使用隨機抽樣的驗證者子集來為輕節點證明資料可用性。

一些 validium 也使用 DAC。DAC 是一組受信任的節點，它們在離線狀態下儲存資料副本。在發生爭議時，DAC 被要求提供資料。DAC 成員也會發布鏈上證明，以證明上述資料確實可用。一些 validium 使用權益證明 (PoS) 驗證者系統來取代 DAC。在這裡，任何人都可以成為驗證者並在鏈下儲存資料。然而，他們必須提供一筆「保證金」，該保證金存放在智能合約中。如果發生惡意行為，例如驗證者隱瞞資料，保證金可能會被罰沒。權益證明資料可用性委員會比一般的 DAC 安全得多，因為它們直接激勵誠實行為。

## 資料可用性與輕節點 {#data-availability-and-light-nodes}

[輕節點](/developers/docs/nodes-and-clients/light-clients)需要驗證其接收到的區塊頭的正確性，而無需下載區塊資料。這種輕量化的代價是無法像全節點那樣，透過在本地重新執行交易來獨立驗證區塊頭。

以太坊輕節點信任被分配到*同步委員會*的 512 名隨機驗證者集合。同步委員會充當 DAC，使用密碼學簽章向輕客戶端發出訊號，表明區塊頭中的資料是正確的。同步委員會每天都會更新。每個區塊頭都會提醒輕節點預期哪些驗證者會簽署*下一個*區塊，因此它們不會被欺騙去信任假冒真實同步委員會的惡意群體。

然而，如果攻擊者以某種方式*確實*成功地將惡意區塊頭傳遞給輕客戶端，並說服它們該區塊頭是由誠實的同步委員會簽署的，會發生什麼事？在這種情況下，攻擊者可以包含無效交易，而輕客戶端會盲目接受它們，因為它們不會獨立檢查區塊頭中總結的所有狀態變更。為了防範這種情況，輕客戶端可以使用欺詐證明。

這些欺詐證明的工作方式是，當全節點看到網路上正在傳播無效的狀態轉換時，它可以快速產生一小段資料，證明提議的狀態轉換不可能由給定的一組交易產生，並將該資料廣播給對等節點。輕節點可以接收這些欺詐證明，並使用它們來丟棄不良的區塊頭，確保它們與全節點留在同一條誠實的鏈上。

這依賴於全節點能夠存取完整的交易資料。廣播不良區塊頭且未能提供交易資料的攻擊者，將能夠阻止全節點產生欺詐證明。全節點可能可以發出關於不良區塊的警告，但它們無法用證明來支持其警告，因為沒有提供可用於產生證明的資料！

這個資料可用性問題的解決方案是 DAS。輕節點下載完整狀態資料的極小隨機區塊，並使用這些樣本來驗證完整的資料集是否可用。在下載 N 個隨機區塊後，錯誤假設完整資料可用性的實際可能性是可以計算的（[對於 100 個區塊，機率是 10^-30](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html)，即極不可能）。

即使在這種情況下，僅隱瞞幾個位元組的攻擊也可能不會被發出隨機資料請求的客戶端注意到。糾刪碼透過重建可用於檢查提議狀態變更的遺失小資料片段來解決這個問題。然後可以使用重建的資料建構欺詐證明，防止輕節點接受不良的區塊頭。

**注意：** DAS 和欺詐證明尚未在權益證明以太坊輕客戶端中實施，但它們已在路線圖上，最有可能採用基於零知識簡短非互動式知識論證 (ZK-SNARK) 的證明形式。今天的輕客戶端依賴於一種 DAC 形式：它們驗證同步委員會的身分，然後信任它們接收到的已簽署區塊頭。

## 資料可用性與第二層 (L2) 匯總 {#data-availability-and-layer-2-rollups}

[第二層 (L2) 擴容解決方案](/layer-2/)（例如[匯總](/glossary/#rollups)）透過在鏈下處理交易來降低交易成本並提高以太坊的吞吐量。匯總交易被壓縮並分批發布在以太坊上。批次代表以太坊上單筆交易中的數千筆獨立鏈下交易。這減少了基礎層的擁塞並降低了使用者的費用。

然而，只有在提議的狀態變更可以被獨立驗證，並確認是應用所有獨立鏈下交易的結果時，才有可能信任發布到以太坊的「摘要」交易。如果匯總營運商不提供交易資料以供此驗證，那麼他們可能會向以太坊發送不正確的資料。

[樂觀匯總](/developers/docs/scaling/optimistic-rollups/)將壓縮的交易資料發布到以太坊，並等待一段時間（通常為 7 天），以允許獨立驗證者檢查資料。如果任何人發現問題，他們可以產生欺詐證明並用它來挑戰匯總。這將導致鏈回滾並忽略無效區塊。這只有在資料可用時才有可能。目前，樂觀匯總有兩種將交易資料發布到第一層 (L1) 的方式。一些匯總將資料作為永久存在於鏈上的 `CALLDATA` 永久提供。隨著 EIP-4844 的實施，一些匯總改為將其交易資料發布到更便宜的資料塊儲存中。這不是永久儲存。獨立驗證者必須在資料從以太坊第一層 (L1) 刪除之前的約 18 天內查詢資料塊並提出挑戰。以太坊協定僅在該短暫的固定視窗內保證資料可用性。在此之後，它就成為以太坊生態系統中其他實體的責任。任何節點都可以使用 DAS 驗證資料可用性，即透過下載資料塊資料的小型隨機樣本。

[零知識 (ZK) 匯總](/developers/docs/scaling/zk-rollups)不需要發布交易資料，因為[零知識有效性證明](/glossary/#zk-proof)保證了狀態轉換的正確性。然而，資料可用性仍然是一個問題，因為如果無法存取其狀態資料，我們就無法保證 ZK 匯總的功能（或與之互動）。例如，如果營運商隱瞞有關匯總狀態的詳細資訊，使用者就無法知道他們的餘額。此外，他們無法使用新新增區塊中包含的資訊來執行狀態更新。

## 資料可用性與資料可檢索性 {#data-availability-vs-data-retrievability}

資料可用性不同於資料可檢索性。資料可用性是保證全節點能夠存取並驗證與特定區塊相關的完整交易集。這並不一定意味著資料永遠可存取。

資料可檢索性是指節點從區塊鏈中檢索*歷史資訊*的能力。驗證新區塊不需要這些歷史資料，只有在從創世區塊同步全節點或處理特定的歷史請求時才需要它。

核心以太坊協定主要關注資料可用性，而不是資料可檢索性。資料可檢索性可以由第三方營運的少數歸檔節點提供，或者可以使用去中心化檔案儲存（例如[波特爾網路](https://www.ethportal.net/)）分佈在整個網路中。

## 進一步閱讀 {#further-reading}

- [什麼是資料可用性？](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f)
- [什麼是資料可用性？](https://coinmarketcap.com/academy/article/what-is-data-availability)
- [資料可用性檢查入門](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html)
- [分片 + DAS 提案的解釋](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling)
- [關於資料可用性與糾刪碼的說明](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#can-an-attacker-not-circumvent-this-scheme-by-releasing-a-full-unavailable-block-but-then-only-releasing-individual-bits-of-data-as-clients-query-for-them)
- [資料可用性委員會。](https://medium.com/starkware/data-availability-e5564c416424)
- [權益證明資料可用性委員會。](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf)
- [資料可檢索性問題的解決方案](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding)
- [資料可用性，或：匯總如何學會停止擔憂並愛上以太坊](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum)
- [EIP-7623：增加呼叫資料成本](https://web.archive.org/web/20250515194659/https://research.2077.xyz/eip-7623-increase-calldata-cost)