4

資料可得性重新命名:用 Data Publication 取代 Data Availability

 9 months ago
source link: https://medium.com/taipei-ethereum-meetup/data-publication-yes-data-availability-no-baac93be223f
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Data Availability — 資料可得性

隨著模組化區塊鏈的設計越來越流行,大家也越來越常提到 Data Availability 這個詞。資料可得性在區塊鏈的情境底下指的是出塊者(Proposer,例如 PoW 的礦工或是 PoS 的驗證者)發布的區塊內容是否可取得,如果不可取得則其他節點也不會承認該區塊。

Available 就代表資料永遠都可取得?

目前在區塊鏈情境下 Data Availability 這個詞產生最大的困擾是它沒有區分資料發布(Data Publication)與資料儲存(Data Storage)兩種性質,讓大家以為資料可得就表示資料 永遠 都可得,但實際上確保區塊的有效性及區塊鏈的安全性並不需要區塊資料 永遠 都可得。而這也是這一篇文章的目的 — 推廣用 Data Publication 取代 Data Availability 這個詞。

Data Publication — 資料發布

但為什麼會考慮區塊資料是否可得?節點不是都會下載完整區塊資料嗎?是的,在過去及當前的區塊鏈像是 Ethereum,節點都會下載完整的區塊。但隨著 Ethereum 朝著資料分片(Data Sharding)的設計前進後,節點將不會再下載完整的區塊內容,因為這就是分片的目的 — 如果所有節點都要下載每一個區塊的完整內容,那區塊大小就永遠不能擴大,區塊鏈也就沒辦法進行擴容,因此大家要各自負責不同區域(分片)的資料。在分片的世界中,為了避免節點相信一個不完整區塊是完整的,節點除了檢查「區塊是有效的」,必須也要檢查「區塊是完整的」,也就是出塊者真的有發布完整的區塊內容到區塊鏈網路上。檢查通過了節點就會承認該區塊,將它接上自己手上的區塊鏈,否則就會忽略它。

註:「檢查區塊是否完整發布」的方法可以透過像是信任一個 Data Availability Committee 的方式,或是所有人一起進行 Data Availability Sampling 對區塊採樣的方式,但這裡不會再深入介紹這些細節。

如果一個區塊的完整內容有即時發布,那網路中的節點很快就會承認該區塊,下一個出塊者也會接在該區塊之後繼續產出新區塊;如果出塊者沒有即時發布或是網路層可能出現問題導致區塊資料沒有即時傳播出去,那就有可能造成該區塊被部分節點以及下一個出塊者忽略,因此產生分叉。不過其實目前的區塊鏈運作就是這樣,有時候出塊者可能下線或是因為網路太差導致它的區塊沒有即時被廣播出去,所以該區塊就會被下一個出塊者跳過而產生分叉。

註:雖然區塊沒有及時發布導致被在那個當下被忽略,但這不表示該區塊是不合法的。它可能是合法的,只是沒有即時發布導致變成 Orphan Block。

因此可以看到一條區塊鏈能順利產出新區塊且很少發生分叉,仰賴的是區塊有即時被(完整地)發布,讓當下網路中的節點都能正確驗證其有效性及完整性,並達成一致共識。而當區塊接上最長鏈、Finality 被確認後,區塊內容是否可得就不再影響安全性,因此在一段時間過後區塊內容就可以被刪掉。

註:這裡「可以刪掉」的區塊內容指的是區塊中的 Blob 資料,Blob 會在 EIP-4844 中被引入,是專門用來暫放資料而不是用來在 EVM 執行的資料格式。在 Ethereum 的資料分片設計中,區塊還是有一部分資料是會在 EVM 執行的,這些就不能刪掉,而另外一大部分會是可以刪除的 Blob 資料。更多 EIP-4844 介紹可以參考這篇

不過要注意這裡會說區塊要「即時」發布是因為這裡的情境是在區塊鏈的情境底下:在區塊鏈中區塊必須要即時發布才能避免變成 Orphan Block。但如果跳出區塊鏈的情境,單純討論資料發布的話,就只會有資料「是否」發布的問題,不會有時效性的問題。

Data Storage — 資料保存

那會不會未來有一天某些 Blob 再也存取不到?這是有可能的,如果這些 Blob 裡的資料沒有人有興趣,那就不會有人特別保存下來。等到最後一個節點把它手上的那一份 Blob 資料也刪除後,網路中就再也沒有人可以提供該 Blob 資料了。這其實就像 BitTorrent 等 p2p 檔案共享服務一樣,熱門的資料會被備份到很多節點身上,但乏人問津的資料有一天就會從網路中消失不見。但總之,Ethereum 的安全性需要的是出塊者出塊當下即時發布完整區塊內容,讓大家能達成共識,等到共識達成、Finality 確認後,區塊內容就由有興趣的人自己保存即可。

目前想像未來大部分會使用 Blob 資料的都會是 Rollup,所以像是 Rollup 項目方、在該 Rollup 提供基礎建設服務的項目、建立該 Rollup 瀏覽器的服務等等的角色都會主動下載並保存該 Rollup 上傳的 Blob 資料,畢竟它們提供的服務就是基於這些資料。

  • Data Availability 資料可得性這個詞會讓人以為資料永遠都會是可得的,但資料分片設計中區塊鏈並不需要區塊資料永遠可得才能確保安全性,而是在出塊者發布區塊當下能即時發布完整區塊內容,讓大家能達成共識、讓區塊通過 Finality 確認,之後區塊內容是否可得就不再影響安全性
  • 因此 Data Availability 這個詞應該改名為 Data Publication,指的是資料是否有被即時、完整地發布
  • 而共識達成、Finality 確認後的區塊資料的保存問題則是 Data Storage 的問題,有興趣的人自然會保存資料
  • Data Storage 和 Data Publication(Data Availability)是無關的, 大家記得不要再假設資料 永遠 都可存取得到

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK