鏈化未來公眾號將分三篇文章來闡述鏈化未來的共識協(xié)議的理論設(shè)計,后續(xù)還會推出一系列文章來詳細說明鏈化未來共識協(xié)議的工程實現(xiàn),本文為鏈化未來共識協(xié)議理論設(shè)計的第二篇(第4章)。
4、架構(gòu)
鏈化未來每一輪,分為如下幾步完成
基于可驗證延時函數(shù)的隨機數(shù)層每個共識周期提供一個系統(tǒng)隨機數(shù)。
節(jié)點利用隨機數(shù)結(jié)合硬件指紋和代幣,在每一輪共識開始,選出一定數(shù)目的Proposer和Voter。
由Proposer提議需要成塊的消息,由Voter對選中的唯一提議消息相互發(fā)送確認。
節(jié)點對交易批進行執(zhí)行,再利用上一個塊隨機數(shù)選出一定數(shù)量Voter,通過BA(binary agreement)協(xié)議相互同步對交易批的執(zhí)行后狀態(tài)。
節(jié)點對交易批和執(zhí)行后狀態(tài)獨立打包成塊。
4.1 隨機數(shù)層
隨機數(shù)層,為上層提供隨機數(shù)源,比如共識委員會的選擇,dapp 的隨機源?;?VDF 的隨機數(shù)生成層,對于任何人都可以參與,同時任何人都可以驗證隨機數(shù)的正確性。但是考慮到 VDF 本身的復(fù)雜特性,特別是要防范專門的硬件設(shè)計廠商,所以需要對隨機數(shù)的生成過程進行設(shè)計。
詳細原理如下:
MAIN 委員會的成員 i 基于上個共識周期的隨機數(shù)randi?進行 VDF 的計算,計算時間跟共識的周期相關(guān),只要共識在持續(xù)進行,那么 VDF 就要持續(xù)計算。
VDF的計算結(jié)果將包含在共識最終形成的塊中,所有人都可以對VDF的計算結(jié)果和其中包含的隨機數(shù)進行驗證。
每個委員會成員,都應(yīng)該運行VDF的計算函數(shù)。Listener節(jié)點不需要運行VDF函數(shù),但是需要驗證VDF的計算結(jié)果。
本設(shè)計的主要目的,在于防止隨機數(shù)生成過程中,有人拒絕提交,或者可以預(yù)測未來的隨機數(shù),進而對proposer和validator節(jié)點進行預(yù)測,進行攻擊。同時基于VDF的隨機數(shù),也非常方便地可以應(yīng)用在Dapp中,達到公平的目的。
4.2 身份層
每個自愿參與共識的節(jié)點都有一對密鑰 (sk,pk) 作為身份標識。設(shè)備被選為共識成員的概率依賴以下三個評分的綜合結(jié)果。
鏈上代幣。所有公鑰對應(yīng)的資產(chǎn)在鏈上都可以查詢到,所以持有代幣的百分比作為?wcoin。有的節(jié)點可能持有大量代幣,但是不愿參與共識,可以代理給其他可靠的硬件廠商對應(yīng)賬戶,類似Dpos。或者持有大量代幣的節(jié)點可能同時分散在多個賬戶,這不會影響到公平性,因為多個賬戶的綜合被選中概率與一個賬戶相同(假設(shè)其他兩個賬戶對應(yīng)的硬件設(shè)備指標相同)。
硬件特性。根據(jù)自愿參與共識的設(shè)備硬件指紋信息可以得出硬件特性評分。該評分可能有多個維度,比如 CPU/網(wǎng)卡/硬盤特性,分別適合committee中不同的身份。該權(quán)重暫定為whardware。
聲譽。根據(jù)節(jié)點賬戶對代幣的持有壽命(塊高度)、設(shè)備歷史參與記錄、成功提交區(qū)塊的次數(shù),系統(tǒng)自動計算出節(jié)點信譽。該權(quán)重為wreputation。
每個公鑰對應(yīng)一個權(quán)重?w?=?r1???wcoin?+?r2???whardware?+?r3???wreputation,其中r1, r2, r3?為系統(tǒng)常量,用來設(shè)置各個權(quán)重的比率。
4.3 共識層
共識的詳細過程如下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Figure 1: 共識時序圖
propose輪。節(jié)點基于上一個block,獨立判斷是否被選為Proposer或Voter。該輪保證消息確定性地由Proposer到全網(wǎng)大部分節(jié)點。
– Proposer在廣播PROPOSE消息的同時為了加速傳播,廣播帶交易hash的 ECHO。為了最小化帶寬消耗,PROPOSE 消息被冗余編碼后,分別傳給多個節(jié)點。每個Proposer 只能廣播一次,多次廣播被視為惡意節(jié)點。在廣播的propose消息中,應(yīng)該包含VDF的計算結(jié)果。
– Voter等待TP ROP時間后,對收到PROPOSE消息校驗格式,選擇proof最小的廣播相應(yīng)ECHO消息。同時 Voter 需要對proposer發(fā)送VDF結(jié)果進行驗證。
– 節(jié)點收到TH1個消息后,即使在未收到 PROPOSE 消息的情況下,也廣播 ECHO 消息。
– 節(jié)點收到T H2?個ECHO后完成此輪,返回。
– 節(jié)點等待T IMEOUT?未收集足夠數(shù)量ECHO后,判斷超時,將交易批設(shè)置為空。
執(zhí)行,所有節(jié)點對上一輪的結(jié)果執(zhí)行,并基于原狀態(tài)state1?計算輸出狀態(tài)的摘要state2。
BA 輪,全網(wǎng)基于上一個block和輪數(shù),獨立判斷是否被選為Voter。該輪保證大部分節(jié)點對執(zhí)行結(jié)果的摘要接受與否達成一致。
– Voter廣播包含state2的ECHO消息。消息中同時包含VDF的計算結(jié)果和證明。
– 節(jié)點收到T H2個ECHO后,驗證VDF的計算結(jié)果和證明,完成此輪。超時則成空提議,返回。
– 若上輪超時,則新開始一輪,重新判斷是否為voter,基于CommonCoin決定是否提起包含state2還是空交易批的ECHO消息,然后廣播。
– 節(jié)點收到TH2?個ECHO后完成此輪。否則繼續(xù)利用CommonCoin判斷下一輪的 ECHO 消息內(nèi)容。
– BA中每一輪時間固定為TBar,節(jié)點判斷超時后返回空。若超出特定BA輪數(shù),則節(jié)點將狀態(tài)回滾到state1,該輪包含空交易批。
成塊
– 各個節(jié)點利用執(zhí)行結(jié)果狀態(tài)獨立成塊。同時,將VDF的計算結(jié)果和證明包含在塊中。整個共識過程中,Listener會接收到跟Voter和Proposer同樣的消息,所以除了傳遞消息外,Listener同樣會校驗、處理消息、成塊。
具體算法描述如下:

節(jié)點每輪對消息的響應(yīng)如下:
4.4 新節(jié)點加入
新節(jié)點需要經(jīng)過如下幾個步驟:
觀察并接收網(wǎng)絡(luò)正在傳播的消息,確定塊高度和共識的輪數(shù),當前塊共識結(jié)果。為了防止被惡意節(jié)點通過網(wǎng)絡(luò)控制的方式攻擊,新節(jié)點需要盡量從多個網(wǎng)絡(luò)地址監(jiān)聽共識消息。
根據(jù)當前成塊,向網(wǎng)絡(luò)中其他節(jié)點拉取歷史區(qū)塊,并驗證鏈的正確性??紤]到鏈的單向性,新節(jié)點可以保證歷史區(qū)塊的正確性。
新節(jié)點要同時對VDF的結(jié)果進行驗證,假如有多條鏈同時存在,那么要選VDF累計比較多的鏈。