什么是共識(shí)機(jī)制為什么區(qū)塊鏈需要共識(shí)機(jī)制
區(qū)塊鏈解決了在不可信信道上傳輸可信信息、價(jià)值轉(zhuǎn)移的問(wèn)題,而共識(shí)機(jī)制解決了區(qū)塊鏈如何在分布式場(chǎng)景下達(dá)成一致性的問(wèn)題,也是保障區(qū)塊鏈系統(tǒng)不斷運(yùn)行下去的關(guān)鍵。
主要內(nèi)容:
1. 區(qū)塊鏈為什么需要共識(shí)機(jī)制;
2. 共識(shí)機(jī)制的工作原理和重要性;
3. 共識(shí)機(jī)制的基本要求和不可能三角;
4. 共識(shí)機(jī)制的種類(lèi);
一、區(qū)塊鏈為什么需要共識(shí)機(jī)制
由于加密貨幣多數(shù)采用去中心化的區(qū)塊鏈設(shè)計(jì),節(jié)點(diǎn)是各處分散且平行的,所以必須設(shè)計(jì)一套制度,來(lái)維護(hù)系統(tǒng)的運(yùn)作順序與公平性。
1.什么是共識(shí)機(jī)制
統(tǒng)一區(qū)塊鏈的版本,并獎(jiǎng)勵(lì)提供資源、維護(hù)區(qū)塊鏈的使用者,以及懲罰惡意的危害者。這樣的制度,必須依賴(lài)某種方式來(lái)證明,是由誰(shuí)取得了一個(gè)區(qū)塊鏈的打包權(quán)(或稱(chēng)記帳權(quán)),并且可以獲取打包這一個(gè)區(qū)塊的獎(jiǎng)勵(lì),又或者是誰(shuí)意圖進(jìn)行危害,就會(huì)獲得一定的懲罰,這就是共識(shí)機(jī)制。
簡(jiǎn)單來(lái)說(shuō),我們要一種機(jī)制來(lái)選擇哪個(gè)礦工來(lái)把交易寫(xiě)入?yún)^(qū)塊鏈。比如今天聽(tīng)課的同學(xué)有100人,我們分成50組打乒乓球,那么我們有50組比分要記錄。
2.分布式記賬及“挖礦”
傳統(tǒng)的中心式記賬,意味著我們需要一個(gè)組委會(huì)來(lái)記錄比分。這樣就可能會(huì)出現(xiàn)徇私舞弊的情況,所以需要我們采用去中心化的方法。這意味著,這50桌每組都要記錄比分。不光自己的,還要記錄別人的。這就是分布式或者說(shuō)去中心化的記賬方法。
但是,這樣做效率太低。大家必須要花大量的時(shí)間做這件事情。所以區(qū)塊鏈的設(shè)計(jì)是,我們找一些礦工來(lái)記錄比分。對(duì)于這些礦工,我們會(huì)給予獎(jiǎng)勵(lì),從而鼓勵(lì)他們?yōu)榇蠹矣涗洷确?,記錄完了以后再給每一桌復(fù)制一份。
這個(gè)獎(jiǎng)勵(lì),在比特幣系統(tǒng)里面就是比特幣的由來(lái)。交易本身并不產(chǎn)生新的貨幣,礦工記錄比分才生成貨幣,也就是說(shuō),代幣的目的是為了獎(jiǎng)勵(lì)付出努力的人,這就是”挖礦“的原理。
既然有獎(jiǎng)勵(lì),那么現(xiàn)在問(wèn)題來(lái)了。譬如比特幣,每次記賬(10分鐘)可以產(chǎn)生12.5個(gè)比特幣(現(xiàn)在,過(guò)去是50個(gè)),按照今天的價(jià)格,就是50萬(wàn)人民幣。那么肯定有很多礦工都搶著給大家計(jì)分,來(lái)獲取這個(gè)報(bào)酬。
那么應(yīng)該怎么選擇一個(gè)礦工出來(lái)?這就需要用到“共識(shí)機(jī)制“,也就是說(shuō),大家都根據(jù)某種規(guī)則,同意讓我們今天的某一位同學(xué)來(lái)記錄大家的比分,記錄完畢的獎(jiǎng)勵(lì)都給他。
當(dāng)然,例子比較簡(jiǎn)單,不過(guò)本質(zhì)上就是這回事。這個(gè)乒乓球比賽,就可以理解為一筆交易。比分,就是記賬。記錄比分的人,就是礦工。獎(jiǎng)勵(lì)的錢(qián),就是比特幣或者代幣。
二、共識(shí)機(jī)制的工作原理和重要性
首先,交易發(fā)起方構(gòu)造交易,加上數(shù)字簽名,廣播到區(qū)塊鏈P2P網(wǎng)絡(luò)之中。然后, 區(qū)塊鏈網(wǎng)絡(luò)中的“礦工”節(jié)點(diǎn)陸續(xù)收到這筆交易。然后,所有礦工都會(huì)把交易打包到自己構(gòu)建的備選區(qū)塊之中,然后將自己的備選區(qū)塊廣播。
這時(shí)候,全網(wǎng)根據(jù)”共識(shí)機(jī)制“來(lái)決定哪個(gè)礦工負(fù)責(zé)寫(xiě)入這個(gè)區(qū)塊。然后這個(gè)礦工將會(huì)負(fù)責(zé)把這個(gè)區(qū)塊添加到區(qū)塊鏈上,完成該區(qū)塊中的所有交易。最后交易完成,交易參與方可以查詢(xún)到交易執(zhí)行結(jié)果。
那么, “共識(shí)機(jī)制”是從什么時(shí)候出現(xiàn)的?
1982年, Lamport首次發(fā)表了關(guān)于拜占庭將軍問(wèn)題解決方案的論文,后來(lái)獲得了計(jì)算機(jī)界的最高獎(jiǎng):圖靈獎(jiǎng)。
1999年,Jakobsson發(fā)表了關(guān)于PoW的論文。
2008年11月,中本聰發(fā)表了比特幣的論文,并用了PoW作為共識(shí)機(jī)制。
2012年,PeerCoin項(xiàng)目開(kāi)始采用PoS作為共識(shí)機(jī)制。
2016年,Tendermint項(xiàng)目開(kāi)始采用PBFT作為公示機(jī)制。
2018年,以太坊項(xiàng)目提出在2.0版本中,通過(guò)Casper方法采用PoS作為共識(shí)機(jī)制。實(shí)際上,V神今天正在歐洲介紹這方面的最新進(jìn)展。
三、共識(shí)機(jī)制的基本要求和不可能三角
這里需要提的是,任何分布式系統(tǒng)(包括比特幣甚至貨幣),都存在一個(gè)不可能三角形:性能、可擴(kuò)展性和去中心化。
譬如人民幣,性能和可擴(kuò)展性很高(每天無(wú)數(shù)人用它來(lái)交易),但是去中心化低(央行想印多少就印多少)。對(duì)于比特幣,去中心化程度高,可擴(kuò)展性也高,但是性能低。
所以在設(shè)計(jì)、選擇共識(shí)機(jī)制時(shí)候,我們必須記住這三點(diǎn):我們應(yīng)該優(yōu)化哪一方面,犧牲哪一方面,因?yàn)槟悴豢赡芡瑫r(shí)達(dá)到這三點(diǎn)。另外,所有的共識(shí)算法必須具備三個(gè)基本要求:
1.一致性 (safety):所有參與共識(shí)的誠(chéng)實(shí)的節(jié)點(diǎn),得到的計(jì)算結(jié)果是相同的,而且是符合共識(shí)協(xié)議的。
2. 終局性 (liveness):所有參與共識(shí)的誠(chéng)實(shí)的節(jié)點(diǎn),最終可以達(dá)成一致性結(jié)果。
3. 容錯(cuò)性 (fault tolerance):在共識(shí)算法的成功執(zhí)行過(guò)程中,可以容許參與共識(shí)的節(jié)點(diǎn)發(fā)生一些錯(cuò)誤。
四、共識(shí)機(jī)制的種類(lèi)
1.POW(工作量證明)
如上所述,為了鼓勵(lì)人們主動(dòng)記賬,中本聰決定給記賬的人發(fā)獎(jiǎng)勵(lì),這就是“比特幣”的由來(lái)。而記賬的人就是“礦工”。
由于不同的“礦工”都希望獲得記賬權(quán),為了給每個(gè)區(qū)塊選擇一個(gè)全網(wǎng)認(rèn)可的“礦工”,就需要 “礦工”給出一個(gè)證明,就是所謂“工作量證明”, 選出的礦工可以獲得12.5個(gè)比特幣作為獎(jiǎng)勵(lì)。
獎(jiǎng)勵(lì)以每四年減一半的速度遞減,礦工的收益的另一部分來(lái)自于每筆交易產(chǎn)生的手續(xù)費(fèi),到2140年無(wú)幣可獎(jiǎng)勵(lì)的時(shí)候,礦工的獎(jiǎng)勵(lì)將全部來(lái)自于交易的手續(xù)費(fèi)。
現(xiàn)在關(guān)鍵來(lái)了,工作量證明是什么意思?
還是以乒乓球比賽為例。如果有一個(gè)人來(lái)計(jì)分,我們會(huì)希望他們不能太慢,但是也不能太快。太慢的話(huà),會(huì)積累很多比分要記錄,最后大家都要等他們。太快的話(huà),會(huì)干擾我們的正常比賽。大家比賽中間要停下來(lái),跟他們談話(huà),這個(gè)效率很低。
為了保證節(jié)點(diǎn)之間的同步,新區(qū)塊的添加速度不能太快。區(qū)塊鏈的發(fā)明者中本聰故意讓添加新區(qū)塊變得很困難。只有通過(guò)極其大量的計(jì)算,才能找到一個(gè)隨機(jī)值,使得區(qū)塊的哈希值符合一定的條件。這個(gè)過(guò)程就叫做挖礦(Mining)。
“礦工” 的工作其實(shí)就是猜出這個(gè)隨機(jī)項(xiàng)的值,使得區(qū)塊的哈希值可以小于目標(biāo)值,從而能夠?qū)懭雲(yún)^(qū)塊鏈。這個(gè)隨機(jī)項(xiàng)的值,必須通過(guò)窮舉計(jì)算來(lái)獲得,也就是說(shuō),所有的礦工(計(jì)算機(jī))必須反復(fù)不停地嘗試從0開(kāi)始的所有整數(shù),直到他們找到這個(gè)隨機(jī)值(nounce)。找到了,他們就發(fā)財(cái)了。
舉個(gè)簡(jiǎn)單的比喻,“挖礦” 的過(guò)程其實(shí)類(lèi)似于打麻將, 四方最后有一方湊出了胡牌的牌型,就當(dāng)與生成了一個(gè)達(dá)到要求的區(qū)塊哈希值,胡牌的人就成了 “礦工”,得到相應(yīng)的獎(jiǎng)賞(比特幣)。胡完一牌,就是一個(gè)區(qū)塊生成,所以當(dāng)前交易記錄在內(nèi)。
然后大家接著下一局,繼續(xù)湊胡牌牌型。如果一局沒(méi)有人胡牌,也就是大家花了時(shí)間,但是沒(méi)有生成區(qū)塊,就重新開(kāi)局。如果投入的時(shí)間/資源,小于獲得的獎(jiǎng)賞,這個(gè)礦工就虧了。但是,如果有人摸了兩把就胡牌了,相當(dāng)于很快就找到了這個(gè)哈希值, 這個(gè)礦工就大賺了。
這樣,全世界成千上萬(wàn)臺(tái)“礦機(jī)”們,都在不眠不休地計(jì)算中本聰出的這道數(shù)學(xué)題,為獲得獎(jiǎng)勵(lì)的比特幣而“廢寢忘食”,這就是工作量證明的原理。
具體來(lái)說(shuō),工作量證明(PoW) 或者說(shuō)挖礦算法,目的就是尋找一個(gè)特殊的數(shù)字(nounce),使得哈希值(即SHA256 函數(shù))的輸出字符串的前n位是零。
所以,通過(guò)POW,我們可以找到一個(gè)礦工。但是網(wǎng)絡(luò)上有那么多的節(jié)點(diǎn),怎么確保所有節(jié)點(diǎn)都使用同一個(gè)區(qū)塊鏈呢?
中本聰為此提出了著名的一致性判別方法:如果一個(gè)節(jié)點(diǎn)的區(qū)塊鏈與另外一個(gè)節(jié)點(diǎn)的不同,這就意味著沖突。解決這個(gè)問(wèn)題的辦法就是,“最長(zhǎng)的有效的鏈”應(yīng)當(dāng)獲得認(rèn)可。換句話(huà)說(shuō),網(wǎng)絡(luò)上最長(zhǎng)的鏈就是事實(shí)上的標(biāo)準(zhǔn)鏈。
利用這種算法,我們可以在我們網(wǎng)絡(luò)中的所有節(jié)點(diǎn)中達(dá)成共識(shí)。PoW的本質(zhì),是選擇計(jì)算量最大的鏈條最為主鏈條。這樣,即使有人惡意破壞,也要付出大量的經(jīng)濟(jì)成本,達(dá)到不可承受的程度。
舉個(gè)例子,如果你去一個(gè)醫(yī)院柜臺(tái)排隊(duì),有好幾條隊(duì),你應(yīng)該選擇哪一條?按照中本聰?shù)囊?guī)則,你應(yīng)該派最長(zhǎng)的那條隊(duì),因?yàn)槔锩娴娜伺诺米罹?,所以最不容易被保安?qū)散。
也就是說(shuō),這套機(jī)制會(huì)找出最長(zhǎng)的一條隊(duì)伍是合法的,獎(jiǎng)勵(lì)其中排得久的人,并讓不合法的分叉隊(duì)伍重新排隊(duì)。只要大部分人不傻,就會(huì)自覺(jué)在最長(zhǎng)的隊(duì)伍上排隊(duì)。
PoW的優(yōu)點(diǎn)
1. 架構(gòu)清晰,有效可靠。
2. 要獲得多數(shù)節(jié)點(diǎn)的認(rèn)可,攻擊者必須投入超過(guò)51%的計(jì)算量,才能保證篡改結(jié)果。
3.公平:這種機(jī)制類(lèi)似于多勞多得,干的多,收獲也多。
PoW的缺點(diǎn)
1. 數(shù)據(jù)冗余:所有數(shù)據(jù)都要在所有節(jié)點(diǎn)備份一遍。
2. 消耗能源:現(xiàn)在挖礦占到了全球0.13%的電力消耗。挖掘一枚比特幣,相當(dāng)于一輛汽車(chē)駕駛20萬(wàn)公里的碳排放量。
3. 信息網(wǎng)絡(luò)延遲:區(qū)塊鏈,每10分鐘才能生成一個(gè)區(qū)塊,完成其中的交易,以太坊略有提高,每秒交易在幾百筆以?xún)?nèi),相比之下,阿里巴巴雙11的交易速度是31.5萬(wàn)筆/秒。
4. 算力壟斷:有些擁有大量算力的公司,譬如比特大陸,實(shí)際上已經(jīng)擁有了某些公鏈或者dApp超過(guò)51%的算力,可以篡改結(jié)果,這樣就與加密貨幣或者中本聰?shù)娜ブ行幕车蓝Y。
2.POS(權(quán)益證明)
PoS即權(quán)益證明,最早由Sunny King于2012年創(chuàng)立的PPC(點(diǎn)點(diǎn)幣)采用,它可以解決上面提到的浪費(fèi)算力的問(wèn)題。
簡(jiǎn)單來(lái)說(shuō),它選舉礦工的規(guī)則是:誰(shuí)有錢(qián)誰(shuí)更有可能獲得挖礦權(quán)。也就是說(shuō),挖礦成功的概率與礦工持有的代幣數(shù)量成正比。
回到乒乓球比賽的例子,也就是誰(shuí)比分最高,讓誰(shuí)來(lái)記,這樣鼓勵(lì)積極比賽的人。
這樣的好處:
1. 不需要算題,所以節(jié)約能源。
2. 攻擊者需要更高的成本,因?yàn)樗枰?gòu)買(mǎi)大量的代幣才能獲得51%的篡改權(quán)。
缺點(diǎn)是:
1. 因?yàn)槌钟辛吭蕉嗟娜双@得的獎(jiǎng)勵(lì)越多,變成了資源壟斷,富者越富,窮者越窮。
2. 因?yàn)橥诘V權(quán)跟持有的貨幣成正比,所以就類(lèi)似于利息高的情況下,大家就不愿意花錢(qián),而把錢(qián)都存銀行一樣,這樣會(huì)變成所謂的”屯幣“,降低代幣的流通性。
采用PoS機(jī)制的項(xiàng)目目前來(lái)說(shuō),主要是以太坊2.0(將要推出)、PIVX和NAVCOIN這幾個(gè)項(xiàng)目。
3.DPOS(代表權(quán)益證明)
DPOS(DELEGATED POS)是POW的一個(gè)分類(lèi),就是代表制POS。也就是說(shuō),我的錢(qián)少但是我也要獲得挖礦權(quán),怎么辦,我委托一個(gè)代表來(lái)做這個(gè)事。
以EOS為例,它在全球選出了21個(gè)超級(jí)節(jié)點(diǎn),所有用戶(hù)可以投票決定這些節(jié)點(diǎn),也可以投票廢棄、更換這些節(jié)點(diǎn)。
這樣做的好處是:
1.不需要耗費(fèi)能源和硬件。
2.縮短了區(qū)塊確認(rèn)時(shí)間(超級(jí)節(jié)點(diǎn)可以負(fù)責(zé)),提高了效率。
3. 不需要挖礦,也不需要完全驗(yàn)證,只需要部分見(jiàn)證節(jié)點(diǎn)驗(yàn)證,簡(jiǎn)單、高效。
但是問(wèn)題也很明顯:
1. 這已經(jīng)不是去中心化,而是完全的中性化了。
2. 節(jié)點(diǎn)選舉過(guò)程存在巨大的人為操作空間。
4.PBFT(實(shí)用拜占庭容錯(cuò))
實(shí)用拜占庭將軍問(wèn)題解法(PBFT),這個(gè)機(jī)制跟前面兩種都不一樣,也就是說(shuō),我不需要礦工,我也不需要挖礦。
我通過(guò)周?chē)娜耍瑏?lái)判斷我記錄的賬本對(duì)不對(duì)就行了。也就是說(shuō),一個(gè)人打完一場(chǎng)比賽以后,我們?nèi)?0桌都記錄一遍。
那么怎么判斷我記錄的對(duì)不對(duì)?我問(wèn)我身邊的幾桌,譬如我周?chē)兴淖?,如果三桌都說(shuō)結(jié)果是王二戰(zhàn)勝李四,那么即使第四個(gè)桌說(shuō)王二輸給李四了,我也不用擔(dān)心,我知道肯定結(jié)果就是王二戰(zhàn)勝李四。
所以聽(tīng)起來(lái)很玄乎的拜占庭將軍問(wèn)題,就是這么簡(jiǎn)單的一回事。如果你周?chē)兴膫€(gè)人,你問(wèn)他們今天路上堵不堵車(chē)。如果三個(gè)人說(shuō)堵車(chē),另外一個(gè)人說(shuō)不堵車(chē)。你就可以確認(rèn),路上是堵車(chē)的,也就是達(dá)成一致意見(jiàn)。
但是注意,達(dá)成一致意見(jiàn),并不意味著意見(jiàn)是正確的。有可能這三個(gè)人合起伙來(lái)騙你,那么這種情況下,也是達(dá)成一致,只不過(guò)一致的結(jié)論實(shí)際上是錯(cuò)誤的。拜占庭算法只解決是否能達(dá)成一致意見(jiàn)的問(wèn)題,不考慮意見(jiàn)是否正確。
具體來(lái)說(shuō),就是在一個(gè)分布式系統(tǒng)中,在N≥3F+1的情況下,一致性是可能實(shí)現(xiàn)的(N為計(jì)算機(jī)總數(shù),F(xiàn)為有問(wèn)題的計(jì)算機(jī)總數(shù))。信息在計(jì)算機(jī)間互相交換后,各計(jì)算機(jī)列出所有得到的信息,以大多數(shù)的結(jié)果作為解決辦法。
PBFT的優(yōu)點(diǎn):它不需要礦工,不需要確認(rèn),節(jié)約能源。
但是缺點(diǎn)是:這種模式需要節(jié)點(diǎn)之間進(jìn)行大量可靠的網(wǎng)絡(luò)通信(就是我不停地要問(wèn)周?chē)钠古仪蜃溃确质嵌嗌?,設(shè)想一下有50桌、500桌、5000桌的情況,這個(gè)通信強(qiáng)度呈指數(shù)級(jí)增加)。因此,這種方法只適用于一小群節(jié)點(diǎn),譬如聯(lián)盟鏈。
總結(jié):按照《經(jīng)濟(jì)學(xué)人》雜志的說(shuō)法,區(qū)塊鏈?zhǔn)且粋€(gè)信任機(jī)器。信任由共識(shí)產(chǎn)生,而具體的共識(shí)機(jī)制包括PoW、PoS、DPoS、PBFT等等。具體選擇哪一種方法,與項(xiàng)目和應(yīng)用有關(guān),不應(yīng)一概而論。