Sharding(分片)是 Eth2 對比 Eth1 的許多升級之一。這個名詞來源於數據庫研究,就是將一個大的數據庫切分為許多部分,而一個分片就是一個部分。本文源自於 Ethereum 的 Carl Beekhuizen 之文章 《Validated, staking on eth2: #3 – Sharding Consensus》,由專欄作者 以太坊愛好者編譯、撰寫及整理。
那麼放到 Eth2 和數據庫的語境下,分片就意味著要把整個系統的存儲和計算切分開來、相互獨立地處理各分片,然後隨實際需要組成最終結果。具體來說,Eth2 系統中包含了許多分片鏈,而每一個條分片鏈的功能(capability)都與 Eth1 區塊鏈相似,這就能帶來大幅度的可擴展性提升。
不過,在 Eth2中還有一種不那麼為人所知的分片類型,而且從協議設計的角度來看,這個類型可能更為激動人心:分片化的共識(sharded consensus)。
分片化的共識
就像網路中最慢節點的處理能力限制了網路的吞吐量,單個驗證者的計算資源也決定了能夠參與共識的驗證者總數量。因為每新增一個驗證者,都會給系統中的所有其他驗證者帶來額外的工作量,那麼隨著驗證者數量的增加,最終會達到一個狀態:資源最少的那個驗證者將不再能夠參與共識(因為它不再能夠全程追蹤所有其他驗證者的投票)。那麼 Eth2 處理這個問題的方案就是 分片化的共識。
分析
Eth2 的系統中有兩種基本的時間單位,時隙(slot)和時段(epoch)。
一個時隙是 12 秒,這是我們預期可出一個區塊的時間;區塊其實是一種讓驗證者的投票能集合發佈到鏈上的機制,不止於包含交易讓鏈變得有用。
一個時段由 32 個時隙組成(因此是 6.4 分鐘),在一個時段中,信標鏈要執行所有跟鏈的維護相關的計算,包括:合理化及敲定新區塊、給驗證者發放獎勵和懲罰。
我們在本系列的第一篇文章中提到,驗證者會被分配到不同的委員會中執行工作。那麼在任一時刻,都有驗證者同時既是信標鏈委員會成員、也是某一個分片鏈委員會的成員;每個驗證者在一個時段中都要發出見證消息一次 —— 為已經提出的信標鏈區塊投票。
Eth2 的分片化共識的安全模型,基於這樣一個觀念:讓委員會在某種程度上就是整個驗證者集合的準確統計學代表。
舉例而言,如果整個驗證者集合中有 33% 的驗證者是惡意的,那麼他們可能就會進入到同一個委員會中。那就完蛋了。
所以,我們需要確保事情不至於如此。換句話來說,我們需要保證的是,如果 33% 的驗證者是惡意的,那麼在一個委員會中只有約 33% 的驗證者是惡意的。
我們需要兩個舉措來實現這一點:
-
保證驗證者的委員會分配是隨機的 -
組成委員會有數量下限要求
舉個例子,如果單個委員會由 128 個隨機選出的驗證者組成,那麼一個控制了全網 1/3 驗證者的攻擊者能夠控制單個委員會的 2/3 驗證力量的概率是非常非常小的(概率低於2^-40)。
延伸閱讀:以太坊 2.0 的基本架構與設計抉擇
延伸閱讀:如何理解以太坊 2.0?先從理解 12 個專業術語開始
綜合
驗證者提交的投票叫做「見證消息」。見證消息由幾個部分組成:
-
對信標鏈頂端區塊的投票 -
對合理化信標區塊 / 確定化信標鏈區塊的投票 -
對分片鏈最新狀態的投票 -
所有同意該投票的驗證者的簽名
把盡可能多的部分都組合到一條見證消息中,系統的整體效率便得以提升,因為,在檢查驗證者的簽名時,不再需要分別驗證對信標鏈區塊的投票和對分片鏈區塊的投票,節點只需基於見證消息做運算,即可得知信標鏈區塊的狀態和每一條分片鏈的狀態。
如果每一個驗證者都提交了自己的見證消息,而每一條見證消息都需要被所有其它節點單獨驗證一次,那麼 Eth2 的節點的開銷可能會變得很大。這就是為什麼我們需要「聚合技術」。
見證消息被設計成容易組合的形式,因此,如果有兩個乃至更多驗證者做了同樣的投票,那就可以用一條見證消息把他們的投票都匯總起來,只需把簽名字段放在一起即可。這就是「聚合」和含義。
委員會的投票在根本上來說也是易於聚合的,因為這些驗證者都被分配到了同一個分片上,因此分片狀態的投票和對信標鏈區塊的投票很可能是相同的。這就是 Eth2 能隨著驗證者數量的增加而擴展吞吐量的機制。通過把驗證者打散到委員會內,驗證者將只需關心自己所在委員會的成員,也只需檢查極少數從其它委員會處傳來的、已經聚合過的見證消息。
簽名聚合
Eth2 使用了 BLS 簽名方案 —— 一種在多條橢圓曲線上得到定義、對簽名聚合較為友好的方案。在方案所選定的曲線上,單個簽名的大小是 96 字節。
如果占總量 10% 的 ETH 參與了質押,則 Eth2 會擁有約 35 萬個驗證者。這就意味著,單個 epoch 產生的簽名數據量大小可能會達到 33.6 MB,那麼一天就是 7.6 GB。那麼,只要 133 天,簽名數據就會超過 1 TB。
解決方案是,BLS 簽名是可以聚合的。如果 Alice 提交了簽名 A,而 Bob 所提交的簽名 B 是對相同數據籤的名,那麼只需存儲 C = A+B,就能驗證 Alice 和 Bob 的簽名。使用了簽名聚合技術,整個委員會的驗證者前面都可以聚合成一個簽名。這樣就能將簽名數據的存儲需求降低到每天 2 MB。
延伸閱讀:入門知識|分片技術、BFT-DPOS、Sharding、TPS 名詞解釋
總結
把驗證者分配到不同委員會中的設計,讓驗證 Eth2 所需付出的工作量降低了幾個數量級。
對於一個想要驗證信標鏈和所有分片鏈的節點來說,它要做的僅僅是監測來自每一個委員會的聚合見證消息,只需如此便可知道每條分片鏈的狀態,以及各驗證者對哪些區塊屬於 / 不屬於信標鏈主鏈的看法。
因此,委員會機制幫助 Eth2 實現了兩大設計目標:只需消費者級別的筆記本即可參與 Eth2 網路、支持盡可能多的驗證者來實現盡可能的去中心化。
用數字來說明:大多數拜占庭容錯式的權益證明協議只能支持數十位驗證者(在某些案例中可支持數百位驗證者),但 Eth2 可以支持數十萬驗證者同時為系統安全性作貢獻,又不犧牲執行時延和吞吐量。
【以太坊2.0 Staking 指南系列】
- 以太坊 2.0 最新 Staking 指南〈零〉:Eth2 的各個階段
- 以太坊2.0 Staking 指南〈壹〉: 激勵機制 Incentives
- 科普|Eth2 Staking 指南〈貳〉: FLP 不可能原理與 Eth2 的共識機制
📍相關報導📍
以太坊 1.0 和 2.0 有什麼區別?關於 Ethereum 2.0 的 「17 個常見問題」
Vitalik 聊以太坊 2.0:即將過時的以太坊礦機可用於「零知識證明」
【新手科普】快速認識以太坊網路的治理全景
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務