原文來自:https://blog.csdn.net/qq_35440678/article/details/79538992
1辆飘、什么是共識(shí)機(jī)制?
我們都知道盟猖,區(qū)塊鏈可以看作一本記錄所有交易的分布式公開帳簿腮敌,區(qū)塊鏈網(wǎng)絡(luò)中的每個(gè)參與者都把它看作一本所有權(quán)的權(quán)威記錄该互。
公開賬本歷史數(shù)據(jù)不可篡改,只允許往后添加捌斧,每個(gè)節(jié)點(diǎn)都具有相同的權(quán)限戈稿,那么就帶來一個(gè)問題:
公開賬本每個(gè)新區(qū)塊由誰來負(fù)責(zé)寫入西土?
因?yàn)樗泄?jié)點(diǎn)都一樣,如果所有節(jié)點(diǎn)同時(shí)一起寫入賬本數(shù)據(jù)鞍盗,那么肯定數(shù)據(jù)會(huì)不一致需了。
因此需要一種機(jī)制來保證區(qū)塊鏈中的每一區(qū)塊只能由一個(gè)節(jié)點(diǎn)來負(fù)責(zé)寫入,如何選出寫入賬本數(shù)據(jù)的節(jié)點(diǎn)般甲,這就是共識(shí)機(jī)制肋乍。讓平等的參與者按照某種秩序達(dá)成一致意見。
打個(gè)比方敷存,
現(xiàn)在有一個(gè)中心數(shù)據(jù)庫墓造,所有客戶端都能來查詢,每個(gè)客戶端權(quán)限都是一樣锚烦,但如果要對數(shù)據(jù)庫進(jìn)行增刪改觅闽,不好意思,每次只允許一個(gè)客戶端來操作涮俄,通俗講蛉拙,就是讓數(shù)據(jù)庫串行修改數(shù)據(jù)庫。通過一個(gè)算法機(jī)制來抉擇出操作的客戶端彻亲。這個(gè)機(jī)制就是共識(shí)機(jī)制孕锄,所謂的共識(shí)就是在人人平等的社會(huì)里需要大家共同形成一個(gè)共識(shí),產(chǎn)生一個(gè)操作者睹栖、臨時(shí)決策者硫惕,代表大家來進(jìn)行中心化的操作,大家按照這個(gè)共識(shí)來維持去中心化的網(wǎng)絡(luò)世界野来。
區(qū)塊鏈中的共識(shí)算法說到底還是分布式系統(tǒng)中最重要的一致性問題:
在分布式網(wǎng)絡(luò)中如何保證數(shù)據(jù)一致性曼氛。
說到一致性問題,就不得不提大名鼎鼎的拜占庭將軍問題令野。是 Leslie Lamport 1982 年提出用來解釋一致性問題的一個(gè)虛構(gòu)模型舀患。拜占庭是古代東羅馬帝國的首都,由于地域?qū)拸V气破,守衛(wèi)邊境的多個(gè)將軍(系統(tǒng)中的多個(gè)節(jié)點(diǎn))需要通過信使來傳遞消息聊浅,達(dá)成某些一致的決定。但由于將軍中可能存在叛徒(系統(tǒng)中節(jié)點(diǎn)出錯(cuò)),這些叛徒將努力向不同的將軍發(fā)送不同的消息低匙,試圖會(huì)干擾一致性的達(dá)成旷痕。
具體詳情內(nèi)容可執(zhí)行g(shù)oogle,我這里只說結(jié)論:
Leslie Lamport 證明顽冶,當(dāng)叛變者不超過1/3時(shí)欺抗,存在有效的算法,不論叛變者如何折騰强重,忠誠的將軍們總能達(dá)成一致的結(jié)果绞呈。如果叛變者過多,則無法保證一定能達(dá)到一致性间景。
對于拜占庭將軍問題分兩種情況:
1)針對非拜占庭錯(cuò)誤的情況佃声,一般包括 Paxos、Raft 及其變種倘要。
分布式數(shù)據(jù)庫設(shè)計(jì)一般都是基于paxos或raft算法秉溉。
對于paxos原理,可參考我之前寫的一篇文章:
幣夏:理解這兩點(diǎn)碗誉,也就理解了paxos協(xié)議的精髓?zhuanlan.zhihu.com
數(shù)據(jù)庫基本采用raft和paxos的變種:
百度最近剛剛開源了:百度正式開源其Raft一致性算法實(shí)現(xiàn)brafthttp://www.infoq.com/cn/news/2018/03/Baidu-open-source-Raft-algorithm
AliSQL X-Cluster基于X-Paxos的高性能強(qiáng)一致MySQL數(shù)據(jù)庫http://tech.it168.com/a2017/0803/3159/000003159063.shtml
微信開源:生產(chǎn)級paxos類庫PhxPaxos實(shí)現(xiàn)原理介紹http://www.infoq.com/cn/articles/weinxin-open-source-paxos-phxpaxos
阿里云新一代關(guān)系型數(shù)據(jù)庫 PolarDB 剖析 采用分布式Raft協(xié)議來保證數(shù)據(jù)的強(qiáng)一致性召嘶,擁有更加優(yōu)異的故障恢復(fù)時(shí)間,更加滿足數(shù)據(jù)容災(zāi)備份等業(yè)務(wù)場景的需求哮缺。http://www.infoq.com/cn/articles/ali-polardb
2)對于要能容忍拜占庭錯(cuò)誤的情況弄跌,一般包括 PBFT 系列、PoW 系列算法等尝苇。
從概率角度铛只,PBFT 系列算法是確定的,一旦達(dá)成共識(shí)就不可逆轉(zhuǎn)糠溜;而 PoW 系列算法則是不確定的淳玩,隨著時(shí)間推移,被推翻的概率越來越小非竿。
1)拜占庭共識(shí)算法系列PBFT/DBFT機(jī)制:
拜占庭假設(shè)是對現(xiàn)實(shí)世界的模型化蜕着,由于硬件錯(cuò)誤、網(wǎng)絡(luò)擁塞或斷開以及遭到惡意攻擊红柱,計(jì)算機(jī)和網(wǎng)絡(luò)可能出現(xiàn)不可預(yù)料的行為承匣。拜占庭容錯(cuò)協(xié)議必須處理這些失效,并且這些協(xié)議還要滿足所要解決的問題要求的規(guī)范锤悄。這些算法通常以其彈性t作為特征韧骗,t表示算法可以應(yīng)付的錯(cuò)誤進(jìn)程數(shù)。很多經(jīng)典算法問題只有在n ≥ 3t+1時(shí)才有解零聚,如拜占庭將軍問題袍暴,其中n是系統(tǒng)中進(jìn)程的總數(shù)些侍。
拜占庭容錯(cuò)能夠容納將近1/3的錯(cuò)誤節(jié)點(diǎn)誤差,IBM創(chuàng)建的Hyperledger就是使用了該算法作為共識(shí)算法政模。
DBFT機(jī)制岗宣,是由權(quán)益來選出記賬人,然后記賬人之間通過拜占庭容錯(cuò)算法來達(dá)成共識(shí)览徒,這種方式的優(yōu)點(diǎn)是:
1)專業(yè)化的記賬人狈定;
2)可以容忍任何類型的錯(cuò)誤;
3)記賬由多人協(xié)同完成习蓬,每一個(gè)區(qū)塊都有最終性纽什,不會(huì)分叉;
4)算法的可靠性有嚴(yán)格的數(shù)學(xué)證明躲叼;
缺點(diǎn):
1)當(dāng)有1/3或以上記賬人停止工作后芦缰,系統(tǒng)將無法提供服務(wù);
2)當(dāng)有1/3或以上記賬人聯(lián)合作惡枫慷,且其它所有的記賬人被恰好分割為兩個(gè)網(wǎng)絡(luò)孤島時(shí)让蕾,惡意記賬人可以使系統(tǒng)出現(xiàn)分叉,但是會(huì)留下密碼學(xué)證據(jù)或听;
對于拜占庭將軍問題可自行網(wǎng)上查找資料探孝,很多這里不再贅述。
2)工作量證明PoW
工作量證明誉裆,Proof of Work顿颅,通過計(jì)算來猜測一個(gè)數(shù)值(nonce),得以解決規(guī)定的 hash 問題(來源于 hashcash)足丢。保證在一段時(shí)間內(nèi)粱腻,系統(tǒng)中只能出現(xiàn)少數(shù)合法提案。
同時(shí)斩跌,這些少量的合法提案會(huì)在網(wǎng)絡(luò)中進(jìn)行廣播绍些,收到的用戶進(jìn)行驗(yàn)證后會(huì)基于它認(rèn)為的最長鏈上繼續(xù)難題的計(jì)算。因此耀鸦,系統(tǒng)中可能出現(xiàn)鏈的分叉(Fork)柬批,但最終會(huì)有一條鏈成為最長的鏈。
3)權(quán)益證明PoS
權(quán)益證明揭糕,Proof of Stake萝快,2013 年被提出,最早在 Peercoin 系統(tǒng)中被實(shí)現(xiàn)著角,類似現(xiàn)實(shí)生活中的股東機(jī)制,擁有股份越多的人越容易獲取記賬權(quán)旋恼。
典型的過程是通過保證金(代幣吏口、資產(chǎn)奄容、名聲等具備價(jià)值屬性的物品即可)來對賭一個(gè)合法的塊成為新的區(qū)塊,收益為抵押資本的利息和交易服務(wù)費(fèi)产徊。提供證明的保證金(例如通過轉(zhuǎn)賬貨幣記錄)越多昂勒,則獲得記賬權(quán)的概率就越大。合法記賬者可以獲得收益舟铜。
PoS 是試圖解決在 PoW 中大量資源被浪費(fèi)的缺點(diǎn)戈盈。惡意參與者將存在保證金被罰沒的風(fēng)險(xiǎn),即損失經(jīng)濟(jì)利益谆刨。
一般的塘娶,對于 PoS 來說,需要掌握超過全網(wǎng) 的資源痊夭,才有可能左右最終的結(jié)果刁岸。這個(gè)也很容易理解,三個(gè)人投票她我,前兩人分別支持一方虹曙,這時(shí)候,第三方的投票將決定最終結(jié)果番舆。
4)授權(quán)股權(quán)證明機(jī)制DPOS
PoS 的改進(jìn)算法酝碳,DPOS與POS原理相似。與POS的主要區(qū)別在于節(jié)點(diǎn)選舉若干代理恨狈,由代理人驗(yàn)證和記賬疏哗。
PoW機(jī)制和PoS機(jī)制雖然都能有效地解決記賬行為的一致性共識(shí)問題,但是現(xiàn)有的比特幣PoW機(jī)制純粹依賴算力拴事,導(dǎo)致專業(yè)從事挖礦的礦工群體似乎已和比特幣社區(qū)完全分隔沃斤,某些礦池的巨大算力儼然成為另一個(gè)中心,這與比特幣的去中心化思想相沖突刃宵。PoS機(jī)制雖然考慮到了PoW的不足衡瓶,但依據(jù)權(quán)益結(jié)余來選擇,會(huì)導(dǎo)致首富賬戶的權(quán)力更大牲证,有可能支配記賬權(quán)哮针。
股份授權(quán)證明機(jī)制( Delegated Proof of Stake,DPoS)的出現(xiàn)正是基于解決PoW機(jī)制和PoS機(jī)制的這類不足坦袍。
當(dāng)然十厢,隨著科技的發(fā)展,在未來可能還會(huì)誕生更好的共識(shí)機(jī)制捂齐。
3蛮放、目前主流區(qū)塊鏈分別用的是什么共識(shí)算法?
主流區(qū)塊鏈采用的共識(shí)算法匯總?cè)缦拢?/p>
1)PoW共識(shí)算法代表:比特幣&萊特幣&以太坊
比特幣采用的是PoW(Proof of Work)奠宜,工作量證明包颁,通過計(jì)算來猜測一個(gè)數(shù)值(nonce)瞻想,得以解決規(guī)定的 hash 問題。
直接看比特幣源碼:
https://github.com/bitcoin/bitcoin/blob/master/src/rpc/mining.cpp
https://github.com/bitcoin/bitcoin/blob/master/src/primitives/block.h
需要以下參數(shù):
block的版本 version
上一個(gè)block的hash值: prev_hash
需要寫入的交易記錄的hash樹的值: merkle_root
更新時(shí)間: ntime
當(dāng)前難度: nbits
挖礦的過程就是找到x使得以下等式成立:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
上式的x的范圍是0~2^32, TARGET可以根據(jù)當(dāng)前難度求出的娩嚼。由于hash的特性蘑险,找這樣一個(gè)x只能暴力搜索。
PoW共識(shí)算法的核心是所有節(jié)點(diǎn)通過暴力查找x岳悟,使得上面的等式成立佃迄。
誰先找到誰就或者這一區(qū)塊的寫入權(quán),并獲得獎(jiǎng)勵(lì)贵少,因此pow共識(shí)機(jī)制對所有節(jié)點(diǎn)都公平呵俏,誰的算力強(qiáng)誰就更有機(jī)會(huì)更高概率獲得寫入權(quán)。
以太坊也是采用PoW工作量證明算法春瞬,具體實(shí)現(xiàn)算法叫(Ethash)
具體內(nèi)容可以看官方wiki:https://github.com/ethereum/wiki/wiki/Ethash
2)PoS機(jī)制代表:Peercoin & Nxt
點(diǎn)點(diǎn)幣(Peercoin )的權(quán)益證明機(jī)制結(jié)合了隨機(jī)化與幣齡的概念柴信,未使用至少30天的幣可以參與競爭下一區(qū)塊,越久和越大的幣集有更大的可能去簽名下一區(qū)塊宽气。然而随常,一旦幣的權(quán)益被用于簽名一個(gè)區(qū)塊,則幣齡將清為零萄涯,這樣必須等待至少30日才能簽署另區(qū)塊绪氛。同時(shí),為防止非常老或非常大的權(quán)益控制區(qū)塊鏈涝影,尋找下一區(qū)塊的最大概率在90天后達(dá)到最大值枣察,這一過程保護(hù)了網(wǎng)絡(luò),并隨著時(shí)間逐漸生成新的幣而無需消耗大量的計(jì)算能力燃逻。點(diǎn)點(diǎn)幣的開發(fā)者聲稱這將使得惡意攻擊變得困難序目,因?yàn)闆]有中心化的挖礦池需求,而且購買半數(shù)以上的幣的開銷似乎超過獲得51%的工作量證明的哈希計(jì)算能力伯襟。
權(quán)益證明必須采用某種方法定義任意區(qū)塊鏈中的下一合法區(qū)塊猿涨,依據(jù)賬戶結(jié)余來選擇將導(dǎo)致中心化,例如單個(gè)首富成員可能會(huì)擁有長久的優(yōu)勢姆怪。為此叛赚,人們還設(shè)計(jì)了其他不同的方法來選擇下一合法區(qū)塊。
NXT幣采用隨機(jī)方法預(yù)測下一合法區(qū)塊稽揭,使用公式查找與權(quán)益大小結(jié)合的最小哈希值俺附。由于權(quán)益公開,每個(gè)節(jié)點(diǎn)都可以合理的準(zhǔn)確度預(yù)計(jì)哪個(gè)賬戶有權(quán)建立區(qū)塊溪掀。
3)DPoS共識(shí)算法代表:Bitshare & EOS
比特股( Bitshare)是一類采用DPoS機(jī)制的密碼貨幣事镣,它期望通過引入一個(gè)技術(shù)民主層來減少中心化的負(fù)面影響。
比特股引入了見證人這個(gè)概念揪胃,見證人可以生成區(qū)塊蛮浑,每一個(gè)持有比特股的人都可以投票選舉見證人唠叛。得到總同意票數(shù)中的前N個(gè)(N通常定義為101)候選者可以當(dāng)選為見證人只嚣,當(dāng)選見證人的個(gè)數(shù)(N)需滿足:至少一半的參與投票者相信N已經(jīng)充分地去中心化沮稚。
見證人的候選名單每個(gè)維護(hù)周期(1天)更新一次。見證人然后隨機(jī)排列册舞,每個(gè)見證人按序有2秒的權(quán)限時(shí)間生成區(qū)塊蕴掏,若見證人在給定的時(shí)間片不能生成區(qū)塊,區(qū)塊生成權(quán)限交給下一個(gè)時(shí)間片對應(yīng)的見證人调鲸。DPoS的這種設(shè)計(jì)使得區(qū)塊的生成更為快速盛杰,也更加節(jié)能。DPoS充分利用了持股人的投票藐石,以公平民主的方式達(dá)成共識(shí)即供,他們投票選出的N個(gè)見證人,可以視為N個(gè)礦池于微,而這N個(gè)礦池彼此的權(quán)利是完全相等的逗嫡。持股人可以隨時(shí)通過投票更換這些見證人(礦池),只要他們提供的算力不穩(wěn)定株依,計(jì)算機(jī)宕機(jī),或者試圖利用手中的權(quán)力作惡恋腕。
比特股還設(shè)計(jì)了另外一類競選,代表競選荠藤。選出的代表擁有提出改變網(wǎng)絡(luò)參數(shù)的特權(quán),包括交易費(fèi)用哈肖、區(qū)塊大小、見證人費(fèi)用和區(qū)塊區(qū)間牡彻。若大多數(shù)代表同意所提出的改變扫沼,持股人有兩周的審查期庄吼,這期間可以罷免代表并廢止所提出的改變缎除。這一設(shè)計(jì)確保代表技術(shù)上沒有直接修改參數(shù)的權(quán)利以及所有的網(wǎng)絡(luò)參數(shù)的改變最終需得到持股人的同意。
每一種共識(shí)算法都有各自的應(yīng)用場景,沒有絕對的好壞之分渐行。到底選擇哪個(gè)共識(shí)來進(jìn)行區(qū)塊鏈的實(shí)施取決于哪類網(wǎng)絡(luò)和數(shù)據(jù)轰坊。
最近很反感一種現(xiàn)象:很多新區(qū)塊鏈一上來就說自己的共識(shí)算法是PoA铸董、PoB~PoZ(a到z的字母都快被用完了),動(dòng)不動(dòng)就說是顛覆性的肴沫,可實(shí)際上還是對以上介紹的幾種共識(shí)算法的模仿或小改造粟害,讓初入?yún)^(qū)塊鏈行業(yè)的人很懵逼,覺得好高大上颤芬,純屬嚇唬人悲幅。
--------------------- 本文來自 yinnnnnnn 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/qq_35440678/article/details/79538992?utm_source=copy?