Data Availability Sampling(一):為什麼會需要 DAS?

NIC Lin
Taipei Ethereum Meetup
13 min readDec 6, 2023

Data Availability Sampling 技術帶來的好處是什麼?為什麼我們會需要它?

Photo by Testalize.me on Unsplash

先備知識:

  • 對 Ethereum 的共識運作有基本認識
  • 知道全節點(Full Node)與輕節點(Light Node)的不同
  • 知道 Rollup 與資料發布(資料可得性)的問題

以下會以 資料發布(Data Publication)來稱呼 資料可得性(Data Availability),但某些 Data Availability 相關的詞彙例如 DAS、DAC 則會保留原字,避免讀者無法和英文原文連結。關於 Data Publication 這個名稱的介紹可以參考:

這個系列文將會透過 Danksharding 介紹 DAS 的運作機制、以及 Celestia、EigenDA、AvailDA 這幾個方案的異同之處。第一篇將會介紹為什麼我們會需要 DAS 以及 DAS 所帶來的好處。

Recap:為什麼會討論到資料發布的問題?

目前在 Ethereum 生態系中最常討論到資料發布的情境是在討論 L2 的設計的時候:L2 自己也是一條鏈,所以也會有自己的區塊與交易資料,那這些資料要放在哪?因為使用者需要這些資料來確保安全性。

  • 如果是 Rollup,它會將它的交易資料上傳到 L1 例如 Ethereum,把 Ethereum 當作放資料的地方
  • 如果不是 Rollup,那就會把資料放在其他地方,例如由一群被信任的成員來保管,這樣的保管者稱為 Data Availability Committee(DAC)。

更多關於 Rollup 與資料發布的關係可以參考:

但其實不只是 L2,Ethereum 這條鏈本身也會需要面對資料發布的問題,因為輕節點不會像全節點一樣下載完整的區塊資料,所以輕節點需要相信「當一個新的區塊出現時,該區塊的完整資料真的有被發布」。當一個輕節點被誘騙而相信一個「資料不完整的」區塊,這和它被誘騙去相信一個「不合法的」區塊的影響是一樣的 — 它接上的都是一條不被其他人承認的分叉鏈。

全節點不會相信不完整的區塊,但輕節點會相信

那目前 Ethereum 的輕節點是相信誰來確保一個新的區塊的資料有被完整發布?答案是「驗證者(Validator)們」。當輕節點收到一個新的區塊,它不會下載完整區塊資料,但它會看有多少驗證者投票給這個區塊。當有足夠多的驗證者投票給這個區塊,它就會相信這個區塊的完整資料有確實被發布。這是屬於 Honest Majority 的假設,也就是相信大多數的驗證者是好人。

當足夠多的驗證者對區塊簽名,輕節點就會相信區塊有完整發布

註:目前 Ethereum 輕節點並不是真的採計數十萬個驗證者的投票來計算,因為數量太多、計算太耗資源,而是指派另一批在數量上少得多的 Sync Committee,由裡面的驗證者簽名作為給輕節點的擔保。這算是一個過渡的做法,等待未來更完整成熟的設計取而代之。

Data Availability Sampling

「相信大多數的驗證者是好人」聽起來已經是個合理且不錯的選擇,但如果我們能做得更好呢?如果有一天真的發生大多數的驗證者想聯合起來欺騙我們說有完整區塊資料但其實沒有,不過只需要 p2p 網路中存在少數好人,我們就可以免於上當呢?

這麼棒的能力肯定不會憑空出現,要具備這個能力需要構建出夠穩固的 p2p 網路、有足夠多的使用者,甚至要能在網路層加入隱私的功能。這個能力就是這個系列文的重點 — Data Availability Sampling(DAS)。

在一個具備 DAS 的區塊鏈中,輕節點不會只是被動接收新的區塊資料,而是要共同參與到 DAS 的運作之中:每個輕節點都要針對每一個區塊,到 p2p 網路中去索求該區塊身上的幾段資料並保存這些資料,並且在其他節點索求資料時分享給對方。就像分散式的檔案分享協議 BitTorrent 一樣,網路中的節點們一起保存、共享他們所在乎的資料,而不是仰賴某個中心化伺服器。

輕節點們一起透過 p2p 網路索求與分享區塊的片段資料

註:理想的情境中,區塊鏈的使用者都會運行輕節點,一起參與到 DAS 的運作中、一起確保安全性,而不是像現在完全相信其他節點。

每個輕節點在它成功拿到它索求的每段資料之前,都不能相信區塊資料已經被完整發布,不過一但索求的每段資料都拿到了,它就可以放心地相信區塊資料已經被完整發布了。但為什麼輕節點明明只拿了片段的資料卻可以放心相信完整的區塊資料有被發布?這是因為網路中的其他輕節點們也會各自保管片段資料,因此在有需要的時候,大家將可以合力藉由彼此的片段資料拼湊出完整的資料,而且 DAS 另一個神奇的能力是:輕節點們合力保存的資料不需要涵蓋完整的區塊資料,輕節點們只要拿到其中 50% 的資料就可以還原出 100% 的資料。

輕節點們只要有超過 50% 的片段資料,就能還原出完整的區塊資料

註:不一定是 50%,可能會更高,端看該 DAS 的設定,但一定會小於 100%。

所以在 DAS 中,即便大多數的驗證者都投票給某個區塊,輕節點也不會輕易相信該區塊。輕節點會進行採樣(Sampling),也就是索求該區塊的片段資料,當索求的片段都拿到手後才會相信區塊資料有被完整發布。

Honest Majority -> Honest Minority

相比於目前沒有 DAS 的 Ethereum,輕節點必須仰賴「大多數驗證者是好人」,也就是 Honest Majority 的假設;Ethereum 加入 DAS 後,輕節點仰賴的是只要有「少數的節點是(會採樣並保管資料的)好人」,也就是 Honest Minority 的假設。

註:「少數」指的是需要採樣並保管足以還原出完整資料的輕節點數量相對於網路裡所有(非常多)的輕節點是相對的少數。

機率上的安全性

前面有提到過,當一個輕節點收到它所索求的所有片段資料後,它就會相信區塊資料有被完整發布,而且網路中的輕節點們在有需要的時候可以合力藉由片段資料還原出完整資料,但是…如果產出區塊的人是惡意的,而且它一開始就沒有要釋放出足夠的區塊資料呢?如果它就是針對某個輕節點,並在提供給那個輕節點所需要的片段資料之後就不再提供任何資料呢?

Alice 成功拿到索求的資料,因此相信區塊資料有被完整發布,最終她將會接上這個被其他節點丟棄的區塊

那這個可憐的輕節點就得乖乖受騙了,而這也是 DAS 的限制與 Trade-off:DAS 提供的「資料有完整發布」的保證是機率上的保證,不是百分之百、斬釘截鐵可以確定的保證,但這仍然好過於得原本得完全相信大多數的驗證者的情況。如果你覺得機率上的保證不夠安全、想要百分之百確認區塊資料到底有沒有完整發布,那很抱歉,你只能自己跑一個全節點把完整區塊資料下載下來。

註:運行輕節點的程式沒辦法知道自己被騙,對程式來說,只要收到所有索求的資料就會相信區塊是有完整發布。使用者只能透過自己的社交渠道來得知某個區塊實際上是沒完整發布的,並趕快指示自己的輕節點將該區塊標記為資料不完整。

網路隱私的重要性

如果產出區塊的人是惡意的且它就想要騙某些輕節點,那很遺憾地,它將能夠騙到那些輕節點。不過這個受騙的數量會有一個上限,畢竟攻擊者也不能釋出太多區塊導致輕節點們真的可以合力還原出完整資料。

這時大家可能在擔心,難道自己的安全性只能建立在「和產出區塊的人無仇」、「攻擊者不知道我是誰所以不會盯上我」嗎?是的,但這也是為什麼前面會提到 DAS 需要網路層的隱私功能,因為如果攻擊者能知道是「誰」在索求片段資料、或知道 A,B,C 這三個片段是「同一個人」在索求的,那它自然就能輕鬆地瞄準目標受害者並提供資料給對方。如果今天網路層具備隱私功能,那攻擊者就沒辦法知道現在到底是誰來索求這個片段資料,自然也就沒辦法讓目標上當受騙,攻擊者的攻擊效率就會大大降低:它完全沒辦法確定是否有騙到受害者,或甚至騙到任何一個輕節點。

如果攻擊者不知道是誰來索求資料,就非常難騙到輕節點

DAS 的安全基底

DAS 要能確保安全性,需要:

  1. 區塊資料透過糾刪碼(Erasure Coding)增加資料的可靠性,例如節點們只要透過任意的 50% 資料就能還原出原本 100% 的資料
  2. 輕節點們合力採樣並儲存足夠多的片段資料,確保能還原出完整資料,以及
  3. 一個健全的 p2p 網路讓節點們可以分享片段資料。

1. 透過糾刪碼增加區塊資料可靠性

如果區塊沒有經過糾刪碼進行編碼,而是讓輕節點們直接採樣原始的區塊內容會有什麼問題?答案是:輕節點們採樣的片段資料要達到 100% 覆蓋率才能確保資料的完整。即便輕節點們合力採樣了 99% 的區塊資料,這個區塊一樣是不完整的、是不被承認的。

沒有糾刪碼的情況下,只要一丁點的區塊遺失,就等於區塊沒完整發布

如果區塊經過糾刪碼的編碼,那只要例如任意的 50% 資料就能還原出 100% 資料,這表示輕節點們只要合力採樣的片段資料達到 50% 的覆蓋率就可以確保一定能還原出完整的區塊資料。相比於 100% 的覆蓋率,50% 覆蓋率的要求就簡單了許多,惡意的出塊者想要藏著部分資料來欺騙輕節點就會困難許多。

註:50% 只是一個例子,不同需求會有不同的還原所需 % 數。

2. 輕節點們保存足夠多的片段資料

如果輕節點保存不夠多的片段資料,那即便區塊資料透過糾刪碼編碼了,還是沒辦法還原出 100% 資料。例如假設輕節點們一共只儲存了 40% 的片段資料,它們合力也無法還原出 100% 的資料,那這些節點們就會全都上當,相信區塊資料有被完整發布。

要怎麼確保輕節點們有保存足夠多的資料?我們需要有足夠多的輕節點或是每個輕節點進行足夠多的採樣。如果輕節點夠多,那每個輕節點採樣的次數就不用高;但如果輕節點不夠多,那每個輕節點採樣的次數就要夠高,才能確保輕節點們合力有保存足夠多的資料。

註:如果輕節點的數量持續增長,那在採樣次數不變的前提下,它們合力能儲存的資料大小其實也可以跟著提高,例如這個系列文會介紹到的 Celestia 便是能支援彈性區塊大小的區塊鏈:Celestia 的區塊大小是可以因應網路中輕節點的數量去調整的。

3. 健全的 p2p 網路

輕節點們需要透過 p2p 網路來分享片段資料,以便能在有需要的時候還原出完整區塊資料。如果 p2p 網路不穩定、無法處理大量資料請求的話,就有可能導致節點們獲取不到某些片段資料。另外也要避免全部的片段資料都流通在同一個 p2p 網路中導致網路頻寬過載,理想上一個輕節點應該要能只收到它索求的資料,而不是其他無關緊要的資料也全都透過 p2p 網路流經它的手上。

此外網路層還會需要具備隱私的功能,否則輕節點就會被攻擊者識別出來,攻擊者不會公布超過 50% 的資料,但它會提供被它鎖定的輕節點所索求的片段資料來誤導該輕節點相信區塊資料有被完整發布。

這三個部分的細節還會在這個系列文中做更詳盡的介紹。

總結

  • L2 的資料發布問題可以交給 L1 或 DAC 來解決,但 L1 自己本身也會遇到資料發布的問題 — 因為輕節點並不會下載完整區塊
  • 以 Ethereum 為例,只要大多數的驗證者對一個區塊簽名,輕節點就會相信這個區塊的資料有被完整發布。而目前的設計中,其實只要大多數的 Sync Committee 成員有簽名,輕節點就會相信
  • 輕節點受騙而相信一個沒完整發布資料的區塊,等同於相信一個不合法的區塊,也就是相信一條不被其他人承認的分叉鏈
  • 如果輕節點要能不仰賴「大多數驗證者是好人」這個假設來確保安全性的話,就會需要 DAS
  • 在 DAS 中,輕節點們合力保存區塊的片段資料,且藉由糾刪碼的幫助,只要輕節點們保存超過一定比例(例如 50%)的資料,就能還原出 100% 的完整資料
  • 但注意 DAS 提供的安全性是機率上的安全性,攻擊者還是有可能可以騙部分的輕節點去相信資料有被完整發布。如果使用者想要百分之百確認區塊有完整發布,他只能自己下載完整的區塊資料
  • 而網路隱私的功能也是大幅降低攻擊者攻擊效率的工具之一,如果攻擊者沒辦法識別是誰來索求這一個片段資料,那它要鎖定特定的輕節點就更加困難,或甚至沒辦法鎖定任何輕節點

下一篇將會介紹 DAS 如何在 Ethereum 的 Danksharding 中實現。

--

--