1. 程式人生 > >區塊鏈的共識演算法

區塊鏈的共識演算法

歡迎訪問我的個人站點,老廖的個人部落格

前言

  區塊鏈最有價值的地方就在於共識演算法,目前各種公鏈、聯盟鏈群魔亂舞,共識演算法林林總總。

  研究了一段時日,也到了總結的時候,用幾篇文章將它們梳理一下。

作用、意義

  區塊鏈是當下的大熱門,各種各樣的區塊鏈專案都會用一定篇幅來描述它的共識機制。那麼,共識在區塊鏈中扮演了什麼樣的角色?有何重要的意義?

  區塊鏈簡單而言是一種組織資料的方式,人們對區塊鏈發起的每一次動作 (事務)( Transaction ) 最終的結果都是改變資料,區塊鏈需要保證每一次對資料的修改都是合法的。和傳統中心化服務不同,區塊鏈的服務(算力、儲存)是由分散、平等(大多數情況)且互不信任的節點提供,那麼,區塊鏈世界裡的有效和合法則指的是滿足大多數 “人” 的認可,認可的過程就是區塊鏈的共識過程。

  對普通使用者來說,我們對區塊鏈發起的每一次 Transaction 都是將我們的事務資料用私鑰簽名後傳送到某一個節點,由該節點處理並向全網廣播。我們無法假設區塊鏈網路中的節點都是不做惡的,也無法保證網路在任何情況下都不出問題,因此我們引入了共識演算法來處理共識過程,保證只有在大多數節點都認可的情況下,事務才會被記錄到區塊鏈上,同時資料 (狀態) 發生修改。這個共識過程的難題就是拜占庭將軍問題,共識演算法的出發點就是解決拜占庭將軍問題。

拜占庭將軍問題

  拜占庭的將軍們率領軍隊進攻一個敵人的城市,由於敵人的城市很大,將軍們的軍隊各自分散,互相之間只能靠派遣通訊兵傳遞訊息,同時敵人的實力不弱,至少得一半以上的將軍同時發動攻擊才能獲得戰爭的勝利。但是將軍當中可能有叛徒,叛徒可以隨意偽造篡改互相傳遞的資訊,而且通訊兵傳遞資訊的方式並不可靠,可能出現資訊未送達的情況。這時就引出了一個問題,在這樣的前提假設下,如何確保能有一半以上的將軍達成進攻的共識?

  這就是 萊斯利·蘭伯特(Leslie Lamport) 提出的 拜占庭將軍問題(Byzantine failures)。 區塊鏈的節點就類似於將軍,要達成的共識則是交易的有效性和記賬權利。區塊鏈的共識演算法就是在不同的假設前提下,一定程度的解決拜占庭將軍問題。

不同的共識演算法

  簡而言之,共識演算法就是達到一個少數服從多數的效果。而不同共識演算法的差異性體現在不同的區塊鏈網路中,評價 “多數” 所用的指標不同,有的用算力來評價,有的用 “股權” 來評價,等等。 由此也就衍生出了各種各樣的共識演算法,如:PBFT,DBFT,POW,POS,DPOS,PAXOS,RAFT 等。

  下一篇文章,再對這裡列舉出的幾個共識演算法做詳細分析。