Vitalik:分片+數據可用性採樣
作者| Vitalik Buterin
作者| Vitalik Buterin"作者| Vitalik Buterin"作者| Vitalik Buterin
為了免去節點親自下載全部數據的負擔,可以將這兩種技術互相疊加起來對大量數據的可用性進行驗證:1) 由隨機抽樣的委員會提出證明;2) 數據可用性抽樣(data availability sampling, DAS) 。
一級標題
一級標題
一級標題
白話“隨機抽樣委員會”
假設你有大量數據,例如16 MB,這是eth2 鏈(至少在初期) 每個slot 能處理的數據量。我們將這些數據表現為64 個blobs,每個大小為256 kB。假設我們還有一個PoS 系統,驗證者數量約為6400。我們如何在1) 不需要任何人下載所有數據,2) 不給運行少量驗證者的攻擊者可乘之機的前提下驗證這些數據?
RNG (隨機數生成器) 的種子在驗證者存款之後選定,每個驗證者的索引都是固定的,因此攻擊者無法嘗試使其所有驗證者進入同一個委員會。攻擊者可能會走運,但前提是他們控制所有驗證者的1/3 以上。
一級標題
一級標題
一級標題
白話“數據可用性抽樣”
每個節點(包括沒有參與質押的客戶端節點) 對每個blob 進行檢查,他們不需要下載整個blob,而是私密地從中選擇N 個隨機索引,然後嘗試在這些位置下載數據。
糾刪編碼
正文
正文
正文
為了避免攻擊者提供了50-99% 可用數據的情況(這可能使得某些客戶端拒絕某blob 之後又被其他客戶端接受),我們使用了一種叫作糾刪編碼(erasure coding) 的技術。糾刪編碼使得我們可以使用如下方式對blobs 進行編碼:如果某blob 中超過一半的數據已經發布,網絡中的任何人都可以對剩餘數據進行重建和發布。
一旦重新發布的數據廣播完畢,起初拒絕該blob 的客戶端會收斂為接受(注意,接受blob 沒有時間限制,每當客戶端收到對其所有抽樣索引的響應時,它就會接受可用的blob )。
我們使用多項式承諾(polynomial commitments),具體來說是Kate 承諾而非默克爾根作為數據blobs 的printers,因為多項式承諾能夠使我們輕易證明一個給定的值實際上是對特定次n 多項式在所需坐標處的正確估值。不然的話,我們將不得不(例如使用SNARKs) 證明默克爾根編碼一個低次多項式,或者依賴於欺詐證明在編碼不正確的情況下進行廣播(這增加了高複雜度以及更多的同步假設) 。
一級標題
一級標題
一級標題
有了委員會機制還需要數據可用性抽樣嗎?
如果只借助委員會的,可能有以下幾個劣勢:
➤ 在抗量子攻擊方面,DAS 比委員會機制稍容易些(可能需要後量子聚合簽名)。
一級標題
一級標題
一級標題
有了數據可用性抽樣還需要委員會機制嗎?
如果只借助DAS 可能又會產生以下幾個問題:
➤ DAS 是一個尚未經過測試的新技術,其核心部分(參見此處) 其實去年才開發完成。因此在DAS 崩壞或是開發時間意外延長,使用委員會提供保障是可取的。
➤ DAS 的延遲比委員會高。
➤ DAS 的極端情況更多,委員會可以協助解決。一個例子就是在僅使用DAS 機制的系統中,很難避免信標區塊提議者最早發起DAS 請求以驗證blob 的可用性。
這會增加攻擊者發布不可用blob 並僅對提議者的請求進行合響應的風險。這不會導致網絡的其他節點接受不可用的blob,但可能會使得其他攻擊更為容易,使誠實提議者構建的信標區塊被拒絕並從主鏈上被分叉出去。委員會可以對這一點進行補救。
➤ 委員會機制的向前兼容性更強,使得在將來能在分片中加入執行功能。
數據可用性的重要性?挑戰又何在?
這已經在別處討論過了,篇幅有限我就不貼到此處,但我建議閱讀:
➤A note on data availability and erasure coding (對數據可用性最初的介紹)
➤ Alberto Sonnino、Mustafa Al-Bassam 和Vitalik Buterin 聯合發表的論文對相關概念進行了擴展
➤ The Dawn of Hybrid Layer 2 Protocols 對數據可用性中的博弈論進行了論述
➤ Base Layers and Functionality Escape Velocity,基於上述概念對數據擴容性部分進行了描述
➤ The Data Availability Problem (Ethereum Silicon Valley Meetup),以視頻形式對數據可用性問題進行了討論
有一點需要明確,BitTorrent 和IPFS 以及類似的系統並沒有解決數據可用性問題。儘管BitTorrent 是很好的可擴容的數據發布技術,但它不能就是否有可用的數據達成共識,這為一種“極端案例”攻擊提供了可能性,在某條數據發佈時,節點之間可能發生分歧,使得混合型二層協議無法發揮效用。為了就數據可用性達成共識,需要使用本文檔中描述的更強大的技術。
分片如何在P2P 層上運作?
為了達到分片的擴容性目的,我們需要一個P2P 系統,這樣就無需每個節點都下載所有數據。所幸我們在階段0 已經有了一種P2P 層分片形式。具體來說,有64 個子集已經用於證明聚合。每個驗證者只需要存在於主要的“整體子網” (global subnet) 和他們自己的證明聚合子網,而無需從其他63 個聚合證明子集獲取任何數據。
在委員會+ DAS 型分片中,我們將其擴展為“網格”架構,有2048 個水平子集子網(horizontal subnets),即每epoch 的每個分片-slot對中存在一個子集,以及2048 個垂直子網(vertical subnets),即每個blob 中的每個索引存在一個子集。
在每個slot 中,我們每個分片都會選出一個提議者。每個提議者都有權提議一個blob:一個最大為512 kB 的任意數據塊(我們可以將其理解為約512 字節的“樣本”集合),以及糾刪編碼擴展和額外的證明,以便對blob 中的每個部分進行獨立驗證。
Structure of a blob blob 的結構
一個blob 的“主體”結構包括原始數據、擴展數據以及證明(如果需要的話,為了提高數據效率,可以省略擴展數據,因為接收blob 的每個節點重建它的速度都相對較快)。
Blob 的“頭部”包含其相應的Kate 承諾,以及其他一些數據(slot、分片和長度證明) 以及提議者的簽名。
Blob 的廣播過程
當一個blob 被廣播時,其頭部會被廣播到整體子網(global subnet),主體部分則會被廣播到相應slot 和分片ID 的水平子網。
在實際情況中,會存在2048 個水平子網,以使每個epoch 中的每個分片-slot對存在對應的一個水平子網。這樣做是為了確保每個驗證者都可以加入一個水平子網,他們將僅接收到到其所處委員會的相應的blob (不包括他們參與抽樣的少量垂直子網)。
➤ 整體子網(Global subnet)
廣播區塊
正文
正文
正文
Blob 提議者可以將樣本分發到所有子網,但不必成為子網的一部分。此過程如下:
➤ 發布:提議者在正確的水平子網中發布blob,每個樣本附帶一個證明
➤ 直接樣本分發:水平子網中的其他參與者將區塊發佈到他們所在的每個垂直子網中
➤ 間接樣本分發:提議者向對等節點公佈幾個其所在的垂直子網。因此,水平子網中的每個參與者還可以查看其對等節點所在的垂直子網,並向這些對等節點廣播相應的區塊
假設數據塊大小為512 字節,且數據blob 最大為512 kB (除去糾刪編碼),在包含糾刪編碼時約為1 MB,因此存在2048 個垂直子網。如果每個節點存在於15 個私密的垂直子網,5 個公共垂直子網並且有50 個對等節點,假設在最壞情況下每個水平子網(僅委員會) 中有128個成員,則單單是子網成員將直接分發到128 * 20 = 2560 個子網(除去冗餘發布後約為1461),如果加上對等節點,將增加到128 * 4 * 50 = 25600 個子網。
3. 分發:重複上述的分發步驟
一級標題
一級標題
一級標題
信標鏈如何工作?
在每個slot 中,我們為64 個分片中的每個分片隨機選擇一個提議者。提議者有權創建一個分片blob,並通過上述過程對其進行廣播,並且將該blob 的ShardHeader 廣播到全局子網。 ShardHeader 能夠被打包到信標鏈上的同個slot 中,也可以包含在同個/下個epoch 中的任何後續slot 中。
信標鏈會跟踪PendingShardHeader 的對象列表。 PendingShardHeader 會存儲:1) ShardHeader 中的關鍵信息(分片和slot,該blob 的承諾及其長度);2) 追踪隨機選擇的委員會中哪些驗證者在blob 中籤名的位域(實際上就是階段0已經引進的委員會)。 AttestationData 結構擴展為包含一個shard_header_root,即選定驗證者進行投票的ShardHeader 的根哈希。如果證明者看不到已分配給他們的分片-slot對的有效且可用的分片blob,則他們也可以對空的根哈希進行投票。
如果ShardHeader 得到了委員會中2/3 驗證者的證明,就會立即得到確認。如果在下一個epoch 結束時,ShardHeader 得到委員會的支持比其他任何ShardHeader 更多的支持,則在該epoch 結束時進行確認。
分叉選擇規則
分叉選擇規則發生了改變,以便僅在該區塊中確認所有blob 或其祖先都通過了可用性檢查的情況下,該區塊才有效。這稱為緊密耦合(tight coupling):如果一條鏈指向(已確認) 某個無效blob,則整條鏈都被視為無效。這是與“側鏈”結構的主要區別:在側鏈中,側鏈可能會失效,而主鏈仍然有效。
這裡有對緊密耦合的進一步探索,以及為什麼它是有價值。
添加了一種類似於EIP-1559 的機制,按字節計費分片數據,並對價格進行了調整:如果區塊的平均容量超過了50%,則提升費用,反之則降低。因此,指標是50% 的平均區塊大小。
一級標題
一級標題
一級標題
主要的新假設是“誠實的少數DAS 假設”:存在足夠多的節點樣本,攻擊者必須要發佈區塊中一半以上的內容。如果一個blob 中有2048 個樣本,則需要恢復1024 個樣本(考慮到某些客戶端將對相同的點進行抽樣,因此2048 * ln(2)~= 1419),並且每個客戶端都進行20個採樣,則如果每個分片有約超過70 個客戶端在進行抽樣的話就可以認定係統是安全的。
一級標題
ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ETH中文站。若需長期轉載,請聯繫eth@ecn.co進行授權。
正文
公眾號:ETH中文站
Protolambda’s work-in-progress implementation
原文鏈接:https://hackmd.io/@HWeNw8hNRimMm2m2GH56Cw/sharding_proposal
ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ETH中文站。若需長期轉載,請聯繫eth@ecn.co進行授權。
公眾號:ETH中文站
網站:ethereum.cn


