每條平行鏈才10個驗證人,波卡網路真的安全嗎?

買賣虛擬貨幣
分享者:Alistair Stewart | Web3 基金會首席科學家 、GRANDPA 演算法創立者譯者:Charlie Hu | PolkaWorld 超級探員今天我要分享的主題是:如何在保證Polkadot網路的安全性的同時,可以做到一條新增平行鏈僅用10個驗證者。

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基金會研究院的連結來獲得。
https://research.web3.foundation/en/latest/polkadot/Availability_and_Validity/

免責聲明:

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

推荐阅读

;