區塊鏈共識機制及其迭代

本文轉載自:http://www.javaxxz.com/thread-359304-1-1.html


共識,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 中大量資源被浪費的缺點。惡意參與者將存在保證金被罰沒的風險,即損失經濟利益。一般的,對於 PoS 來說,需要掌握超過全網30%的資源,纔有可能左右最終的結果。這個也很容易理解,三個人投票,前兩人分別支持一方,這時候,第三方的投票將決定最終結果。

PoS 也有一些改進的算法,包括授權股權證明機制(DPOS),即股東們投票選出一個董事會,董事會中成員纔有權進行代理記賬。

DPOS 委託股權證明機制

代表新型智能合約的EOS採用DPOS(Delegated Proof of Stake)委託股權證明機制。DPOS通過一定程度的中心化,擁有了中心化系統的性能優勢。

中本聰設想的一cpu一票的區塊鏈世界裏,每個人都能積極參與到區塊鏈中,這樣才能實現完全去中心化的系統。但是現實生活中每個人都參與決策效率往往不高,這纔出現代表大會制度。

DPOS網絡中的每個持有代幣的人(即每個客戶端)都有權選出自己的代表,讓爲數不多的代表們來維護區塊鏈網絡的運行,每個區塊由隨機的代表輪流負責挖出。這使得區塊的產生只需要被更少數量的節點檢驗和確認,大大提高了網絡運行速度。
最重要的是這些代表權利平等,並時刻受到監督,如果因爲計算不穩定,經常不在線,就會被持幣者們自動踢出由新的代表所代替。而表現可靠的代表們也能穩定地收取區塊中的交易手續費。

拜占庭容錯

PBFT是Practical Byzantine Fault Tolerance的縮寫,意爲實用拜占庭容錯算法。

 

2657976-a03ec11d1cf3c941.png

拜占庭容錯能夠容納將近1/3的錯誤節點誤差,Hyperledger就是使用了該算法作爲可插拔的共識算法之一。

步驟:

從全網節點選舉出一個主節點(Leader),新區塊由主節點負責生成
Pre-Prepare:每個節點把客戶端發來的交易向全網廣播,主節點0將從網絡收集到需放在新區塊內的多個交易排序後存入列表,並將該列表向全網廣播,擴散至123
Prepare:每個節點接收到交易列表後,根據排序模擬執行這些交易。所有交易執行完後,基於交易結果計算新區塊的哈希摘要,並向全網廣播,1->023,2->013,3因爲宕機無法廣播
Commit:如果一個節點收到的2f(f爲可容忍的拜占庭節點數)個其它節點發來的摘要都和自己相等,就向全網廣播一條commit消息
Reply:如果一個節點收到2f+1條commit消息,即可提交新區塊及其交易到本地的區塊鏈和狀態數據庫。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章