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