Eth2 Staking 系列:在分片內開展共識

買賣虛擬貨幣

來源 | UnitimesSharding (分片) 是 eth2 對於 eth2 的諸多改進之一,此術語源自資料庫研究,一個分片 (shard) 代表著一個更大整體的一部分。在資料庫和 eth2 中,分片意味著將整個系統的儲存和計算分到多個分片 (shards) 中,每個分片將單獨處理,並根據需要將處理的結果合併起來。具體來說,eth2 將實現許多條分片鏈 (shard chains),其中每條分片鏈都與 eth2 鏈有著類似的功能。這帶來了系統大規模的可擴充套件性提升。然而,在 eth2 中有個不那麼知名的 sharding 型別。從協議的設計角度,可以說它更令人興奮。這就是對共識進行分片 (sharded consensus,也即在分片內開展共識)。

在分片內開展共識

就像執行最慢的節點的處理能力會限制整個網路的吞吐量一樣,單個驗證者 (validator) 的計算資源也會限制可以參與到協議共識中的驗證者的總數量。由於每個新增的驗證者都會對系統中其他每個驗證者帶來額外的工作,所以在某個時刻,資源最少的驗證者將不再能夠參與共識 (因為該驗證者將無法再追蹤所有其他驗證者的投票)。對此,eth2 採用的解決方案是在分片內開展共識。拆分開來Eth2 將時間分成兩個時間段:slot 和 epoch每個slot都是12秒,預計每個 slot 期間會有1個新的區塊被新增進 eth2 鏈中。區塊 (block) 是一種將交易 (translactions) 和驗證者的投票 (votes) 打包上鍊的機制,正是這種對交易的處理才使得區塊鏈有了用武之地。每個epoch由 32 個 slots (6.4分鐘) 組成,在每個 epoch 期間,信標鏈將執行與維護整條鏈相關的所有計算,包括:證明和敲定新區塊,給所有驗證者傳送獎勵和懲罰等。正如我們此前中提到的,驗證者們將被分配到委員會(committees) 中來完成他們的工作。在任何時候,每個驗證者都是1個信標鏈委員會和1個分片鏈委員會的成員,並且在每個 epoch 期間每個驗證者都會被要求去進行1次證明(attestation)– 證明就是對在某個 slot 期間被提議的信標鏈區塊(beacon chain block) 進行的投票(vote)。Eth2在分片中開展共識的安全模型是基於這樣的理念:所有委員會中的驗證者或多或少代表了整個驗證者集合。比如,如果我們遇到了這種情況,即所有驗證者中有33%的驗證者懷有惡意,那麼有可能這部分惡意驗證者會被分配到同一個委員會中。對於我們的安全模型來說,這將是一場災難。

上圖中😇表示誠實驗證者,😈表示惡意驗證者。圖中的紅色區域表示被惡意驗證者控制的分片,黃色區域表示安全但陷入停滯狀態的分片,綠色區域表示正常執行中的分片。圖中左半部分表示如果不打亂驗證者將可能出現的情況;右半部分表示將驗證者打亂之後,惡意驗證者將被打亂分配到不同的分片中。因此,我們需要透過某種方式來確保這種災難性情況不會發生。換句話說,我們需要透過某種方式來確保,如果有33%的驗證者是惡意的,那麼需要確保單個委員會中只有大約33%的驗證者是惡意的。[備註:也即需要確保將所有這些33%的惡意驗證者打亂並分配到不同的委員會中,從而使他們不會集中在某幾個委員會中]事實證明,我們可以透過做兩件事來實現這一點:

確保每個委員會中的驗證者分配是隨機性的;

設定每個委員會的最少驗證者數量;比如,每個委員會中包含了128個隨機分配的驗證者,某個擁有 1/3 驗證者的攻擊者控制某個委員會中的 2/3 以上的驗證者的概率是微乎其微的(概率小於2^-40)組合起來驗證者的投票稱為證明(attestations)。一個證明由許多元素組成,具體來說包括:

就當前的信標鏈鏈頭 (beachon chain head) 進行的投票;

對哪個信標區塊應該被證明/敲定的投票;

對信標鏈的當前狀態的投票;

同意該投票的所有驗證者的簽名。透過將盡可能多的元件組合成一個證明 (attestation),可以提高系統的整體效率。這是可能的,因為節點只需要對證明 (attestations) 進行數學運算,就可以知道信標鏈和每個分片鏈的狀態,而無需對信標區塊和分片區塊的投票和簽名分別進行檢查。如果每個驗證者都會產生自己的證明 (attestation),且每個證明都需要由所有其他節點進行驗證,那麼成為一個 eth2 節點的成本會非常昂貴。這就將我們帶向了聚合(aggregation)。證明 (attestations) 被設計成可以很容易地組合起來,這樣如果兩個或更多的驗證者有著帶有相同投票的證明,那麼就可以透過將這些證明的簽名欄位新增進一個證明中,從而將這些證明進行組合。這就是所謂的證明的聚合(aggregation)。就其結構而言,委員會 (committees) 將具有易於聚合的投票 (證明),因為分配在同一個分片中的驗證者對於該分片狀態和信標鏈應該有著相同的投票。這就是 eth2 擴充套件驗證者數量的機制。透過將驗證者分配到委員會中,驗證者只需要關心其他被分配到同一個委員會中的驗證者,且只需要檢查來自其他每個委員會的非常少的聚合證明。簽名聚合Eth2 使用 BLS 簽名 --這是一種定義在幾條橢圓曲線上的簽名方案。在特定曲線上,每個簽名是 96 位元組。如果有 10% ETH 被質押進 eth2 中,那麼 eth2 將大約有 350,000 個驗證者。這意味著某個 epoch 期間的簽名的大小將是 33.6 MB,這樣每天就是大約 7.6 GB。這種情況下,所有關於 eth2 的狀態大小在2018年已經達到了 1 TB的錯誤說法,將會在 eth2 之後的133天之內成為事實 (僅基於簽名而言)。其中的解決方式在於,BLS 簽名是可以被聚合的:如果 Alice 產生了簽名 A,且 Bob 的簽名 B 是對同一個資料進行的簽名,那麼 Alice 和 Bob 的簽名都可以只需透過儲存 C 的方式來進行儲存和檢查 (其中 C = A + B)。透過使用簽名聚合,在每個 epoch 期間,每個委員會只需儲存和檢查 1 個簽名就可以。透過這種方式,能夠將每天的儲存需求減少到 2 MB 以下。

總結透過將驗證者分配到各個委員會中,驗證 eth2 所需的工作減少了幾個數量級。對於驗證信標鏈和所有分片鏈的節點來說,只需要檢視每個委員會的聚合證明 (aggregated attestations)即可。透過這種方式,節點可以知曉每個分片的狀態,同時知曉驗證者認同哪些區塊是 (或者不是) eth2 鏈的一部分。委員會機制幫助實現了 eth2 的兩個設計目標,這兩個目標我們在本系列的第一篇文章中提到過:即參與到 eth2 網路必須在消費級膝上型電腦上就可以實現,且eth2 必須支援儘可能多的驗證者來努力實現最大程度的去中心化。說到數字,雖然大多數拜占庭容錯式的 PoS 協議都可以擴張至數十個 (在個別情況下,可以擴充套件到數百個) 驗證者,但eth2 能夠擴充套件至數十萬個驗證者,這有助於無需就延遲性和吞吐量做出妥協的情況下提升系統安全性。

原文連結:https://blog.ethereum.org/2020/03/27/sharding-consensus/

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;