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