Polkadot網絡本質上是一個異構多鏈的區塊鏈網絡,未來網絡中會有非常多不同共識,不同結構的平行鏈。每條平行鏈都有自己特有的數據、P2P網絡架構,并通過鏈接到Polkadot中繼鏈來一起共享安全性。
平行鏈到中繼鏈上的數據消息傳輸、中轉和驗證確認等非常重要的工作職能,都是需要中繼鏈上的驗證者來完成的。每個驗證者本身不會包含太多的數據,不需要占用網絡的太多帶寬和資源,以此來保證波卡網絡可以不斷拓展。
波卡、Cosmos 和 ETH 2.0 的驗證人數量比較
當我們來討論Polkadot網絡應該有多少數量的驗證人這個話題時,我們可以比較一下其他多鏈網絡的驗證人數量和架構情況。
Polkadot的測試網絡最初會設置大約250個驗證人,然后一直拓展到至少1000個。我們的目標設想是,每個平行鏈分配10個驗證人。Polkadot測試網絡剛啟動時,并不會有太多的平行鏈,可能大約只有10條平行鏈。然而我們會努力拓展開發到100條左右的平行鏈,每條平行鏈10個驗證人的話,100條平行鏈就是1000個驗證人。
相比較而言,Cosmos網絡中的每條鏈會自己選擇100個驗證人,有一些驗證人可能在多條鏈中都擔任驗證人的角色。
而以太坊2.0的架構,則是有1024個分片,每個分片擁有300-1000個驗證人,因而這是非常多數量的驗證人的需求。以太坊2.0獲得這么多的驗證人資源,他們的機制是每32個節點產生一個驗證人,因此如果我們需要過1000個節點,就需要通過30個驗證節點。
為什么要控制驗證人數量
我們從通訊和網絡限制的角度來分析下,為什么說驗證人是稀缺資源,要控制其數量。
我們要了解到區塊鏈網絡中的一臺機器上可以運行多少個驗證人;一臺機器可以接入多少個P2P分布式網絡;網絡擁有多少個連接點和帶寬。因此,一個區塊鏈生態中并沒有那么多人可以參與來做驗證人,本質上驗證人是一個稀缺的資源。因此我們才需要在架構設計上去控制驗證人的數量。
從Polkadot網絡中當個平行鏈的視角來看,每個平行鏈中的收集人會來產生平行鏈的區塊,之后數據會提交給驗證人來驗證,當絕大多數的驗證人驗證并簽名了這個區塊的區塊頭,此平行鏈的簽名驗證過的區塊頭就會進入到中繼鏈的區塊。
因此在每個平行鏈10個驗證人這樣的分配機制下,我們僅需要5-7個驗證人來驗證和簽署平行鏈中新產生的區塊。
波卡如何向平行鏈提供安全
然而,因為有很多平行鏈在不斷產生新區塊,會有某一些驗證人串通作惡,讓無效和作惡區塊被驗證確認寫入到Polkadot中繼鏈網絡的情況發生。
從Polkadot到白皮書中有介紹,面對這樣的潛在作惡的情況,Polkadot是依靠釣魚人的決策去挖掘和指出那些無效區塊來保證Polkadot的網絡安全的。
當釣魚人發現某一個區塊是無效的,他們需要質押一些DOT代幣并提出這個區塊是無效的指令,因而這個區塊會需要被再次驗證和審核,如果最終此區塊被證實是無效的,那么驗證人質押的DOT代幣會被沒收,讓釣魚人獲得獎勵,反之則釣魚人質押的DOT代幣會被沒收。
我們通過這樣的機制設計,來確保驗證人沒有經濟動力去驗證通過一個無效的區塊,也確保釣魚人有這個經濟激勵去審查是否有無效區塊產生,指出問題,一同來確保Polkadot的網絡安全。
問題:數據可用性
然而在這種主鏈側鏈結構的區塊出塊和驗證的機制設計中,會有一個區塊數據是否可以被獲得的問題(Data Availability Problem)。
比如在比特幣網絡中,當一個節點挖出了一個區塊,其他人并不會發現這個新出的區塊的價值,直到他們看到這個區塊出現在最長的那條鏈上面,因而沒人會提前對此區塊做驗證和工作。盡管會有少部分自私挖礦的行為,但不論如何,節點都需要把這個區塊傳播到最長鏈上面才可以完成驗證。
然而在分片和多鏈的架構中,當中繼鏈區塊中含有這個區塊的區塊頭,即便全節點并沒有收到這個區塊數據,平行鏈中產出的一個區塊都會被規范化納入到中繼鏈中。但釣魚人并沒有辦法去驗證一個他們都從沒有見過的區塊,驗證人那邊無法知道平行鏈的全節點是否已經擁有這個區塊數據。
當這種比較尷尬的情況出現時,驗證人和釣魚人誰犯錯,如何去判定誰的DOT代幣會被沒收就會變得很主觀,無法推進。這個數據無法獲得的問題的源頭在于,只有少部分驗證人有平行鏈新產生區塊的所有數據,然而從拓展性方面去考察,也只能少量驗證人擁有平行鏈的區塊全數據即可推進驗證。
解決方案:糾刪碼
解決這個問題的方案叫做糾刪碼(Erasure Coding):平行鏈上的驗證人將區塊數據通過Erasure Code的方式將數據編碼和片段拆分,并將數據片段發送給其他每個驗證人。當三分之一的驗證人獲得了區塊編碼了的數據片段時,即可重新構建出這個平行鏈的區塊。
這樣的設計是為了讓區塊數據片段可以接入到Polkadot的Grandpa共識。
Grandpa共識機制是一種拜占庭容錯的共識算法,也就是說僅在大于三分之二的驗證人投票驗證通過了之后,才完成最終區塊的最終確認。
如果驗證人僅對擁有了的Erasure Coding數據片段的平行鏈區塊進行投票,并打入中繼鏈區塊中,那么我們可以確認,我們可以獲得三分之二的有Erasure Coding數據片段,并足以通過他們來重構平行鏈產出的區塊并進行最終確認,即便另外三分之一的區塊是作惡或者數據消失了的。
有效性檢查協議
當然在這些區塊被重新利用之前,我們需要讓這些通過數據片重新構建出來的區塊及時被驗證。但網絡中的很多釣魚人并沒有辦法要求所有的驗證人提供他們擁有的數據片段,因為這些驗證人并沒有互相連接,沒有權限接入到整個網絡。
總結來說,Polkadot的區塊有效性檢查協議,用釣魚人來報告區塊是否無效,收集人來報告區塊數據是否不可用。當有報告產生的時候,額外的驗證人會需要取得這個區塊,或者通過數據片段來重組出這個區塊并再次檢查。
這個額外驗證人,會通過 VRF (可驗證隨機函數) 的方式來選出,來確保這個額外驗證人跟這個有問題區塊的驗證人和收集人沒有私下關系,通過增加這個額外的隨機性來確保再次驗證的公正和安全。
如果有任何的驗證人認為某個區塊是無效的,所有的驗證人都需要下載并檢查此區塊的情況,并沒收出了無效區塊的驗證人的DOT代幣。這種情況并不會經常發生,因此這個機制并不會太影響Polkadot網絡的拓展性。
后續的研究方向
基于上面介紹的有效性檢查協議,后續需要拓展研究的問題就是網絡傳輸這塊。如果需要將Erasure Coded的數據片段全部傳播(Gossip)到整個區塊鏈網絡中,則會消耗大量的網絡流量,影響整個網絡的可拓展性。我們需要讓驗證者和驗證者之間的數據信息傳輸足夠地有效率,把這個數量拓展上去。
因此,之后需要進一步研究和探索的問題就是:是否可以采用直接連接的方式讓驗證者之間兩兩互聯?是否可以在平均距離直徑為2的網絡架構一個驗證人Hub來拓展架構?是否可以間接地架構在一個P2P分布式傳輸網絡中?
結論
通過上面介紹的有效性驗證協議,只要網絡中有足夠多的誠實不作惡的釣魚人和收集人,Polkadot網絡就可以確保無效的或者沒有數據的區塊不會被最終確認驗證,并且可以讓外部來攻擊Polkadot平行鏈的區塊變得很昂貴,貴到比購買一個平行鏈上的三分之二的權益還要高。
從結果來說,這樣的機制設計和協議也可以讓Polkadot網絡相比其他的多鏈網絡需要更少數量的驗證人來達到良好的可拓展性。
如果你希望了解更多的技術和研究資料,可以通過下面web3基金會研究院的鏈接來獲得。
評論
查看更多