區(qū)塊鏈共識(shí)的簡(jiǎn)單框架分析
共識(shí)算法是一個(gè)很大的話題,在區(qū)塊鏈出現(xiàn)之前,分布式系統(tǒng)和數(shù)據(jù)庫(kù)領(lǐng)域都已經(jīng)有很多的共識(shí)算法的研究和沉淀。但區(qū)塊鏈的共識(shí)與之前的研究又有非常大的不同,如果不注意很容易掉進(jìn)傳統(tǒng)共識(shí)的老套路里面。實(shí)際上不僅僅是區(qū)塊鏈有自己的獨(dú)特需要,我的感覺(jué)是數(shù)據(jù)庫(kù)會(huì)議上的共識(shí)研究和分布式系統(tǒng)上的共識(shí)研究也是有不小的區(qū)別。其實(shí)這非常好理解,因?yàn)閳?chǎng)景不同嘛,設(shè)計(jì)自然不同。
基本要求
共識(shí)的基本度量包括兩個(gè)方面,正確性和性能。正確性簡(jiǎn)單來(lái)說(shuō)包括:
· 一致性(Consistency) - 節(jié)點(diǎn)最終能看到相同的本地狀態(tài)
· 活性(Liveness) - 請(qǐng)求/交易總會(huì)在有限時(shí)間內(nèi)被處理
正確性是最最基本的要求,這也是大部分區(qū)塊鏈共識(shí)都能做到的。要在異步網(wǎng)絡(luò)中始終保證一致性和活性是一個(gè)非常難的任務(wù),因此共識(shí)設(shè)計(jì)通常會(huì)選擇保證一點(diǎn)而在一些特定情況下放棄另外一點(diǎn),例如Bitcoin使用的Nakamoto共識(shí)選擇優(yōu)先保證活性,而B(niǎo)FT共識(shí)則優(yōu)先保證一致性。
性能包括:
· 吞吐量(Throughput) - 單位時(shí)間內(nèi)系統(tǒng)可以處理的請(qǐng)求數(shù)量
· 延遲(Latency) - 一個(gè)請(qǐng)求/交易從發(fā)起到處理完畢/完全確定 2所需要的時(shí)間
對(duì)吞吐量和延遲的影響因素很多,例如共識(shí)節(jié)點(diǎn)的數(shù)量,共識(shí)的消息復(fù)雜度,消息驗(yàn)證需要的時(shí)間,共識(shí)可用的帶寬,共識(shí)設(shè)計(jì)的傾向等等。一般來(lái)說(shuō),吞吐量和延遲也難以兩全,這是因?yàn)楣沧R(shí)的消息復(fù)雜度有一個(gè)下限:對(duì)于每一輪共識(shí),參與共識(shí)的節(jié)點(diǎn)至少要收到一次消息(否則連要共識(shí)的東西是什么都不知道)。如果要低延遲,就要盡快對(duì)每個(gè)請(qǐng)求/交易的達(dá)成一致,意味著單個(gè)請(qǐng)求/交易需要更高的消息復(fù)雜度;如果要高吞吐,就要盡可能的對(duì)請(qǐng)求/交易進(jìn)行批量處理,以此降低單個(gè)請(qǐng)求/交易的消息復(fù)雜度,但也會(huì)造成高延遲。
對(duì)于共識(shí)性能,Nervos研究團(tuán)隊(duì)的張韌提出的一個(gè)比較有參考性的指標(biāo)是共識(shí)對(duì)帶寬的利用率 :給定相同的帶寬,共識(shí)對(duì)帶寬的占用越低,共識(shí)的吞吐量越高。
區(qū)塊鏈共識(shí)的特點(diǎn)
動(dòng)態(tài)的參與者集合
無(wú)論是permissionless(翻譯成“無(wú)需許可”太繞口了,用“公有鏈”又不是很準(zhǔn)確 2,這里還是用單詞)還是permissioned blockchain,最重要的一個(gè)特征是它是一個(gè)長(zhǎng)期運(yùn)行的開(kāi)放系統(tǒng)。長(zhǎng)期運(yùn)行和開(kāi)放疊加的結(jié)果是,共識(shí)的參與者會(huì)一直變化,每隔一段時(shí)間,總會(huì)有老的共識(shí)節(jié)點(diǎn)離開(kāi),新的共識(shí)節(jié)點(diǎn)加入,共識(shí)參與者是一個(gè)動(dòng)態(tài)集合。如何處理共識(shí)參與者的動(dòng)態(tài)變化,是區(qū)塊鏈共識(shí)的一個(gè)核心問(wèn)題。
與區(qū)塊鏈共識(shí)不同,傳統(tǒng)的共識(shí)研究往往先假設(shè)一個(gè)固定的參與者集合,然后研究如何在這個(gè)集合內(nèi)達(dá)成共識(shí),偶爾討論參與者集合變化時(shí)的處理,基本上不關(guān)心參與共識(shí)需要什么樣的資格。研究的重心在于如何保證共識(shí)的正確性(e.g. 一致性與活性),形成共識(shí)集合的方式只是個(gè)附屬課題。傳統(tǒng)共識(shí)的應(yīng)用場(chǎng)景往往是中心化控制的網(wǎng)絡(luò),增加或者減少的服務(wù)器都是自己的,形成這樣的側(cè)重也很自然。
數(shù)量眾多的參與者
去中心化是permissionless blockchain共識(shí)協(xié)議的一個(gè)獨(dú)特目標(biāo)。我們通常用參與共識(shí)的門(mén)檻來(lái)度量去中心化程度(為什么這是一個(gè)好的度量?),參與門(mén)檻越低,去中心化程度越高。低參與門(mén)檻的自然結(jié)果是共識(shí)參與者的集合可以非常的大,因此共識(shí)協(xié)議的設(shè)計(jì)必須考慮到這一點(diǎn),保證共識(shí)效率不會(huì)因?yàn)閰⑴c者的增多而下降。
最小的信任模型
執(zhí)行共識(shí)算法的目的是為了能對(duì)一個(gè)計(jì)算請(qǐng)求產(chǎn)生一致的計(jì)算結(jié)果,在這個(gè)過(guò)程中一定會(huì)有發(fā)起請(qǐng)求的節(jié)點(diǎn)和處理請(qǐng)求的節(jié)點(diǎn)。在傳統(tǒng)共識(shí)模型中,有的完全在請(qǐng)求處理節(jié)點(diǎn)集合內(nèi)部執(zhí)行共識(shí)算法,有的是由請(qǐng)求發(fā)起節(jié)點(diǎn)和處理節(jié)點(diǎn)一起執(zhí)行共識(shí)算法,無(wú)論何種情況,信任邊界一般是在請(qǐng)求發(fā)起節(jié)點(diǎn)和請(qǐng)求執(zhí)行節(jié)點(diǎn)之間,發(fā)起節(jié)點(diǎn)將計(jì)算請(qǐng)求發(fā)送給執(zhí)行節(jié)點(diǎn),執(zhí)行節(jié)點(diǎn)計(jì)算出結(jié)果后返回給發(fā)起節(jié)點(diǎn),發(fā)起節(jié)點(diǎn)信任執(zhí)行節(jié)點(diǎn)的計(jì)算結(jié)果(反過(guò)來(lái),執(zhí)行節(jié)點(diǎn)不一定信任發(fā)起節(jié)點(diǎn)的消息,如果發(fā)起節(jié)點(diǎn)參與共識(shí)過(guò)程的話)。
區(qū)塊鏈共識(shí)的信任模型則大為不同,對(duì)信任的要求往往要小的多。在permissionless blockchain網(wǎng)絡(luò)中,同一個(gè)節(jié)點(diǎn)即發(fā)起交易又參與共識(shí),節(jié)點(diǎn)對(duì)于共識(shí)結(jié)果要進(jìn)行驗(yàn)證,并不是簡(jiǎn)單的信任其他節(jié)點(diǎn)的共識(shí)結(jié)果。以Bitcoin為例,如果一個(gè)全節(jié)點(diǎn)參與挖礦,它就同時(shí)是一個(gè)發(fā)起請(qǐng)求(交易)的節(jié)點(diǎn)和處理請(qǐng)求(交易)的節(jié)點(diǎn)。即使它只想做一個(gè)安靜的全節(jié)點(diǎn),不參與挖礦,它也會(huì)自行驗(yàn)證收到的請(qǐng)求處理結(jié)果(區(qū)塊),并不信任其他共識(shí)節(jié)點(diǎn)提供的結(jié)果。這樣的全節(jié)點(diǎn)只是選擇跟隨多數(shù)算力選擇的交易排序,不相信多數(shù)算力給出的交易結(jié)果。這是一個(gè)最小的信任模型。
SPV/輕節(jié)點(diǎn)使用一個(gè)比全節(jié)點(diǎn)更強(qiáng)的信任模型(更強(qiáng)意味著對(duì)信任的假設(shè)更多),并不驗(yàn)證交易的執(zhí)行,只驗(yàn)證區(qū)塊頭的有效性。如何驗(yàn)證區(qū)塊頭的有效性則是區(qū)塊鏈共識(shí)設(shè)計(jì)的另一個(gè)核心問(wèn)題。如果只是通過(guò)對(duì)區(qū)塊頭附帶的非對(duì)稱簽名來(lái)驗(yàn)證有效性,這個(gè)信任模型基本上和傳統(tǒng)共識(shí)的信任模型是等價(jià)的,因?yàn)閭鹘y(tǒng)共識(shí)中的請(qǐng)求處理節(jié)點(diǎn)也可以對(duì)結(jié)果附加簽名,這個(gè)模型在結(jié)合動(dòng)態(tài)參與者集合時(shí)會(huì)遇到一系列的問(wèn)題,例如大家熟知的長(zhǎng)程攻擊。如果是通過(guò)PoW來(lái)驗(yàn)證區(qū)塊頭有效性則天然沒(méi)有這些麻煩,主流的研究方向是在于如何進(jìn)一步提高區(qū)塊頭的驗(yàn)證效率。
一個(gè)簡(jiǎn)單的分析框架
根據(jù)以上的分析,我們可以整理出一個(gè)簡(jiǎn)單的區(qū)塊鏈共識(shí)分析框架,用于比較各種區(qū)塊鏈共識(shí):
進(jìn)入方式* - 購(gòu)買(mǎi)算力 / 抵押代幣 / …
出塊方式* - 輪流出塊 / PoW隨機(jī)選擇 / 鏈上偽隨機(jī) / VRF隨機(jī)選擇 / …
共識(shí)方式* - Nakamoto Consensus / BFT / …
退出方式* - 停止挖礦 / 解除抵押 / …
一致性 - 可以容忍多少惡意節(jié)點(diǎn)/算力/Stake/…
活性 - 可以容忍多少惡意節(jié)點(diǎn)/算力/Stake/…
延遲 - 交易被完全確認(rèn)(被推翻的概率小于x)所需要的時(shí)間
帶寬效率 - 共識(shí)對(duì)帶寬的利用率,越高越好
節(jié)點(diǎn)數(shù)量 - 共識(shí)節(jié)點(diǎn)的數(shù)量上限是高還是低
舉例說(shuō)明:
對(duì)于一個(gè)區(qū)塊鏈共識(shí)協(xié)議來(lái)說(shuō),前四點(diǎn)(帶*)基本上決定了后面的特征。通過(guò)這個(gè)框架也容易看到,我們通常所說(shuō)的“PoW共識(shí)”或者“PoS共識(shí)”是非常模糊的描述,PoW/PoS僅僅是選擇出塊節(jié)點(diǎn)的方式,不能表達(dá)具體的共識(shí)過(guò)程是什么樣子。我們甚至可以設(shè)計(jì)一些非常混搭的共識(shí)協(xié)議,例如設(shè)計(jì)一個(gè)需要通過(guò)抵押代幣來(lái)參與,通過(guò)PoW來(lái)選擇出塊節(jié)點(diǎn),通過(guò)Nakamoto Consensus形成最長(zhǎng)(重)鏈的協(xié)議(可以給它取名叫StakingPoW,完美結(jié)合Staking熱點(diǎn)),或者是設(shè)計(jì)一個(gè)需要通過(guò)PoW來(lái)參與(必須提供滿足一定難度的PoW才能參與共識(shí)),通過(guò)VRF來(lái)選擇出塊節(jié)點(diǎn),通過(guò)BFT來(lái)達(dá)成共識(shí)的協(xié)議(這個(gè)可以起名叫PoW+VRF/BFT,讓人一看就從心底油然升起專業(yè)的感覺(jué))。
激勵(lì)分析
在上面的框架之上,我們還可以疊加一個(gè)在傳統(tǒng)共識(shí)中沒(méi)有的維度:共識(shí)激勵(lì)。區(qū)塊鏈在共識(shí)中引入了經(jīng)濟(jì)激勵(lì),通過(guò)機(jī)制設(shè)計(jì)將納什均衡與系統(tǒng)目標(biāo)融合在一起,引導(dǎo)參與者遵守協(xié)議,共識(shí)參與者的效用函數(shù)可以方便的以其經(jīng)濟(jì)收益(即獲得的獎(jiǎng)勵(lì)減去參與共識(shí)的成本)來(lái)衡量。共識(shí)獎(jiǎng)勵(lì)往往通過(guò)系統(tǒng)內(nèi)原生代幣實(shí)現(xiàn),獎(jiǎng)勵(lì)價(jià)值由代幣價(jià)值決定,在一個(gè)正確設(shè)計(jì)的共識(shí)協(xié)議中參與者應(yīng)該按照付出的多少獲得相應(yīng)的回報(bào)。共識(shí)成本的組成比較復(fù)雜,對(duì)應(yīng)上面的框架,我們需要分析共識(shí)的進(jìn)入成本,出塊成本,共識(shí)成本,退出成本,這些成本共同構(gòu)成了節(jié)點(diǎn)參與共識(shí)的成本。正確的共識(shí)激勵(lì)對(duì)網(wǎng)絡(luò)的安全性和去中心化程度都有影響,因此激勵(lì)分析是共識(shí)分析的一個(gè)重要部分。