共識,Consensus,故名思義,共同的認識,共識問題研究的就是多個成員如何達成一緻,典型的比如投票選舉。
區塊鍊是一種去中心化的分布式賬本系統,區塊鍊的共識問題實際上來源于分布式系統的一緻性問題。
分布式一緻性問題
區塊鍊是一種去中心化的分布式賬本系統,由于點對點網絡下存在較高的網絡延遲,
各個節點所觀察到的交易事務先後順序不可能完全一緻。 是以區塊鍊系統需要設計一種機制對在一定的時間内發生的事務的先後順序進行共識。這種對一個時間視窗内的事務的先後順序達成共識的算法被稱為“共識機制”。
共識機制在區塊鍊中扮演着核心的地位,共識機制決定了誰有記賬的權利,以及記賬權利的選擇過程和理由。不用的虛拟貨币采用共識機制不同,常見的共識機制如POW,POS,DPOS,拜占庭容錯等。
比特币區塊鍊采用了 Proof of Work(PoW)的機制來實作共識,該機制于 1998 年在 B-money 設計中提出。目前,Proof of 系列中比較出名的一緻性協定包括 PoW 和 PoS,都是通過經濟懲罰來限制惡意參與。
POW 工作量證明
工作量證明,Proof of Work,通過計算來猜測一個數值(nonce),得以解決規定的 hash 問題(來源于 hashcash)。保證在一段時間内,系統中隻能出現少數合法提案。
在比特币的區塊結構中,nonce數值被儲存在區塊頭中。
同時,這些少量的合法提案會在網絡中進行廣播,收到的使用者進行驗證後會基于它認為的最長鍊上繼續難題的計算。是以,系統中可能出現鍊的分叉(Fork),但最終會有一條鍊成為最長的鍊。
hash 問題具有不可逆的特點,是以,目前除了暴力計算外,還沒有有效的算法進行解決。反之,如果獲得符合要求的 nonce,則說明在機率上是付出了對應的算力。誰的算力多,誰最先解決問題的機率就越大。當掌握超過全網一半算力時,從機率上就能控制網絡中鍊的走向。這也是所謂 51% 攻擊 的由來。
參與 PoW 計算比賽的人,将付出不小的經濟成本(硬體、電力、維護等)。當沒有成為首個算出的“幸運兒”時,這些成本都将被沉沒掉。這也保障了,如果有人惡意破壞,需要付出大量的經濟成本。也有設計試圖将後算出結果者的算力按照一定比例折合進下一輪比賽考慮。
有一個很直覺的例子可以說明為何這種經濟博弈模式會確定系統中最長鍊的唯一。
超市付款需要排成一隊,可能有人不守規矩要插隊。超市管理者會檢查隊伍,認為最長的一條隊伍是合法的,并讓不合法的分叉隊伍重新排隊。隻要大部分人不傻,就會自覺在最長的隊伍上排隊。
優點:
- 完全去中心化
- 節點自由進出,容易實作。
- 破壞系統花費的成本巨大
缺點:
- 對節點的性能網絡環境要求高
- 無法達成最終一緻性
- 最關鍵的,浪費能源
POS 權益證明
權益證明,Proof of Stake,2013 年被提出,最早在 Peercoin 系統中被實作,類似現實生活中的股東機制,擁有股份越多的人越容易擷取記賬權。
典型的過程是通過保證金(代币、資産、名聲等具備價值屬性的物品即可)來對賭一個合法的塊成為新的區塊,收益為抵押資本的利息和交易服務費。提供證明的保證金(例如通過轉賬貨币記錄)越多,則獲得記賬權的機率就越大。合法記賬者可以獲得收益。
POS是根據錢包裡面貨币的多少以及貨币在錢包裡存在的天數來合成一個機關(币天)。它根據币天的關系對計算機進行哈希計算降低了難度,降低了計算機的門檻,但是對計算機還是有一定要求的,它把錢包和區塊鍊系統的一緻性綁定在一起。誰的錢包裡的币天數越大誰擁有記賬權的機率就越大。但是它和POW機制一樣解決問題的思想也導緻了它與POW擁有一樣的缺點,也是犧牲了一部分的共識(同樣分叉),而且需要等待多個确認。
PoS 是試圖解決在 PoW 中大量資源被浪費的缺點。惡意參與者将存在保證金被罰沒的風險,即損失經濟利益。一般的,對于 PoS 來說,需要掌握超過全網30%的資源,才有可能左右最終的結果。這個也很容易了解,三個人投票,前兩人分别支援一方,這時候,第三方的投票将決定最終結果。
- 對節點性能要求低,達成共識時間短(網絡環境好的話可實作毫秒級)
- 沒有最終一緻性
以太坊前三個階段,即Frontier(前沿)、Homestead(家園)、Metropolis(大都會)。第四個階段,即Serenity(甯靜),将采用PoS機制。
Casper:以太坊前三個階段采用的是POW共識機制,第四個階段将采用自己建立的POS機制,名為投注共識。這種機制增加了懲罰機制,并基于POS的思想在記賬節點中選取驗證人。
DPOS 委托股權證明機制
PoS 也有一些改進的算法,包括授權股權證明機制(DPOS),即股東們投票選出一個董事會,董事會中成員才有權進行代理記賬。
代表新型智能合約的EOS采用DPOS(Delegated Proof of Stake)委托股權證明機制。DPOS通過一定程度的中心化,擁有了中心化系統的性能優勢。
中本聰設想的一cpu一票的區塊鍊世界裡,每個人都能積極參與到區塊鍊中,這樣才能實作完全去中心化的系統。但是現實生活中每個人都參與決策效率往往不高,這才出現代表大會制度。
DPOS網絡中的每個持有代币的人(即每個用戶端)都有權選出自己的代表,讓為數不多的代表們來維護區塊鍊網絡的運作,每個區塊由随機的代表輪流負責挖出。這使得區塊的産生隻需要被更少數量的節點檢驗和确認,大大提高了網絡運作速度。
最重要的是這些代表權利平等,并時刻受到監督,如果因為計算不穩定,經常不線上,就會被持币者們自動踢出由新的代表所代替。而表現可靠的代表們也能穩定地收取區塊中的交易手續費。
PBFT:Fabric使用的經典算法(拜占庭容錯)
PBFT是Practical Byzantine Fault Tolerance的縮寫,意為實用拜占庭容錯算法。
拜占庭容錯能夠容納将近1/3的錯誤節點誤差,Hyperledger就是使用了該算法作為可插拔的共識算法之一。
5-Figure1-1.png
步驟:
從全網節點選舉出一個主節點(Leader),新區塊由主節點負責生成
- Pre-Prepare:每個節點把用戶端發來的交易向全網廣播,主節點0将從網絡收集到需放在新區塊内的多個交易排序後存入清單,并将該清單向全網廣播,擴散至123
- Prepare:每個節點接收到交易清單後,根據排序模拟執行這些交易。所有交易執行完後,基于交易結果計算新區塊的哈希摘要,并向全網廣播,1->023,2->013,3因為當機無法廣播
- Commit:如果一個節點收到的2f(f為可容忍的拜占庭節點數)個其它節點發來的摘要都和自己相等,就向全網廣播一條commit消息
- Reply:如果一個節點收到2f+1條commit消息,即可送出新區塊及其交易到本地的區塊鍊和狀态資料庫。
參考 《區塊鍊技術指南》
作者:邴越
掃碼關注公衆号:架構進化論,獲得第一手的技術資訊和原創文章
如果文章對您有幫助,可以點選文章右下角【推薦】一下,您的鼓勵是作者堅持原創和持續寫作的最大動力!