“數據可得性(data availability)”和“數據可得性問題”指的是一些區塊鏈擴容方案所面臨一個問題。具體來說,就是當新的區塊創建時,節點如何確保該區塊中的所有數據都已發布到網路上?困難之處在于,如果區塊生產者沒有公布區塊中的所有數據,就沒人能發現該區塊中是否隱藏了惡意交易,
在本文中,我將深入探討數據可得性問題的重要性,以及相關解決方案,
區塊鏈節點是如何運行的?
區塊鏈上的每個區塊都由兩部分組成:
區塊頭,即,區塊的元數據,由一些關于區塊內容的基本資訊組成,包括交易的默克爾根。
交易數據,即,區塊的主要組成部分,由實際的交易數據組成。
區塊鏈網路中主要有兩類節點:
全節點(又稱完全驗證節點),這類節點會下載區塊鏈中的每筆交易并驗證其有效性。這需要消耗大量資源和數百 GB 的磁盤空間,但是這些節點的安全性最高,因為它們不會接受包含無效交易的區塊,
輕客戶端,如果你的計算機沒有足夠的資源來運行全節點,你可以運行輕客戶端。輕客戶端不需要下載或驗證任何交易,它們只下載區塊頭,并認定區塊中包含的交易都是有效的。因此,輕客戶端的安全性低于全節點。
幸運的是,有一種方法可以讓輕客戶端間接檢查區塊中的所有交易是否有效。輕客戶端可以依賴全節點向其發送關于無效交易的 欺詐證明,無需自己檢查交易的有效性。欺詐證明是一個很小的證明,可以證明區塊中的某個交易是無效的。關于欺詐證明的運作原理,本文不做具體介紹,請閱讀這篇文章。
這里只有一個問題:全節點如果要為某個區塊生成欺詐證明,需要知道該區塊的交易數據。如果區塊生產者只公布區塊頭,沒有公布交易數據的話,全節點就無法驗證交易的有效性,并針對無效交易生成欺詐證明了,這就要求區塊生產者公布區塊的所有數據,但是我們需要找到一種方法來強制實行,
為了解決這個問題,輕客戶端需要找到某種方法來檢查區塊的交易數據是否真的發布到了網路上,以便全節點進行驗證。然而,我們又要避免讓輕客戶端下載整個區塊,因為這會使得輕客戶端喪失存在的意義。
我們該如何解決這一問題?首先,我們先來討論數據可得性問題的相關性,以及如何采取解決措施,
數據可得性問題與哪些方案有關
在上一節中,我們介紹了數據可得性問題,讓我們來討論一下它對可擴展性解決方案的重要性。
增加區塊大小
在比特幣等區塊鏈中,絕大部分一般的手提電腦都能運行全節點并驗證整條鏈,因為存在人為規定的區塊大小上限,來防止區塊鏈變得過大,
但是,如果我們想要增加區塊大小上限該怎么辦?那就只有更人才能負擔得起運行全節點并獨立驗證區塊鏈的成本,大多數人都會運行安全性更低的輕客戶端。這并不利于去中心化,因為這會讓區塊生產者更容易更改協議規則,插入無效交易來欺騙輕客戶端,因此,為輕客戶端提供欺詐證明支持很重要,但是正如我們已經討論過的,輕客戶端需要一種方法來驗證區塊中的所有數據是否都已發布至網路。
分片
提高區塊鏈吞吐量的一種方法是,將區塊鏈分成多條鏈,即,分片,這些分片都有自己的區塊生產者,而且可以相互通信,以便在分片之間轉移代幣。分片的意義在于,將網路中的區塊生產者分組,這樣就不需要每個區塊生產者處理每個交易,只需將他們分散到不同的分片上即可。每個分片只需處理部分交易。
通常來說,在分片式區塊鏈上,驗證者只需要為一個或少數幾個分片運行全節點,并為其它分片運行輕客戶端,畢竟,如果每個驗證者都要為每個分片運行一個全節點,就無法實現分片的目的 —— 將網路的開銷分割給不同節點,
然而,這種方法本身存在缺陷。如果分片上的區塊生產者作惡,開始接受無效交易怎么辦?相比非分片式系統,分片式系統更有可能發生這種情況,因為后者的每個分片上只有少量區塊生產者,攻擊起來更容易,請記住,區塊生產者會被不斷分配到不同的分片上,
為便于察覺是否存在分片接受無效交易的情況,我們必須確保分片中的所有數據都是公開可得的,以便使用欺詐證明來證明所有無效交易。
Rollup
Optimistic rollup 是一種基于 rollup 側鏈(類似分片)的新型可擴展性策略。這些側鏈有自己專屬的區塊生產者,可與其它側鏈互相轉移資產。
但是,如果有惡意的區塊生產者將無效交易打包進區塊,將側鏈上所有用戶的資金盜走怎么辦?為解決這一問題,我們可以使用欺詐證明來發現這種情況。但是,還是那個老問題,側鏈用戶需要找到某種方法來確保側鏈上所有區塊的數據都公開可見,以便發現無效交易,為了解決這一問題,以太坊上的 Rollup 將所有 rollup 區塊都發布到以太坊區塊鏈上,依賴以太坊來實現數據可得性。也就是說,將以太坊作為數據可得性層,
ZK-rollup 與 optimistic rollup 類似,區別在于,前者并非使用欺詐證明來發現無效區塊,而是使用有效性證明來證明區塊的有效性。有效性證明本身不需要數據可得性。然而,總的來說,ZK-rollup 需要數據可得性,因為如果區塊生產者創建了一個有效區塊,并為其生成有效性證明,卻沒有公布區塊數據,用戶就無法知道區塊鏈的狀態以及他們的余額,也就無法與區塊鏈進行交互。
進一步探索
rollup 的設計旨在將區塊鏈作為數據可得性層來存儲交易,但是實際的交易處理和計算都發生在 rollup 上,這是一種很有趣的思路:區塊鏈實際上不需要進行任何計算,但是至少需要將交易分裝到區塊中,并確保交易的數據可得性,
這也是 LazyLedger 的設計思路,即,一種“懶惰的”區塊鏈,只需要完成區塊鏈的兩個核心任務 —— 通過可擴展方式對交易進行排序,并實現交易的數據可得性。這使得 LazyLedger 成為 rollup 等系統中的最小“可拔插”組件。
數據可得性問題的解決方案
下載所有數據
正如上文所討論的那樣,解決數據可得性問題的最直接方法就是,要求所有人(包括輕客戶端)下載所有數據,顯然,這種方法不具備良好的可擴展性,比特幣和以太坊等大多數區塊鏈均采用這種方法,
數據可得性證明
數據可得性證明是一種新技術:客戶端只需下載區塊中的一小部分數據,即可檢查該區塊中所有數據是否均已發布,
數據可得性證明采用了一種被稱為糾刪碼的數學元件,糾刪碼被廣泛應用到了從 CD-ROM 到衛星通信再到二維碼等資訊技術中,糾刪碼可以將原本 1 MB 的區塊數據擴充成 2MB,其中多出的 1 MB 就是叫做糾刪碼的特殊數據,如果區塊中的任何字節丟失,糾刪碼都可以幫你找回它們,即使整個區塊的數據丟失, 糾刪碼也可以幫你找回所有數據。同樣地,有了糾刪碼,即使 CD-ROM 中的數據都被擦除,你的計算機也可以讀取到(譯者注:糾刪碼并不能幫你節約帶寬,假設 1MB 的數據被擴充成了 2 MB,你仍然需要獲得至少 1MB 的數據才能恢復出原始數據,雖然并不要求這 1 MB 的數據是連續的),
這就意味著,要實現 100% 的數據可得性,區塊生產者只需將區塊中 50% 的數據發布到網路上,如果惡意區塊生產者想要成功隱瞞 1% 的數據,就必須隱瞞超過 50% 的數據,否則這 1% 的數據可以通過剩下 50% 的數據找回(譯者注:此段第一句存疑),
有了這個知識,客戶端就能采取措施來確保區塊中的數據不會被隱藏,客戶端可以嘗試隨機下載區塊切分而成的數據塊,如果他們未能成功下載數據塊(即表明,該數據塊屬于惡意區塊生產者未公開的那 50% 的數據),它們就會拒絕承認該區塊的數據可得性。如果下載一個隨機數據塊,客戶端就有 50% 的概率發現無效區塊,如果下載兩個數據塊,就有 75% 的概率。如果下載三個數據塊,就有 87.5% 的概率。以此類推,直到下載七個數據塊之后,就有 99% 的概率,通過這種方式,客戶端只需下載區塊中的一小部分數據,即可有效檢查整個區塊的數據可得性。
數據可得性證明的全部細節會更復雜一些,而且依賴于其它假設,例如,網路中的輕客戶端數量不能低于某個下限,這樣就有足夠多的輕客戶端請求數據塊,以便恢復整個區塊的數據。如果你想了解更多資訊,可以查看關于數據可用性證明的論文。
結論
在本文中,我們介紹了數據可用性問題,討論了數據可用性對區塊鏈可擴展性的重要性,并提出了解決方案,
如果你想了解更多資訊,請查看以下資料:
John Adler’s whiteboard session about fraud and data availability proofs
Original fraud and data availability proofs paper
Coded Merkle Trees paper on an alternative data availability scheme
Ethereum Research wiki post on the data availability problem
(完)
(文內有許多超鏈接,可點擊左下 ”閱讀原文“ 從 EthFans 網站上獲取)
原文鏈接:
https://coinmarketcap.com/alexandria/article/what-is-data-availability
作者: Mustafa Al-Bassam
翻譯&校對: 閔敏 & 阿劍