深入了解區(qū)塊鏈的共識(shí)機(jī)制及算法原理


區(qū)塊鏈共識(shí)

什么是共識(shí)機(jī)制

所謂“共識(shí)機(jī)制”,是通過特殊節(jié)點(diǎn)的投票,在很短的時(shí)間內(nèi)完成對(duì)交易的驗(yàn)證和確認(rèn);對(duì)一筆交易,如果利益不相干的若干個(gè)節(jié)點(diǎn)能夠達(dá)成共識(shí),我們就可以認(rèn)為全網(wǎng)對(duì)此也能夠達(dá)成共識(shí)。再通俗一點(diǎn)來講,如果中國一名微博大V、美國一名虛擬幣玩家、一名非洲留學(xué)生和一名歐洲旅行者互不相識(shí),但他們都一致認(rèn)為你是個(gè)好人,那么基本上就可以斷定你這人還不壞。


區(qū)塊鏈為什么需要共識(shí)機(jī)制(算法)

要想整個(gè)區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)維持一份相同的數(shù)據(jù),同時(shí)保證每個(gè)參與者的公平性,整個(gè)體系的所有參與者必須要有統(tǒng)一的協(xié)議,也就是我們這里要將的共識(shí)算法。比特幣所有的節(jié)點(diǎn)都遵循統(tǒng)一的協(xié)議規(guī)范。協(xié)議規(guī)范(共識(shí)算法)由相關(guān)的共識(shí)規(guī)則組成,這些規(guī)則可以分為兩個(gè)大的核心:工作量證明與最長鏈機(jī)制。所有規(guī)則(共識(shí))的最終體現(xiàn)就是比特幣的最長鏈。共識(shí)算法的目的就是保證比特幣不停地在最長鏈條上運(yùn)轉(zhuǎn),從而保證整個(gè)記賬系統(tǒng)的一致性和可靠性。


四種主流的共識(shí)機(jī)制

區(qū)塊鏈中的用戶進(jìn)行交易時(shí)不需要考慮對(duì)方的信用、不需要信任對(duì)方,也無需一個(gè)可信的中介機(jī)構(gòu)或中央機(jī)構(gòu),只需要依據(jù)區(qū)塊鏈協(xié)議即可實(shí)現(xiàn)交易。這種不需要可信第三方中介就可以順利交易的前提是區(qū)塊鏈的共識(shí)機(jī)制,即在互不了解、信任的市場環(huán)境中,參與交易的各節(jié)點(diǎn)出于對(duì)自身利益考慮,沒有任何違規(guī)作弊的動(dòng)機(jī)、行為,因此各節(jié)點(diǎn)會(huì)主動(dòng)自覺遵守預(yù)先設(shè)定的規(guī)則,來判斷每一筆交易的真實(shí)性和可靠性,并將檢驗(yàn)通過的記錄寫入到區(qū)塊鏈中。各節(jié)點(diǎn)的利益各不相同,邏輯上將它們沒有合謀欺騙作弊的動(dòng)機(jī)產(chǎn)生,而當(dāng)網(wǎng)絡(luò)中有的節(jié)點(diǎn)擁有公共信譽(yù)時(shí),這一點(diǎn)尤為明顯。區(qū)塊鏈技術(shù)運(yùn)用基于數(shù)學(xué)原理的共識(shí)算法,在節(jié)點(diǎn)之間建立“信任”網(wǎng)絡(luò),利用技術(shù)手段從而實(shí)現(xiàn)一種創(chuàng)新式的信用網(wǎng)絡(luò)。

目前區(qū)款連行業(yè)內(nèi)主流的共識(shí)算法機(jī)制包含:工作量證明機(jī)制、權(quán)益證明機(jī)制、股份授權(quán)證明機(jī)制和Pool驗(yàn)證池這四大類。

01 工作量證明機(jī)制

工作量證明機(jī)制即對(duì)于工作量的證明,是生成要加入到區(qū)塊鏈中的一筆新的交易信息(即新區(qū)塊)時(shí)必須滿足的要求。在基于工作量證明機(jī)制構(gòu)建的區(qū)塊鏈網(wǎng)絡(luò)中,節(jié)點(diǎn)通過計(jì)算隨機(jī)哈希散列的數(shù)值解爭奪記賬權(quán),求得正確的數(shù)值解以生成區(qū)塊的能力是節(jié)點(diǎn)算力的具體表現(xiàn)。工作量證明機(jī)制具有完全去中心化的優(yōu)點(diǎn),在以工作量證明機(jī)制為共識(shí)的區(qū)塊鏈中,節(jié)點(diǎn)可以自由進(jìn)出。大家所熟知的比特幣網(wǎng)絡(luò)就應(yīng)用工作量證明機(jī)制來生產(chǎn)新的貨幣。然而,由于工作量證明機(jī)制在比特幣網(wǎng)絡(luò)中的應(yīng)用已經(jīng)吸引了全球計(jì)算機(jī)大部分的算力,其他想嘗試使用該機(jī)制的區(qū)塊鏈應(yīng)用很難獲得同樣規(guī)模的算力來維持自身的安全。同時(shí),基于工作量證明機(jī)制的挖礦行為還造成了大量的資源浪費(fèi),達(dá)成共識(shí)所需要的周期也較長,因此該機(jī)制并不適合商業(yè)應(yīng)用。

02 權(quán)益證明機(jī)制

2012年,化名Sunny King的網(wǎng)友推出了Peercoin,該加密電子貨幣采用工作量證明機(jī)制發(fā)行新幣,采用權(quán)益證明機(jī)制維護(hù)網(wǎng)絡(luò)安全,這是權(quán)益證明機(jī)制在加密電子貨幣中的首次應(yīng)用。與要求證明人執(zhí)行一定量的計(jì)算工作不同,權(quán)益證明要求證明人提供一定數(shù)量加密貨幣的所有權(quán)即可。權(quán)益證明機(jī)制的運(yùn)作方式是,當(dāng)創(chuàng)造一個(gè)新區(qū)塊時(shí),礦工需要?jiǎng)?chuàng)建一個(gè)“幣權(quán)”交易,交易會(huì)按照預(yù)先設(shè)定的比例把一些幣發(fā)送給礦工本身。權(quán)益證明機(jī)制根據(jù)每個(gè)節(jié)點(diǎn)擁有代幣的比例和時(shí)間,依據(jù)算法等比例地降低節(jié)點(diǎn)的挖礦難度,從而加快了尋找隨機(jī)數(shù)的速度。這種共識(shí)機(jī)制可以縮短達(dá)成共識(shí)所需的時(shí)間,但本質(zhì)上仍然需要網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)行挖礦運(yùn)算。因此,PoS機(jī)制并沒有從根本上解決PoW機(jī)制難以應(yīng)用于商業(yè)領(lǐng)域的問題。

03 股份授權(quán)證明機(jī)制

股份授權(quán)證明機(jī)制是一種新的保障網(wǎng)絡(luò)安全的共識(shí)機(jī)制。它在嘗試解決傳統(tǒng)的PoW機(jī)制和PoS機(jī)制問題的同時(shí),還能通過實(shí)施科技式的民主抵消中心化所帶來的負(fù)面效應(yīng)。

股份授權(quán)證明機(jī)制與董事會(huì)投票類似,該機(jī)制擁有一個(gè)內(nèi)置的實(shí)時(shí)股權(quán)人投票系統(tǒng),就像系統(tǒng)隨時(shí)都在召開一個(gè)永不散場的股東大會(huì),所有股東都在這里投票決定公司決策。基于DPoS機(jī)制建立的區(qū)塊鏈的去中心化依賴于一定數(shù)量的代表,而非全體用戶。在這樣的區(qū)塊鏈中,全體節(jié)點(diǎn)投票選舉出一定數(shù)量的節(jié)點(diǎn)代表,由他們來代理全體節(jié)點(diǎn)確認(rèn)區(qū)塊、維持系統(tǒng)有序運(yùn)行。同時(shí),區(qū)塊鏈中的全體節(jié)點(diǎn)具有隨時(shí)罷免和任命代表的權(quán)力。如果必要,全體節(jié)點(diǎn)可以通過投票讓現(xiàn)任節(jié)點(diǎn)代表失去代表資格,重新選舉新的代表,實(shí)現(xiàn)實(shí)時(shí)的民主。

股份授權(quán)證明機(jī)制可以大大縮小參與驗(yàn)證和記賬節(jié)點(diǎn)的數(shù)量,從而達(dá)到秒級(jí)的共識(shí)驗(yàn)證。然而,該共識(shí)機(jī)制仍然不能完美解決區(qū)塊鏈在商業(yè)中的應(yīng)用問題,因?yàn)樵摴沧R(shí)機(jī)制無法擺脫對(duì)于代幣的依賴,而在很多商業(yè)應(yīng)用中并不需要代幣的存在。

04 PooI驗(yàn)證池

Pool驗(yàn)證池基于傳統(tǒng)的分布式一致性技術(shù)建立,并輔之以數(shù)據(jù)驗(yàn)證機(jī)制,是目前區(qū)塊鏈中廣泛使用的一種共識(shí)機(jī)制。

Pool驗(yàn)證池不需要依賴代幣就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基礎(chǔ)之上,可以實(shí)現(xiàn)秒級(jí)共識(shí)驗(yàn)證,更適合有多方參與的多中心商業(yè)模式。不過,Pool驗(yàn)證池也存在一些不足,例如該共識(shí)機(jī)制能夠?qū)崿F(xiàn)的分布式程度不如PoW機(jī)制等


工作量證明算法解析

這里主要講解區(qū)塊鏈工作量證明機(jī)制的一些算法原理以及比特幣網(wǎng)絡(luò)是如何證明自己的工作量的,希望大家能夠?qū)沧R(shí)算法有一個(gè)基本的認(rèn)識(shí)。

基本技術(shù)原理

工作量證明系統(tǒng)的主要特征是客戶端要做一定難度的工作來得到一個(gè)結(jié)果,驗(yàn)證方則很容易通過結(jié)果來檢查客戶端是不是做了相應(yīng)的工作。這種方案的一個(gè)核心特征是不對(duì)稱性:工作對(duì)于請(qǐng)求方是適中中的,對(duì)于驗(yàn)證方是易于驗(yàn)證的。它與驗(yàn)證碼不同,驗(yàn)證碼是易于被人類解決而不是易于被計(jì)算機(jī)解決。

下圖所示的為工作量證明流程。

工作量證明流程

舉個(gè)例子,給個(gè)一個(gè)基本的字符創(chuàng)“hello,world!”,我們給出的工作量要求是,可以在這個(gè)字符創(chuàng)后面添加一個(gè)叫做nonce(隨機(jī)數(shù))的整數(shù)值,對(duì)變更后(添加nonce)的字符創(chuàng)進(jìn)行SHA-256運(yùn)算,如果得到的結(jié)果(一十六進(jìn)制的形式表示)以“0000”開頭的,則驗(yàn)證通過。為了達(dá)到這個(gè)工作量證明的目標(biāo),需要不停地遞增nonce值,對(duì)得到的字符創(chuàng)進(jìn)行SHA-256哈希運(yùn)算。按照這個(gè)規(guī)則,需要經(jīng)過4251次運(yùn)算,才能找到前導(dǎo)為4個(gè)0的哈希散列。

“Hello,World!0"=>1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64

“Hello,World!1"=>e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8

“Hello,World!2"=>ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7

...“Hello,World!4250"=>0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9

通過這個(gè)示例我們對(duì)工作量證明機(jī)制有了一個(gè)初步的理解。有人或許認(rèn)為如果工作量證明只是這樣一個(gè)過程,那是不是只要記住nonce為4521使計(jì)算能通過驗(yàn)證就行了,當(dāng)然不是了,這只是一個(gè)例子。

下面我們將輸入簡單的變更為”Hello,World!+整數(shù)值”,整數(shù)值取1~1000,也就是說將輸入變成一個(gè)1~1000的數(shù)組:Hello,World!1;Hello,World!2;...;Hello,World!1000。然后對(duì)數(shù)組中的每一個(gè)輸入依次進(jìn)行上面的工作量證明—找到前導(dǎo)為4個(gè)0的哈希散列。

由于哈希值偽隨機(jī)的特性,根據(jù)概率論的相關(guān)知識(shí)容易計(jì)算出,預(yù)計(jì)要進(jìn)行2的16次方次數(shù)的嘗試,才能得到前導(dǎo)為4個(gè)0的哈希散列。而統(tǒng)計(jì)一下剛剛進(jìn)行的1000次計(jì)算的實(shí)際結(jié)果會(huì)發(fā)現(xiàn),進(jìn)行計(jì)算的平均次數(shù)為66958次,十分接近2的16次方(65536)。在這個(gè)例子中,數(shù)學(xué)期望的計(jì)算次數(shù)實(shí)際就是要求的“工作量”,重復(fù)進(jìn)行多次的工作量證明會(huì)是一個(gè)符合統(tǒng)計(jì)學(xué)規(guī)律的概率事件。

統(tǒng)計(jì)輸入的字符創(chuàng)與得到對(duì)應(yīng)目標(biāo)結(jié)果實(shí)際使用的計(jì)算次數(shù)如下:

Hello,World!1=>42153

Hello,World!2=>2643

Hello,World!3=>32825

Hello,World!4=>250

Hello,World!5=>7300

...

Hello,World!995=>164819

Hello,World!996=>178486

Hello,World!997=>22798

Hello,World!998=>68868

Hello,World!999=>46281

比特幣的工作量證明

對(duì)于比特幣網(wǎng)絡(luò)中的任何節(jié)點(diǎn),如果想生成一個(gè)新的區(qū)塊加入到區(qū)塊鏈中,則必須解決出比特幣網(wǎng)絡(luò)出的這道謎題。這道題的關(guān)鍵要素是工作量證明函數(shù)、區(qū)塊及難度值。工作量證明函數(shù)是這道題的計(jì)算方法,區(qū)塊是這道題的輸入數(shù)據(jù),難度值決定了解這道題的所需要的計(jì)算量。

比特幣網(wǎng)絡(luò)中使用的工作量證明函數(shù)正是上文提及的SHA-256。區(qū)塊其實(shí)就是在工作量證明環(huán)節(jié)產(chǎn)生的。曠工通過不停地構(gòu)造區(qū)塊數(shù)據(jù),檢驗(yàn)每次計(jì)算出的結(jié)果是否滿足要求的工作量,從而判斷該區(qū)塊是不是符合網(wǎng)絡(luò)難度。區(qū)塊頭即比特幣工作量證明函數(shù)的輸入數(shù)據(jù)。

難度值是礦工們挖掘的重要參考指標(biāo),它決定了曠工需要經(jīng)過多少次哈希運(yùn)算才能產(chǎn)生一個(gè)合法的區(qū)塊。比特幣網(wǎng)絡(luò)大約每10分鐘生成一個(gè)區(qū)塊,如果在不同的全網(wǎng)算力條件下,新區(qū)塊的產(chǎn)生基本都保持這個(gè)速度,難度值必須根據(jù)全網(wǎng)算力的變化進(jìn)行調(diào)整??偟脑瓌t即為無論挖礦能力如何,使得網(wǎng)絡(luò)始終保持10分鐘產(chǎn)生一個(gè)新區(qū)塊。

難度值的調(diào)整是在每個(gè)完整節(jié)點(diǎn)中獨(dú)立自動(dòng)發(fā)生的。每隔2016個(gè)區(qū)塊,所有節(jié)點(diǎn)都會(huì)按照統(tǒng)一的格式自動(dòng)調(diào)整難度值,這個(gè)公式是由最新產(chǎn)生的2016個(gè)區(qū)塊的花費(fèi)時(shí)長與期望時(shí)長(按每10分鐘產(chǎn)生一個(gè)取款,則期望時(shí)長為20160分鐘)比較得出來的,根據(jù)實(shí)際時(shí)長一期望時(shí)長的比值進(jìn)行調(diào)整。也就是說,如果區(qū)塊產(chǎn)生的速度比10分鐘快,則增加難度值;反正,則降低難度值。用公式來表達(dá)如下:

新難度值=舊難度值*(20160分鐘/過去2016個(gè)區(qū)塊花費(fèi)時(shí)長)。

工作量證明需要有一個(gè)目標(biāo)值。比特幣工作量證明的目標(biāo)值(Target)的計(jì)算公式如下:

目標(biāo)值=最大目標(biāo)值/難度值,其中最大目標(biāo)值為一個(gè)恒定值0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目標(biāo)值的大小與難度值成反比,比特幣工作量證明的達(dá)成就是礦中計(jì)算出來的區(qū)塊哈希值必須小于目標(biāo)值。

我們也可以將比特幣工作量的過程簡單的理解成,通過不停變更區(qū)塊頭(即嘗試不同nonce值)并將其作為輸入,進(jìn)行SHA-256哈希運(yùn)算,找出一個(gè)有特定格式哈希值的過程(即要求有一定數(shù)量的前導(dǎo)0),而要求的前導(dǎo)0個(gè)數(shù)越多,難度越大。

可以把比特幣將這道工作量證明謎題的步驟大致歸納如下:

1)生成coinbase交易,并與其他所有打包進(jìn)區(qū)塊的交易組成交易列表,通過Merkle Tree算法生成Merkle Root Hash。

2)把Merkle Root Hash及其他相關(guān)字段組裝成區(qū)塊頭,將區(qū)塊頭的80字節(jié)數(shù)據(jù)作為工作量證明的輸入。

3)不停變更區(qū)塊頭中的隨機(jī)數(shù)(即nonce值),并對(duì)每次變更后的區(qū)塊頭進(jìn)行雙重SHA-256運(yùn)算,將結(jié)果值哈希翻轉(zhuǎn)并與當(dāng)前網(wǎng)絡(luò)的目標(biāo)值對(duì)應(yīng)的十進(jìn)制字符創(chuàng)對(duì)比,如果小于目標(biāo)值,則解題成功,工作量證明完成。

該過程可以用下圖表示:

區(qū)塊謎題

比特幣的工作量證明,就是我們俗稱“挖礦”所做的主要工作。理解工作量證明機(jī)制,將為我們進(jìn)一步理解比特幣區(qū)塊鏈的共識(shí)機(jī)制奠定基礎(chǔ)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容