區(qū)塊鏈?zhǔn)且粋(gè)歷史可追溯、不可篡改,解決多方互信問(wèn)題的分布式(去中心化)系統(tǒng)。分布式系統(tǒng)必然面臨著一致性問(wèn)題,而解決一致性問(wèn)題的過(guò)程我們稱之為共識(shí)。
分布式系統(tǒng)的共識(shí)達(dá)成需要依賴可靠的共識(shí)算法,共識(shí)算法通常解決的是分布式系統(tǒng)中由哪個(gè)節(jié)點(diǎn)發(fā)起提案,以及其他節(jié)點(diǎn)如何就這個(gè)提案達(dá)成一致的問(wèn)題。我們根據(jù)傳統(tǒng)分布式系統(tǒng)與區(qū)塊鏈系統(tǒng)間的區(qū)別,將共識(shí)算法分為可信節(jié)點(diǎn)間的共識(shí)算法與不可信節(jié)點(diǎn)間的共識(shí)算法。前者已經(jīng)被深入研究,并且在現(xiàn)有流行的分布式系統(tǒng)中廣泛應(yīng)用,其中Paxos和Raft及其相應(yīng)變種算法最為著名。對(duì)于后者,雖然也早就被研究,但直到近年區(qū)塊鏈技術(shù)發(fā)展如火如荼,相關(guān)共識(shí)算法才得到大量應(yīng)用。而根據(jù)應(yīng)用場(chǎng)景的不同,后者又分為以PoW(ProofofWork)和PoS(ProofofStake)等算法為代表的適用于公鏈的共識(shí)算法和以PBFT(PracticalByzantineFaultTolerance)及其變種算法為代表的適用于聯(lián)盟鏈或私有鏈的共識(shí)算法。
工作量證明PoW算法是比特幣系統(tǒng)采用的算法,該算法于1998年有W.Dai在B-money的設(shè)計(jì)中提出。以太坊系統(tǒng)當(dāng)前同樣采用PoW算法進(jìn)行共識(shí),但由于以太坊系統(tǒng)出塊更快(約15秒),更容易產(chǎn)生區(qū)塊,為了避免大量節(jié)點(diǎn)白白陪跑,以太坊提出了Uncle塊獎(jiǎng)勵(lì)機(jī)制。POS算法最早由SunnyKing在2012年8月發(fā)布的PPC系統(tǒng)中首先實(shí)現(xiàn),而以太坊系統(tǒng)也一直對(duì)PoS抱有好感,計(jì)劃后續(xù)以PoS代替PoW作為其共識(shí)機(jī)制。PoS及其變種算法可以解決PoW算法一直被詬病的浪費(fèi)算力問(wèn)題,但其本身尚未經(jīng)過(guò)足夠驗(yàn)證。PBFT算法最早由MiguelCastro和BarbaraLiskov在1999年的OSDI99會(huì)議上提出,該算法相較原始拜占庭容錯(cuò)算法具有更高的運(yùn)行效率。假設(shè)系統(tǒng)中共有N個(gè)節(jié)點(diǎn),那么PBFT算法可以容忍系統(tǒng)中存在F個(gè)惡意節(jié)點(diǎn),并且3F+1不大于N。PBFT共識(shí)算法雖然隨著系統(tǒng)中節(jié)點(diǎn)數(shù)增多而可以容忍更多的拜占庭節(jié)點(diǎn),但其共識(shí)效率確實(shí)以極快的速率下降,這也是我們能看到的應(yīng)用PBFT做共識(shí)算法的系統(tǒng)中很少有超過(guò)100個(gè)節(jié)點(diǎn)的原因。無(wú)論是PoW算法還是Pos算法,其核心思想都是通過(guò)經(jīng)濟(jì)激勵(lì)來(lái)鼓勵(lì)節(jié)點(diǎn)對(duì)系統(tǒng)的貢獻(xiàn)和付出,通過(guò)經(jīng)濟(jì)懲罰來(lái)阻止節(jié)點(diǎn)作惡。公有鏈系統(tǒng)為了鼓勵(lì)更多節(jié)點(diǎn)參與共識(shí),通常會(huì)發(fā)放代幣(token)給對(duì)系統(tǒng)運(yùn)行有貢獻(xiàn)的節(jié)點(diǎn)。而聯(lián)盟鏈或者私鏈與公有鏈的不同之處在于,聯(lián)盟鏈或者私鏈的參與節(jié)點(diǎn)通常希望從鏈上獲得可信數(shù)據(jù),這相對(duì)于通過(guò)記賬來(lái)獲取激勵(lì)而言有意義得多,所有他們更有義務(wù)和責(zé)任去維護(hù)系統(tǒng)的穩(wěn)定運(yùn)行,并且通常參與節(jié)點(diǎn)數(shù)較少,PBFT及其變種算法恰好適用于聯(lián)盟鏈或者私鏈的應(yīng)用場(chǎng)景。
責(zé)任編輯:胡金鵬