讀懂這篇文章,讀懂區塊鏈基礎設施未來發展。

封面: Photo by Shubham Dhage on Unsplash

前言

  • 縱觀整個區塊鏈的技術發展,大部分技術難題以及解決方案都在圍繞一個中心思想發展- 怎麼在不可能三角(性能,安全,去中心化) 中找尋平衡,這裡要討論的模塊化與數據可用性問題也不出其右。
此图片的alt属性为空;文件名为x432fIehdA9UtsRYfpYA8.webp
The Blockchain Trilemma

TL;DR

  • 模塊化的出現不是突然,而是必然。
  • 數據可用性保證對輕節點與 Rollup 的安全性至關重要。
  • 數據可用性擴容對於 L1 的吞吐量和費率都將產生巨大影響。
  • 以太坊, Celestia 和 Polygon Avail 等項目都在持續著數據有效性項目的研發。

單體化 (Monolithic) 區塊鏈

什麼是單體化區塊鏈

  • 單體化架構的區塊鏈可以理解為全節點需要同時處理網絡內所有類型的工作,這裡的工作類型我們抽象為三部分-   執行 (Execution), 共識 (Consensus), 數據可用性 (Data Availability)。單體化和模塊化是相對概念,也是工程學發展的一種必然趨勢。

單體化區塊鏈工作流程

  • 用戶發送交易至節點
  • 節點驗證交易的有效性,執行交易,狀態轉換,如果有效則並放入內存池進行廣播,否則拋棄交易回滾狀態-  執行 (Execution)
  • 節點生成區塊頭,從內存池中選擇一組交易,排序並放入區塊,生成區塊體,將區塊存儲到本地-  共識 (Consensus), 數據可用性 (DA)
  • 網絡通過自己的共識機制挑選出塊節點,出塊節點廣播自己的本地最新區塊-  共識 (Consensus)
  • 網絡內其它節點收到區塊後檢查本地是否已經有了,沒有的話需要重新驗證交易的有效性與可用性, 並將此區塊存儲到本地-  執行 (Execution), 數據可用性 (DA)
  • 網絡內節點達成最終性 (Finality) 後此區塊成為鏈上最新區塊

模塊化 (Modular) 區塊鏈

此图片的alt属性为空;文件名为iNL6SWNNJaF7wm5KjG2P1.webp
Ethereum From Monolithic To Modular

為什麼要解耦單體化區塊鏈?

  • 區塊鏈作為執行狀態機複製 (SMR)的分佈式網絡,理論上就可以被分為數據,執行,共識等層級。單體化區塊鏈遵循了 SMR 的設計,只是將所有層級的工作都放在了同一個節點 (全節點) 上執行。比特幣,以太坊等項目都證實了其工程上的可行性。
  • 回到不可能三角問題,擴容已經成了整個行業的聖杯。從比特幣開始,區塊鏈就不是科學上的創新,而是工程學上的創新。從單體化到模塊化基本是工程學的發展規律,可以看一下現在的擴容技術,基本每一種都有很強的模塊化趨勢,或是走在模塊化的道路上,看似模塊化的出現是因為現前擴容的需求,實則模塊化的出現是必然

什麼是模塊化區塊鏈?

  • 模塊化區塊鍊是按照執行,共識/結算與數據可用性這樣的模塊粒度來進行解耦的區塊鏈設計模式,每個層級由不同的網絡進行維護,各層級充分發揮自身網絡特性,最後通過可拔插的組合形成流水線的工作方式。
  • 執行層突出強大和快速的計算處理能力,拋開共識和存儲的束縛,可以通過非常少量的高性能節點來完成工作。
  • 共識層需要保證交易的公正有效與安全,選出最符合網絡共識要求的區塊。共識層需要滿足優秀的共識性與去中心化性。Polygon 做過一個比喻,當你刷信用卡的時候,你的交易記錄是先存放在信用卡中心的,信用卡中心會定期將一批信用卡交易記錄發給銀行,銀行來確認交易的可用性並對賬目進行記錄更改。顯然你不會因為信用卡中心的確認速度更快而把錢直接存到信用卡中心,因為銀行才是金融體系內負責結算的角色,它有足夠的信用背書,也有足夠大的體量防止被攻擊。
  • 數據可用性層需要保證數據在保存前沒有被二次篡改或者隱藏扣留,確保所有需要記錄的交易信息都被正確的記錄,數據可用性層的要求比較綜合,需要共識性與不錯的儲存能力。在單體化區塊鏈中沒有數據有效性問題,因為數據被節點記錄之前都會重新執行驗證一遍,並且會和本地存儲的區塊進行比對來確保數據的有效。還是用上面的例子,銀行收到信用卡中心的賬單列表後,雖然已經確定的記賬的方式,但是也會讓多個結算員來對賬單進行二次檢查和結算,確保信用卡中心沒有對用戶的賬單做手腳。DA 的概念是伴隨著模塊化區塊鏈產生的,但是在 web 領域,基於 DA 的產品幾乎每個人都用過的-  BitTorrent

數據可用性 (Data Availability)

數據可用性的出現

  • 數據可用性最初不是問題,L1 中的數據是自然可用的。但是我們現在面臨著擴容的劇變,數據可用性才成為一個不可避免的話題。只有保證所有交易數據的可訪問和可下載,L1 或者輕節點才能對 Rollup 上的狀態進行跟踪和重構

DA 是必不可少?

輕節點驗證數據可用性困境

此图片的alt属性为空;文件名为ym6WUT_46t1mfgpqVjip1.webp
Path For Using Merkle Tree To Verify Tx
  • 比特幣在設計時就提出了 SPV(Simple Payment Verification)  的概念,即使不運行網絡的全節點也可以使用網絡的方式。這類節點稱為輕節點,它們只下載區塊頭,不下載具體的交易數據,不會去驗證交易的可用性,只保證同步的是最新的區塊頭,也就是只能確保區塊是有效的,對於區塊內交易的可用性則是完全信任全節點的
  • 因為交易數據是記錄為 Merkle Tree 的結構,輕節點雖然擁有驗證某條交易的可用性的能力,但是對於全節點惡意隱藏或是扣留的交易數據,輕節點由於只有區塊頭,是很難確認具體哪條交易信息是無效的,除非下載全部交易數據,總結就是確認交易無效容易,確認交易是否存在是困難的
  • 傳統分片 (Sharding) 擴容方式中,礦工會被分配到不同的分片上處理該分片的工作。礦工需要運行該分片的全節點加上其它分片的輕節點來保證跨分片操作的能力。因為分片安全的分割性,如果某個分片的節點作惡,很容易出現上面描述的輕節點驗證數據可用性困境,大大降低分片的性能與安全性。

Rollup 強依賴數據可用性保證

此图片的alt属性为空;文件名为1BnWsv954Hgmo8V1obtjw.webp
Rollup-centric
  • Optimistic Rollup
    • 在 Optimistic Rollup 擴容方式中,運用一種稱為 Sequencer  的高性能服務器對交易進行驗證與執行,最終將交易批量打包 (batch) 傳回 L1 進行儲存。Sequencer 是更加中心化的節點,處理速度非常快,L1 的共識層是無法跟上這樣的處理速度進行共識的,所以為了防止 Sequencer 的作惡,我們先假設 Sequencer 處理的工作是有效的,然後還有一類角色負責定期從 L1 讀取 Sequencer 提交的交易來區塊的有效性,如果發現有無效交易則可以提交欺詐證明 (Fraud Proof) 來進行可用性挑戰,如果數據最後被認定無效,則 Sequencer 上的狀態也會回滾至有效前。
    • 這裡的問題時,如果要驗證 Sequencer 提交的交易的可用性,需要先保證 Sequencer 提交了所有它驗證過的交易,沒有隱藏或是扣留等,也就是需要保證數據的可用性,否則是無法進行欺詐證明驗證的。Optimistic 和 Arbitrum 等 Rollup 現在的解決方法是將所有交易發回以太坊,以太坊來進行數據可用性工作
  • ZK Rollup
    • 對於 ZK Rollup(Zk-SNARK/Zk-STARK) 的 Sequencer  來說,不存在欺詐性證明問題,在提交 batch 交易時還需要同時提交零知識可用性證明,只要證明是有效的,則交易一定是有效的。即便如此也還是需要將交易數據發送回 L1 進行記錄,為了防止有一天此 Rollup 服務終止後,用戶依然可以用 L1 上保存的數據恢復賬戶狀態,避免資金在 Rollup 中的鎖死。這個時候如果沒有數據可用性保證,也就無法恢復正確的鏈上狀態。這個也被稱為 Rollup 鏈上狀態持久性問題。

DA 擴容問題

吞吐量

  • 受限於底層區塊大小限制,區塊大小其實是共識層和數據可用性層共同的問題。以太坊為例,區塊大小的均值在 50-60kb,區塊大小限制了單位區塊可以包含的交易數量。Rollup 現在是將批量交易 (batch) 信息通過 calldata 字段進行壓縮保存,其效率必然受限於單個區塊可容納交易限制。
  • 受限於底層數據可用性驗證效率限制,現在的 Rollup 例如 Optimism,數據可用性依然依賴 L1(以太坊) 來進行,和單體化時期並沒有區別,全節點下載所有交易,通過 L1 上的智能合約計算 Merkle Tree 等方式來驗證區塊內所有交易的可用性,然後進行本地保存,網絡中所有節點都需要重複這個步驟。以太坊的 TPS 在 14 左右,數據可用性驗證也差不多是這個速率,可見數據可用性驗證的效率對 Rollup 效率影響之大。

存儲成本

此图片的alt属性为空;文件名为SA8YxI6VmFutgXGZEdRmQ.webp
L2Fees.info
  • 受限於底層存儲成本限制,因為存儲的高昂費用,使得用戶最敏感的交易費用在 L2 上並沒有得到大幅度的減少。現在 Rollup 的費率主要由固定成本與可變成本兩部分組成。其中對於 Rollup 費率影響最大的便是 calldata 的存儲費率 16gas / byte。
    • 固定成本:L1 Base Tx Fee 21000 + 狀態寫入成本 20000
    • 動態成本:L2 Base Fee(可忽略不計) + calldata 寫入成本 (16gas / byte)
  • 數據可用性的存儲和通用的存儲是有區別的。數據可用性存儲不會對大文件存儲做優化,反而需要對數據驗證做更多優化。可以看這篇了解更多。

DA 擴容技術

二維 RS 糾刪碼 (2D Reed-Solomon Erasure Coding)

此图片的alt属性为空;文件名为gJHd-dRFYqUdfI9KTl_Vn.webp
How the Data Availability Layer can Shape the Future of Blockchain | by Huobi Research | Huobi Research | May, 2022 | Medium
  • 糾刪碼是在原始數據上附加一些額外的數據,保證原始數據在一定的兀餘度內的丟失都是可以通過算法恢復的,幾乎所有分佈式數據網絡中為了保證數據的冗餘性都會使用糾刪碼進行數據可用性保護,CD-ROM 上也大量使用糾刪碼來保證一定程度的物理損壞不會導致數據遺失。
  • 二維 RS 糾刪碼是一種數據編碼方式,解決的問題是通過增加數據兀餘度與採用特別的數據排列方式,幫助節點無需下載所有交易的情況下就可以快速驗證數據的可用性。全節點將數據附加糾刪碼後,再被切分為橫縱軸數量一樣的帶有奇偶校驗數據的數據分片,現在數據呈二維平面排列,然後計算出行和列的 Merkle Root,同時也需要用行和列的 Merkle Root 計算一個整體數據的 Merkle Root, 放入區塊頭信息中供之後快速校驗。
  • 可以看出一個全節點如果想隱藏一筆交易,那幾乎就不可能了,因為任何的修改都會導致二維數據矩陣實質性的變化,非常容易被檢測出來。網絡內全節點如果檢測到任何數據有效性問題,也會通過數據有效性欺詐證明來快速通知輕節點。

數據可用性採樣 (Data Availability Sampling)

此图片的alt属性为空;文件名为Xsfy56AeSBKUS2IgY4HMi.webp
How the Data Availability Layer can Shape the Future of Blockchain | by Huobi Research | Huobi Research | May, 2022 | Medium
  • 數據可用性採樣+ 二維 RS 糾刪碼幾乎是數據可用性項目的通用設計了,也是幾個項目技術細節上有差異化的地方。以太坊的 Dank Sharding 也不斷在進行數據可用性採樣方面的研究。
  • 在交易數據完成二維 RS 糾刪碼編碼,區塊頭也廣播之後。輕節點就可以通過區塊頭中的行與列的 Merkle Root 計算出整體數據的 Merkle Root 並與區塊頭中的數據進行對比。如果整體數據的 Merkle Root 沒有問題的話,輕節點再進行一個非常小的數據採樣測試。例如隨機選擇第 3 行與第 5 列,之後就是與 SPV 中輕節點驗證交易可用性方式一樣了,要求全節點返回計算需要用到的節點路徑進行哈希計算。最後再與全節點給出的第 3 列與第 5 行的 Merkle State 數據做對比就完成了一次採樣驗證。
  • 這個方案最重要也是最美妙的一點在於,驗證數據量與計算量很小,支持大量輕節點的加入,並且節點數量越多,區塊的可用性概率也越高整個網絡也越安全,對於檢測數據隱藏或者扣留的情況非常高效。

命名空間默克爾樹 (Namespaced Merkle Tree)

  • 這個是 Celestia 首先提出的技術,簡單說就是將整個默克爾狀態樹劃分了歸屬,全節點做驗證時只需要下載自己歸屬下的那部分樹結構就可以了。這樣的好處是可以同時支持不同的執行層數據的可用性驗證。這個設計充分體現了 Celestia 的模塊化主義與多 Rollup 並存的展望。技術細節可以參考這篇文章

KZG 承諾 (Kate-Zaverucha-Goldberg Commitment)

此图片的alt属性为空;文件名为1RqExMG81sUqSEAZlwU0z.webp
KZG Commitments
  • 使用 KZG 作為數據可用性的狀態根最來自於以太坊的 Danksharding 方案。KZG 承諾的作用和 Merkle Root 一樣,是對於整體狀態的一種證明方式 (proof of inclusion),可以看做另一種 Merkle Root,只不過它哈希的不是數據,而是多項式。數據量更小,可用性證明更加高效,而且所有葉子節點都在同一個 polynomial(多項式) 上,通過增加葉子節點就可以進行糾刪碼編碼 (Erasure Coding 友好)。

Danksharding

此图片的alt属性为空;文件名为oi1Pe3E5xB_7lph9DBTqE.webp
Danksharding

Proto-Danksharding(EIP-4844)

  • Proto-Danksharding 是 Danksharding 的一個早期先行版本。在交易信息中包含了一個額外的存儲空間字段-  blob。每個 blob 有 128kb 空間,每個交易最多有兩個 blob,每個區塊最多包含 16 個 blob,blob 不可以被 EVM 執行。blob 都使用 KZG 承諾進行多項式哈希,用於之後的數據可用性驗證。之前 Rollup 的批處理 batch 數據都是通過 calldate 字段傳入 L1,現在可以直接放到 blob 中。
  • 這裡最重要的是,blob 不是永久存儲的,可以理解為有時效性的緩存,每隔一段時間 (30 天) 以太坊上的 blob 數據是會被清除的,通過這種緩存的方式來減輕以太坊的存儲壓力以及減少存儲費率。因為 30 天后 blob 數據會被清理,所以需要自行存儲這些歷史交易數據。以太坊共識層的目的不是保證永遠保存所有歷史數據。相反,其目的是提供一個高度安全的實時公告板,將歷史數據存儲的工作交給其它更適合的網絡來進行,以太坊也在全力轉向模塊化趨勢。

Danksharding

  • Danksharding 是以太坊的新分片設計提案,圍繞 Rollup-Centric  的以太坊發展路線,提出了很多數據可用性層相關的改進。此分片方案給 rollup 的批處理 batch 數據提供大量的存儲空間 blob。以太坊協議本身並不試圖解譯這些 blob,驗證一個 blob 只需要檢查該 blob 是否可用——即它能否從網絡上下載。這些 blob 的數據空間預期是為支持高吞吐量交易的二層 rollup 協議所用的。
  • Danksharding 將 Proto-Danksharding 中 blob 數量提升了 16 倍,最大交易大小從 2M 上升到 32M, 目標交易大小從 1M 提升到 16M。blobs 分散存儲在 Becon Chain 上,單獨作為數據可用性層工作。依然是運用糾刪碼技術,每個節點只保存 blob 的數據片段,整個網絡來保證 blob 的數據的完整性 (和 BitTorrent 一樣)。blob 使用數據可用性採樣 (DAS) 的方式配合 KZG 狀態根來驗證數據可用性,提交提交 attestation,attestation 達到閾值則認為 block 有效。再配合 EIP-4488 來減少 calldata 的存儲費用,包括提供獨立的數據有效性分片來存儲 blob,可以說是在數據可用性擴容上全力導向 Rollup-Centric 發展路線了。

Celestia

此图片的alt属性为空;文件名为q4VEiP_O99VAmCx5p8l6S.webp
Celestia Modular Stack
  • Celestia 是近期最重要的模塊化區塊鏈項目,也是推進數據可用性與模塊化區塊鏈落地的先驅。構建於 CosmosSDK 之上,專注於提供數據可用性服務,不執行任何交易。他們率先提出了讓輕節點使用二維 RS 糾刪碼進行數據可用性驗證,同時開發了命名空間默克爾樹來支持多種 Rollup,也提出了量子引力橋 (Quantum Gravity Bridge) 使用 Celestia 作為以太坊數據可用性層的擴容方案。
  • CEO Mustafa Al-Bassam 是 Chainspace 的 Co-Funder,這個項目後來被 Facebook 收購。首席研究員 John Adler 來自 ConsenSys, 曾經幫助 Optimism 完成了第一版技術規範。
  • 我覺得模塊化在社區的興起大部分是因為 Celestia 描述了一種全新的模塊化區塊鏈技術棧,其中以 Rollup + Cevmos + Celestia 的組合受到最多關注。Cevmos 是 Celestia 與 Evmos 團隊合作推出的模塊化結算層,使用 Optimint(Optimistic Tendermint) 共識, 基本是完全為 EVM Rollup 優化的,還結合了 Cosmos 網絡的互操作性,組合性等優勢,十分值得期待。

Polygon Avail

此图片的alt属性为空;文件名为ClWOt5fETUXlFq10Y3-fU.webp
Layer2 Aggregator
  • 談到 L2 怎麼能少了號稱 layer2 聚合器的 Polygon。Avail 是 Celestia 的競品,作為 polygon 的 layer2 聚合器版圖的一部份,構建於 Substrate 之上,專注於數據可用性層的服務。在我看 Avail 也是最有可能在 Polkadot 生態出現原生的數據有效層項目前的 DA 選擇方案之一。Celestia 已經為 Cosmos 生態描繪出一種極高靈活度與擴展性的架構,我相信 Substrate 生態也會不甘落後的。
  • Avail 的思路與 Celestia 基本相同,區別主要在於糾刪碼的生成以及採樣驗證環節。Avail 在二維 RS 糾刪碼編碼階段大量使用 KZG 承諾。Avail 將數據展開為 n * m 的矩陣,對每一行都構造一個多項式,然後為每一個多項式都生成一個 KZG 承諾放入區塊頭。之後輕節點便只需要原始數據和 KZG 承諾便可完成可用性驗證。
此图片的alt属性为空;文件名为9aQ9_KDQYvuP7mOD2oLKx.webp
Introducing Avail by Polygon — a Robust General-Purpose Scalable Data Availability Layer — Polygon | Blog

Startwar Validium & ZkSync ZkPorter

  • Validium 和 ZkPorter 是 Zk-Rollup 兩大巨頭 Startware 與 ZkSync 推出的自家鏈下存儲服務。本質是是為了解決上述 L1 的瓶頸舒服 Rollup 快速大規模應用的問題,通過將交易數據存儲在為 Zk 交易數據優化過的相對中心化的網絡中而不是以太坊來大幅降低交易費用。我覺得這是對於以太坊過於緩慢開發進度的一種折衷方案。畢竟安全性是有代價的,不過這樣服務的出現肯定也能打中一批目標用戶。

參考

https://mirror.xyz/yicheng.eth/7q29a3lMXkG2f51-BrTLxovS3tqnwf4qi7_VWFhnqKc

https://mp.weixin.qq.com/s/Y4avtYdyES45EBkhHp07XA

https://medium.com/coinmonks/why-we-need-modular-blockchains-for-scalability-276f4d724b0e

https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f

https://www.mechanism.capital/rollups-introduction

https://coinmarketcap.com/alexandria/article/what-is-data-availability

https://medium.com/huobi-research/how-the-data-availability-layer-can-shape-the-future-of-blockchain-83274b64d2c

https://w3hitchhiker.mirror.xyz/T9MoM-3p_xNIx7I5k-UzmfKqGBQaDQmdvGw4K8bFMTA

https://learnblockchain.cn/article/3769

https://learnblockchain.cn/books/geth/part1.html

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。本文內容僅用於信息分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。