通過前面的學習我們知道,區塊鏈技術是一些技術的精妙組合,換言之,區塊鏈可以被看作是一種使用已有技術的創新性整合應用,
我們可以認為智能合約是區塊鏈原創的,但其實智能合約概念早在1995年就由Nick Szabo首次提出了,只不過到區塊鏈才真正實作,
有人說區塊鏈有四大核心技術,分別是:分布式存盤,共識機制,智能合約和密碼學,還有一種說法,區塊鏈有八大核心技術:區塊+鏈,
Hash函式,共識機制,智能合約,P2P,Merkle樹,加密演算法,發行和激勵機制,
無論是哪一種說法,業界公認共識機制是區塊鏈的核心技術,是區塊鏈的技識訓石,區塊鏈是一個分布式賬本,其顯著特征是去中心化,
(注意:有些區塊鏈系統是弱中心化,就是有弱中心結點,)區塊鏈的去中心化就是靠共識機制來實作的,

密碼學是區塊鏈的骨架,而共識機制是區塊鏈的靈魂,可以毫不夸張的講,學習區塊鏈就必須掌握共識機制,
簡單一點說:在資料處理和統籌結點時,都需要共識機制來保障系統的正確運行,

共識機制解決了如下問題:
1.維護系統的運作順序與公平性
2.通過獎懲維護系統的穩定運行
下面,我們就從零開始,來學習區塊鏈的共識機制,
我們通過回答以下問題,來從淺入深地了解共識機制的本質和原理,
1.什么是共識?
2.為什么區塊鏈系統需要共識?
3.由誰來達成共識?
4.什么時候需要共識?
5.什么是共識機制?它和共識演算法有什么區別和聯系?
6.如何達成共識?
7.有哪些主要的共識機制?
8.共識機制如何分類?
9.各種共識機制的對比與評價
10.區塊鏈開發者如何選擇共識機制?
我們逐一尋找這些問題的答案,
1. 什么是共識?
一般來說,所謂共識就是一個問題或一件事務的所有或者大多數參與者達成的統一意見與看法, 比如一個公司召集董事開董事會,某個提案通過了,叫達成共識,
如果意見不統一,對某提案的投票沒有超過一定數量,無法通過某個提案,這就叫無法達成共識,國家與國家之間就某個問題進行的雙邊談判也一樣,可能形成共識,也
可能無法達成共識,

有一種對共識的誤解,就是認為共識等同于"同意","肯定",這樣理解是錯誤的,不準確的,對某事務形成統一意見就叫達成共識,比如對某一提案,所有人都說Yes,這是
達成共識,所有人都說No, 這也叫“達成共識”, 大多數情況下,達成共識不需要所有參與方都統一意見,往往是大多數(達到一定比例)參與者意見一致就認為達成共識了,
這個比例不是統一的也不是固定的,
2.為什么區塊鏈系統需要共識
為什么分布式區塊鏈系統需要共識機制,而傳統的C/S或B/S架構的中心服務器系統不需要共識機制?這就好比現實世界中,如果一個組織有一個最高領匯入,那么一切的決策
由這個最高領導者決定,下屬去執行就可以了,這個時候是最容易達成共識的,因為領導的決策就是共識,把中心服務器安裝在機房的那種傳統的軟體系統,資料增刪改查由系統
管理員和超級用戶決定,普通用戶基本上無權決定什么,也就不需要共識機制了,
但是,在區塊鏈這種分布式系統中,所有結點都是平等的,都有話語權,例如,在需要WaKuang的區塊鏈中,任何一個礦工結點都有權打包發布一個區塊,那么問題就來了,該把打包
權授予給誰?究竟系統認為誰挖出的區塊是合法的?哪個礦工可以得到獎勵?Alice轉給Bob的某筆交易是否是合法有效的?這些都需要參與運行的結點之間達成共識,否則,
各執一詞,就會爭執不休,系統就沒辦法正常作業了,
3.由誰來達成共識
前面我們舉了幾個例子,都是參與會談的人或者組織機構達成共識,我們可能會看到這樣的描述:......Kuang工之間需要達成共識....,其實,在區塊鏈系統里面,通過共識機制,讓所有結點
通過演算法達成共識,而不是參與區塊鏈的人之間達成“共識”,這就通過機制保證了共識的真實姓,注意:是由機器(結點)達成共識,不是人達成共識,

4.什么時候需要共識?
- Kuang工打包記賬的時候
- 分叉的時候
- 獎勵 懲罰的時候
- 總之:任何改變區塊鏈狀態的時候都需要共識
5.什么是共識機制?它和共識演算法有什么區別和聯系
區塊鏈中的共識機制是所有結點都必須遵守的規則,就好像現實世界的“法律”,如果還不能理解,就把區塊鏈中的共識機制和網路中的協議做個類比,把它理解成區塊鏈中的一種“協議”,

所有的共識演算法必須具備三個基本要求:
1.一致性 (safety):所有參與共識的誠實的節點,得到的計算結果是相同的,而且是符合共識協議的,
2. 終局性 (liveness):所有參與共識的誠實的節點,最終可以達成一致性結果,
3. 容錯性 (fault tolerance):在共識演算法
注意:共識機制不等于共識演算法,共識機制由共識演算法來實作,比如:PoW共識機制由PoW共識演算法來實作,
一個共識機制可能由一到多個演算法來實作它,目前我們看到的共識機制大部分都由一種共識演算法來實作,
6.如何達成共識?
前面我們看到了,面對面坐在一起協商談判都很難達成共識,更何況區塊鏈是分布式的,彼此不信任的結點之間要達成共識就更困難,
所以需要借助共識機制在物理上分散的各個彼此互不信任的結點之間達成共識,
7.有哪些主要的共識機制?
7.1 作業量證明(PoW)
作業量證明(POW,Proof-of-Work)是一個用于阻止拒絕服務攻擊和類似垃圾郵件等服務錯誤問題的協議,它在 1993 年被 Cynthia Dwork 和 Moni Naor 提出,它能夠幫助分布式系統達到拜占庭容錯,
作業量證明可以簡單理解為一份證明,用來確認你做了一定量的作業,
在數字貨幣系統中,作業量證明主要通過計算來猜測一個亂數(nonce),使它拼湊交易資料后的內容的Hash值滿足一個規定的上限,由于Hash值在數學上主要采用群舉法碰撞所得,需要進行大量的計算,只要能提出滿足要求的亂數的礦工就被認為付出了一定的作業量,可以獲得這個區塊的獎勵,
哈希運算是一種最常見的作業量證明機制,該機制主要利用哈希運算的復雜度,通過給定的初始值,進行簡單的值遞增運算,利用哈希演算法求解,直到找到滿足條件的碰撞值,不同的哈希演算法求得的碰撞值長度不同,所需作業量和安全性能也不同,碰撞值的長度越長,則所需的作業量越大,對于同一個哈希演算法,可以設定哈希值前N位為0的個數來調節運算難度,
優點:完全去中心化,安全性高,所有節點可參與,節點自由進出,每個節點是公平的,被攻擊成功的可能性小,
缺點:先確認后共識,需要耗費大量的算力,造成能源浪費,交易吞吐量有限,確認時間長,
典型應用專案:位元幣,萊特幣,以太坊(前兩階段Frontier前言、Homestead家園為POW;第三階段Metropolis大都會為casper,類似POW+POS;第四階段Serenity為POS)
注意:中心化和去中心化各有優劣,考慮到位元幣的誕生就是反對中心化的,這里我把中心化看做缺點,去中心化看做優點
7.2 PoS
PoS即權益證明,最早由Sunny King于2012年創立的PPC采用,它可以解決上面提到的浪費算力的問題,
簡單來說,它選舉Kuang工的規則是:誰有錢誰更有可能獲得記賬權,
回到乒乓球比賽的例子,也就是誰比分最高,讓誰來記,這樣鼓勵積極比賽的人,
這樣的好處:
1. 不需要算題,所以節約能源,
2. 攻擊者需要更高的成本,因為他需要購買大量的代幣才能獲得51%的篡改權,
7.3 委托權益證明機制(DPoS)
請參考其它資料,
7.4 分布式共識演算法
分布式一致性演算法有很多,主要是Paxos演算法及衍生的Raft演算法,由此演化出分布式共識演算法,在此只談談實用拜占庭容錯演算法PBFT.
實用拜占庭容錯演算法(Practical Byzantine Fault Tolerance)剛開始是在MIT的Miguel 和 Barbara Liskov在1999年的學術論文中提出的,他們的本意是為設計一個低延遲存盤系統設計系統,將演算法復雜度由指數級降低到多項式級,使得拜占庭容錯演算法在實際系統應用中變得可行,
可見分布式共識演算法并不是區塊鏈出現之后才有的,也不是專門為區塊鏈而設計的,實際上早在區塊鏈技術出現之前就已經有了很多分布式一致性演算法的研究成果,所以有人說區塊鏈是建立在已有
技術研究基礎之上的一種創新型應用,
要理解實用拜占庭容錯演算法,就需要先了解什么是拜占庭將軍問題.
拜占庭將軍問題是圖靈獎大牛 Leslie Lamport 為描述分布式系統一致性問題( Distributed Consensus )在論文中抽象出來一個例子.
一個可靠的計算機系統必須能夠應付出現故障的組件給系統的不同部分發送互相沖突的資訊的情況,
這種情況可以用一群拜占庭將軍圍攻一個城市的例子來做個比喻,這些將軍駐扎在城市的各個方向,互相之間只能用信使來通信,大家必須達成一個共同的作戰計劃,但是,這些將軍中是有叛徒的,叛徒會傳送自相矛盾的資訊來迷惑大家,BFT 的目標就是如何讓大家最終能夠達成共識,
準確的說,所謂 BFT ,也就是拜占庭容錯,指的就是在系統上有一些惡意組件不斷發送錯誤資訊的情況下讓系統依舊正常運行的能力,實作 BFT 有多種演算法,其中一種最為常見的叫 PBFT
pBFT 模型下,有一個節點會被當做主節點,而其他節點都是備份節點,系統內的所有節點都會相互通信,最終目標是大家能以少數服從多數的原則達成資料的共識,如果主節點出現明顯的撒謊跡象,其他的節點也可以聯合起來更換主節點,
每一個共識程序分下面這四步:
第一步,客戶端發一個請求給主節點去執行某個操作,
第二步,主節點廣播這個請求到各個備份節點,
第三步,所有節點執行操作并把結果回傳給客戶端,
第四步,當客戶端收到 f + 1 個來自不同節點的相同的結果后,程序結束,f 代表可能撒謊的節點的最大值,
從第四步也可以看出,只要客戶端能保證多數人認可了一個相同的結果,這個結果就是最終的共識了,具體的數學論證我們不展開,但是有這樣一個結論:pBFT 模式能夠作業的前提是系統上撒謊的節點不能超過總節點數的三分之一,
優點和缺點
PBFT 被用在區塊鏈領域做共識演算法,所以我們最后就來討論一下它跟最常用的 POW 演算法對比起來,有哪些優缺點,
先說優點,首先,pBFT 無需等待確認,PBFT 中發一個交易,不需要像位元幣的 POW 演算法那樣,去等待六次確認,如果一個區塊通過 pBFT 演算法被系統認可了,那么這個區塊就是最終區塊了,不會被撤銷,因為各個節點達成共識是在同一時刻決定的,所以用 pBFT 維護的區塊鏈不會跟 POW 那樣分叉,所以也就不用等待確認以保證當前區塊所在的鏈是最長鏈了,其次,pBFT 不用耗能,因為 PBFT 是無需挖礦的,所以每一次共識程序也就不會像 POW 那樣去耗費大量電能了,總之,pBFT 高效而節能,
但是 PBFT 也有明顯的缺點,首先,最大的缺點是節點數不能太多,因為要保證各個節點間的頻繁的通信,所以整個共識網路不能太大,這樣就讓整個網路不可能像 POW 那樣做到全球范圍的去中心化了,其次,PBFT 不能防止女巫攻擊,POW 之所以要耗能,很大一個原因就是要防止女巫攻擊,女巫攻擊指的是,一個惡意用戶用各種方法偽造多個賬戶來進行共識程序,POW 是通過巨大的金錢消耗來增加偽造一個新賬戶的難度,而 PBFT 就沒有這一層保證了,所以 pBFT 比較適合有準入許可的聯盟鏈,不太適合做無準入門檻的公鏈.
8.共識機制如何分類?
共識機制的分類有多種分類方式,
- 根據共識演算法解決問題的方式,我們可以大致將其分為兩類:
基于證明是一類,如POW、POS、DPOS;
基于投票的有PBFT、PAXOS、RAFT;
9.各種共識機制的對比與評價
各種共識機制都各有優缺點和適合的場景,下面我們就用表格的形式對現有的一些主流共識機制做一個總結,

簡單一點說:
10.區塊鏈開發者如何選擇共識演算法?
根據前面對各種共識機制優點與缺點的對比分析,可以根據鏈的型別選擇適合的區塊鏈演算法,開發者也可以自己創造一種共識機制,下面這張圖僅供參考,
總結:區塊鏈是一個信任機器,信任由共識產生,而具體的共識機制包括PoW、PoS、DPoS、PBFT等等,具體選擇哪一種方法,與專案和應用有關,不應一概而論

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/280256.html
標籤:區塊鏈
