Data Availability Sampling 技術帶來的好處是什麽?爲什麽我們會需要它?
拍攝者@testalizeme?utm_source=medium&utm_medium=referral">測試我 在未飛濺
先備知識:
以下會以 資料髮布(Data Publication)來稱呼 資料可得性(Data Availability),但某些 Data Availability 相關的詞彙例如 DAS、DAC 則會保留原字,避免讀者無法和英文原文連結。關於 Data Publication 這個名稱的介紹可以參考:
這個繫列文將會透過 Danksharding 介紹 DAS 的運作機製、以及 Celestia、EigenDA、AvailDA 這幾個方案的異衕之處。第一篇將會介紹爲什麽我們會需要 DAS 以及 DAS 所帶來的好處。
目前在 Ethereum 生態繫中最常討論到資料髮布的情境是在討論 L2 的設計的時候:L2 自己也是一條鏈,所以也會有自己的區塊與交易資料,那這些資料要放在哪?因爲使用者需要這些資料來確保安全性。
更多關於 Rollup 與資料髮布的關繫可以參考:
本文將介紹資料可用性與 Rollup 的關聯,Rollup 要怎麽在資料可用性上做出一些犧牲來換取更低的交易成本。
但其實不隻是L2,Ethereum 這條鏈本身也會需要麵對資料髮布的問題,因爲輕節點不會像全節點一樣下載完整的區塊資料,所以輕節點需要相信「當一個新的區塊出現時,該區塊的完整資料真的有被髮布」。當一個輕節點被誘騙而相信一個「資料不完整的」區塊,這和它被誘騙去相信一個「不合法的」區塊的影響是一樣的— 它接上的都是一條不被其他人承認的分叉鏈。
全節點不會相信不完整的區塊,但輕節點會相信
那目前 Ethereum 的輕節點是相信誰來確保一個新的區塊的資料有被完整髮布?答案是「驗證者(Validator)們」。當輕節點收到一個新的區塊,它不會下載完整區塊資料,但它會看有多少驗證者投票給這個區塊。當有足夠多的驗證者投票給這個區塊,它就會相信這個區塊的完整資料有確實被髮布。這是屬於 Honest Majority 的假設,也就是相信大多數的驗證者是好人。
當足夠多的驗證者對區塊簽名,輕節點就會相信區塊有完整髮布
註:目前Ethereum 輕節點併不是真的採計數十萬個驗證者的投票來計算,因爲數量太多、計算太耗資源,而是指派另一批在數量上少得多的Sync Committee,由裡麵的驗證者簽名作爲給輕節點的擔保。這算是一個過渡的做法,等待未來更完整成熟的設計取而代之。
「相信大多數的驗證者是好人」聽起來已經是個合理且不錯的選擇,但如果我們能做得更好呢?如果有一天真的髮生大多數的驗證者想聯合起來欺騙我們説有完整區塊資料但其實沒有,不過隻需要 p2p 網路中存在少數好人,我們就可以免於上當呢?
這麽棒的能力肯定不會憑空出現,要具備這個能力需要構建出夠穩固的 p2p 網路、有足夠多的使用者,甚至要能在網路層加入隱私的功能。這個能力就是這個繫列文的重點 — Data Availability Sampling(DAS)。
在一個具備DAS 的區塊鏈中,輕節點不會隻是被動接收新的區塊資料,而是要共衕參與到DAS 的運作之中:每個輕節點都要針對每一個區塊,到p2p 網路中去索求該區塊身上的幾段資料併保存這些資料,併且在其他節點索求資料時分享給對方。就像分散式的檔案分享協議 BitTorrent 一樣,網路中的節點們一起保存、共享他們所在乎的資料,而不是仰賴某個中心化伺服器。
輕節點們一起透過 p2p 網路索求與分享區塊的片段資料
註:理想的情境中,區塊鏈的使用者都會運行輕節點,一起參與到 DAS 的運作中、一起確保安全性,而不是像現在完全相信其他節點。
每個輕節點在它成功拿到它索求的每段資料之前,都不能相信區塊資料已經被完整髮布,不過一但索求的每段資料都拿到了,它就可以放心地相信區塊資料已經被完整髮布了。但爲什麽輕節點明明隻拿了片段的資料卻可以放心相信完整的區塊資料有被髮布?這是因爲網路中的其他輕節點們也會各自保管片段資料,因此在有需要的時候,大家將可以合力藉由彼此的片段資料拼湊出完整的資料,而且DAS 另一個神奇的能力是:輕節點們合力保存的資料不需要涵蓋完整的區塊資料,輕節點們隻要拿到其中50% 的資料就可以還原出100% 的資料。
輕節點們隻要有超過 50% 的片段資料,就能還原出完整的區塊資料
註:不一定是 50%,可能會更高,端看該 DAS 的設定,但一定會小於 100%。
所以在 DAS 中,即便大多數的驗證者都投票給某個區塊,輕節點也不會輕易相信該區塊。輕節點會進行採樣(Sampling),也就是索求該區塊的片段資料,當索求的片段都拿到手後才會相信區塊資料有被完整髮布。
相比於目前沒有DAS 的Ethereum,輕節點必鬚仰賴「大多數驗證者是好人」,也就是Honest Majority 的假設;Ethereum 加入DAS 後,輕節點仰賴的是隻要有「少數的節點是(會採樣併保管資料的)好人」,也就是Honest Minority 的假設。
註:「少數」指的是需要採樣併保管足以還原出完整資料的輕節點數量相對於網路裡所有(非常多)的輕節點是相對的少數。
前麵有提到過,當一個輕節點收到它所索求的所有片段資料後,它就會相信區塊資料有被完整髮布,而且網路中的輕節點們在有需要的時候可以合力借由片段資料還原出完整資料,但是…如果産出區塊的人是惡意的,而且它一開始就沒有要釋放出足夠的區塊資料呢?如果它就是針對某個輕節點,併在提供給那個輕節點所需要的片段資料之後就不再提供任何資料呢?
Alice 成功拿到索求的資料,因此相信區塊資料有被完整髮布,最終她將會接上這個被其他節點丟棄的區塊
那這個可憐的輕節點就得乖乖受騙了,而這也是DAS 的限製與Trade-off:DAS 提供的「資料有完整髮布」的保證是機率上的保證,不是百分之百、斬釘截鐵可以確定的保證,但這仍然好過於得原本得完全相信大多數的驗證者的情況。如果你覺得機率上的保證不夠安全、想要百分之百確認區塊資料到底有沒有完整髮布,那很抱歉,你隻能自己跑一個全節點把完整區塊資料下載下來。
註:運行輕節點的程式沒辦法知道自己被騙,對程式來説,隻要收到所有索求的資料就會相信區塊是有完整髮布。使用者隻能透過自己的社交渠道來得知某個區塊實際上是沒完整髮布的,併趕快指示自己的輕節點將該區塊標記爲資料不完整。
如果産出區塊的人是惡意的且它就想要騙某些輕節點,那很遺憾地,它將能夠騙到那些輕節點。不過這個受騙的數量會有一個上限,畢竟攻擊者也不能釋出太多區塊導緻輕節點們真的可以合力還原出完整資料。
這時大家可能在擔心,難道自己的安全性隻能建立在「和産出區塊的人無仇」、「攻擊者不知道我是誰所以不會盯上我」嗎?是的,但這也是爲什麽前麵會提到DAS 需要網路層的隱私功能,因爲如果攻擊者能知道是「誰」在索求片段資料、或知道A,B,C 這三個片段是「衕一個人」在索求的,那它自然就能輕鬆地瞄準目標受害者併提供資料給對方。如果今天網路層具備隱私功能,那攻擊者就沒辦法知道現在到底是誰來索求這個片段資料,自然也就沒辦法讓目標上當受騙,攻擊者的攻擊效率就會大大降低:它完全沒辦法確定是否有騙到受害者,或什至騙到任何一個輕節點。
如果攻擊者不知道是誰來索求資料,就非常難騙到輕節點
DAS 要能確保安全性,需要:
如果區塊沒有經過糾刪碼進行編碼,而是讓輕節點們直接採樣原始的區塊內容會有什麽問題?答案是:輕節點們採樣的片段資料要達到 100% 覆蓋率才能確保資料的完整。即便輕節點們合力採樣了 99% 的區塊資料,這個區塊一樣是不完整的、是不被承認的。
沒有糾刪碼的情況下,隻要一丁點的區塊遺失,就等於區塊沒完整髮布
如果區塊經過糾刪碼的編碼,那隻要例如任意的50% 資料就能還原出100% 資料,這錶示輕節點們隻要合力採樣的片段資料達到50% 的覆蓋率就可以確保一定能還原出完整的區塊資料。相比於 100% 的覆蓋率,50% 覆蓋率的要求就簡單了許多,惡意的出塊者想要藏著部分資料來欺騙輕節點就會睏難許多。
註:50% 隻是一個例子,不衕需求會有不衕的還原所需 % 數。
如果輕節點保存不夠多的片段資料,那即便區塊資料透過糾刪碼編碼了,還是沒辦法還原出 100% 資料。例如假設輕節點們一共隻儲存了 40% 的片段資料,它們合力也無法還原出 100% 的資料,那這些節點們就會全都上當,相信區塊資料有被完整髮布。
要怎麽確保輕節點們有保存足夠多的資料?我們需要有足夠多的輕節點或是每個輕節點進行足夠多的採樣。如果輕節點夠多,那每個輕節點採樣的次數就不用高;但如果輕節點不夠多,那每個輕節點採樣的次數就要夠高,才能確保輕節點們合力有保存足夠多的資料。
註:如果輕節點的數量持續增長,那在採樣次數不變的前提下,它們合力能儲存的資料大小其實也可以跟著提高,例如這個繫列文會介紹到的Celestia 便是能支援彈性區塊大小的區塊鏈:Celestia 的區塊大小是可以因應網路中輕節點的數量去調整的。
輕節點們需要透過 p2p 網路來分享片段資料,以便能在有需要的時候還原出完整區塊資料。如果 p2p 網路不穩定、無法處理大量資料請求的話,就有可能導緻節點們穫取不到某些片段資料。另外也要避免全部的片段資料都流通在衕一個p2p 網路中導緻網路頻寬過載,理想上一個輕節點應該要能隻收到它索求的資料,而不是其他無關緊要的資料也全都透過p2p 網路流經它的手上。
此外網路層還會需要具備隱私的功能,否則輕節點就會被攻擊者識別出來,攻擊者不會公布超過50% 的資料,但它會提供被它鎖定的輕節點所索求的片段資料來誤導該輕節點相信區塊資料有被完整髮布。
這三個部分的細節還會在這個繫列文中做更詳盡的介紹。
Data Availability Sampling 技術帶來的好處是什麽?爲什麽我們會需要它?
拍攝者@testalizeme?utm_source=medium&utm_medium=referral">測試我 在未飛濺
先備知識:
以下會以 資料髮布(Data Publication)來稱呼 資料可得性(Data Availability),但某些 Data Availability 相關的詞彙例如 DAS、DAC 則會保留原字,避免讀者無法和英文原文連結。關於 Data Publication 這個名稱的介紹可以參考:
這個繫列文將會透過 Danksharding 介紹 DAS 的運作機製、以及 Celestia、EigenDA、AvailDA 這幾個方案的異衕之處。第一篇將會介紹爲什麽我們會需要 DAS 以及 DAS 所帶來的好處。
目前在 Ethereum 生態繫中最常討論到資料髮布的情境是在討論 L2 的設計的時候:L2 自己也是一條鏈,所以也會有自己的區塊與交易資料,那這些資料要放在哪?因爲使用者需要這些資料來確保安全性。
更多關於 Rollup 與資料髮布的關繫可以參考:
本文將介紹資料可用性與 Rollup 的關聯,Rollup 要怎麽在資料可用性上做出一些犧牲來換取更低的交易成本。
但其實不隻是L2,Ethereum 這條鏈本身也會需要麵對資料髮布的問題,因爲輕節點不會像全節點一樣下載完整的區塊資料,所以輕節點需要相信「當一個新的區塊出現時,該區塊的完整資料真的有被髮布」。當一個輕節點被誘騙而相信一個「資料不完整的」區塊,這和它被誘騙去相信一個「不合法的」區塊的影響是一樣的— 它接上的都是一條不被其他人承認的分叉鏈。
全節點不會相信不完整的區塊,但輕節點會相信
那目前 Ethereum 的輕節點是相信誰來確保一個新的區塊的資料有被完整髮布?答案是「驗證者(Validator)們」。當輕節點收到一個新的區塊,它不會下載完整區塊資料,但它會看有多少驗證者投票給這個區塊。當有足夠多的驗證者投票給這個區塊,它就會相信這個區塊的完整資料有確實被髮布。這是屬於 Honest Majority 的假設,也就是相信大多數的驗證者是好人。
當足夠多的驗證者對區塊簽名,輕節點就會相信區塊有完整髮布
註:目前Ethereum 輕節點併不是真的採計數十萬個驗證者的投票來計算,因爲數量太多、計算太耗資源,而是指派另一批在數量上少得多的Sync Committee,由裡麵的驗證者簽名作爲給輕節點的擔保。這算是一個過渡的做法,等待未來更完整成熟的設計取而代之。
「相信大多數的驗證者是好人」聽起來已經是個合理且不錯的選擇,但如果我們能做得更好呢?如果有一天真的髮生大多數的驗證者想聯合起來欺騙我們説有完整區塊資料但其實沒有,不過隻需要 p2p 網路中存在少數好人,我們就可以免於上當呢?
這麽棒的能力肯定不會憑空出現,要具備這個能力需要構建出夠穩固的 p2p 網路、有足夠多的使用者,甚至要能在網路層加入隱私的功能。這個能力就是這個繫列文的重點 — Data Availability Sampling(DAS)。
在一個具備DAS 的區塊鏈中,輕節點不會隻是被動接收新的區塊資料,而是要共衕參與到DAS 的運作之中:每個輕節點都要針對每一個區塊,到p2p 網路中去索求該區塊身上的幾段資料併保存這些資料,併且在其他節點索求資料時分享給對方。就像分散式的檔案分享協議 BitTorrent 一樣,網路中的節點們一起保存、共享他們所在乎的資料,而不是仰賴某個中心化伺服器。
輕節點們一起透過 p2p 網路索求與分享區塊的片段資料
註:理想的情境中,區塊鏈的使用者都會運行輕節點,一起參與到 DAS 的運作中、一起確保安全性,而不是像現在完全相信其他節點。
每個輕節點在它成功拿到它索求的每段資料之前,都不能相信區塊資料已經被完整髮布,不過一但索求的每段資料都拿到了,它就可以放心地相信區塊資料已經被完整髮布了。但爲什麽輕節點明明隻拿了片段的資料卻可以放心相信完整的區塊資料有被髮布?這是因爲網路中的其他輕節點們也會各自保管片段資料,因此在有需要的時候,大家將可以合力藉由彼此的片段資料拼湊出完整的資料,而且DAS 另一個神奇的能力是:輕節點們合力保存的資料不需要涵蓋完整的區塊資料,輕節點們隻要拿到其中50% 的資料就可以還原出100% 的資料。
輕節點們隻要有超過 50% 的片段資料,就能還原出完整的區塊資料
註:不一定是 50%,可能會更高,端看該 DAS 的設定,但一定會小於 100%。
所以在 DAS 中,即便大多數的驗證者都投票給某個區塊,輕節點也不會輕易相信該區塊。輕節點會進行採樣(Sampling),也就是索求該區塊的片段資料,當索求的片段都拿到手後才會相信區塊資料有被完整髮布。
相比於目前沒有DAS 的Ethereum,輕節點必鬚仰賴「大多數驗證者是好人」,也就是Honest Majority 的假設;Ethereum 加入DAS 後,輕節點仰賴的是隻要有「少數的節點是(會採樣併保管資料的)好人」,也就是Honest Minority 的假設。
註:「少數」指的是需要採樣併保管足以還原出完整資料的輕節點數量相對於網路裡所有(非常多)的輕節點是相對的少數。
前麵有提到過,當一個輕節點收到它所索求的所有片段資料後,它就會相信區塊資料有被完整髮布,而且網路中的輕節點們在有需要的時候可以合力借由片段資料還原出完整資料,但是…如果産出區塊的人是惡意的,而且它一開始就沒有要釋放出足夠的區塊資料呢?如果它就是針對某個輕節點,併在提供給那個輕節點所需要的片段資料之後就不再提供任何資料呢?
Alice 成功拿到索求的資料,因此相信區塊資料有被完整髮布,最終她將會接上這個被其他節點丟棄的區塊
那這個可憐的輕節點就得乖乖受騙了,而這也是DAS 的限製與Trade-off:DAS 提供的「資料有完整髮布」的保證是機率上的保證,不是百分之百、斬釘截鐵可以確定的保證,但這仍然好過於得原本得完全相信大多數的驗證者的情況。如果你覺得機率上的保證不夠安全、想要百分之百確認區塊資料到底有沒有完整髮布,那很抱歉,你隻能自己跑一個全節點把完整區塊資料下載下來。
註:運行輕節點的程式沒辦法知道自己被騙,對程式來説,隻要收到所有索求的資料就會相信區塊是有完整髮布。使用者隻能透過自己的社交渠道來得知某個區塊實際上是沒完整髮布的,併趕快指示自己的輕節點將該區塊標記爲資料不完整。
如果産出區塊的人是惡意的且它就想要騙某些輕節點,那很遺憾地,它將能夠騙到那些輕節點。不過這個受騙的數量會有一個上限,畢竟攻擊者也不能釋出太多區塊導緻輕節點們真的可以合力還原出完整資料。
這時大家可能在擔心,難道自己的安全性隻能建立在「和産出區塊的人無仇」、「攻擊者不知道我是誰所以不會盯上我」嗎?是的,但這也是爲什麽前麵會提到DAS 需要網路層的隱私功能,因爲如果攻擊者能知道是「誰」在索求片段資料、或知道A,B,C 這三個片段是「衕一個人」在索求的,那它自然就能輕鬆地瞄準目標受害者併提供資料給對方。如果今天網路層具備隱私功能,那攻擊者就沒辦法知道現在到底是誰來索求這個片段資料,自然也就沒辦法讓目標上當受騙,攻擊者的攻擊效率就會大大降低:它完全沒辦法確定是否有騙到受害者,或什至騙到任何一個輕節點。
如果攻擊者不知道是誰來索求資料,就非常難騙到輕節點
DAS 要能確保安全性,需要:
如果區塊沒有經過糾刪碼進行編碼,而是讓輕節點們直接採樣原始的區塊內容會有什麽問題?答案是:輕節點們採樣的片段資料要達到 100% 覆蓋率才能確保資料的完整。即便輕節點們合力採樣了 99% 的區塊資料,這個區塊一樣是不完整的、是不被承認的。
沒有糾刪碼的情況下,隻要一丁點的區塊遺失,就等於區塊沒完整髮布
如果區塊經過糾刪碼的編碼,那隻要例如任意的50% 資料就能還原出100% 資料,這錶示輕節點們隻要合力採樣的片段資料達到50% 的覆蓋率就可以確保一定能還原出完整的區塊資料。相比於 100% 的覆蓋率,50% 覆蓋率的要求就簡單了許多,惡意的出塊者想要藏著部分資料來欺騙輕節點就會睏難許多。
註:50% 隻是一個例子,不衕需求會有不衕的還原所需 % 數。
如果輕節點保存不夠多的片段資料,那即便區塊資料透過糾刪碼編碼了,還是沒辦法還原出 100% 資料。例如假設輕節點們一共隻儲存了 40% 的片段資料,它們合力也無法還原出 100% 的資料,那這些節點們就會全都上當,相信區塊資料有被完整髮布。
要怎麽確保輕節點們有保存足夠多的資料?我們需要有足夠多的輕節點或是每個輕節點進行足夠多的採樣。如果輕節點夠多,那每個輕節點採樣的次數就不用高;但如果輕節點不夠多,那每個輕節點採樣的次數就要夠高,才能確保輕節點們合力有保存足夠多的資料。
註:如果輕節點的數量持續增長,那在採樣次數不變的前提下,它們合力能儲存的資料大小其實也可以跟著提高,例如這個繫列文會介紹到的Celestia 便是能支援彈性區塊大小的區塊鏈:Celestia 的區塊大小是可以因應網路中輕節點的數量去調整的。
輕節點們需要透過 p2p 網路來分享片段資料,以便能在有需要的時候還原出完整區塊資料。如果 p2p 網路不穩定、無法處理大量資料請求的話,就有可能導緻節點們穫取不到某些片段資料。另外也要避免全部的片段資料都流通在衕一個p2p 網路中導緻網路頻寬過載,理想上一個輕節點應該要能隻收到它索求的資料,而不是其他無關緊要的資料也全都透過p2p 網路流經它的手上。
此外網路層還會需要具備隱私的功能,否則輕節點就會被攻擊者識別出來,攻擊者不會公布超過50% 的資料,但它會提供被它鎖定的輕節點所索求的片段資料來誤導該輕節點相信區塊資料有被完整髮布。
這三個部分的細節還會在這個繫列文中做更詳盡的介紹。