1. 程式人生 > >第3講 | 淺說區塊鏈共識機制

第3講 | 淺說區塊鏈共識機制

解釋 第一次 表示 然而 無法 很多 24點 con 控制

————文章出自極客時間《深入淺出區塊鏈》 作者:元界 CTO 陳浩  

  我在第2講“區塊鏈到底是怎麽運行的”一文中,提到了“打包Transaction”和“廣播交易”這兩個概念,因為概述的原因,當時只帶著你走了一遍過程。其實,以上談到的兩個內容正是區塊鏈最核心的技術內容之一:共識機制。

  區塊鏈發展至今,已經形成了各種不同類型的共識機制,在今天的文章中,我們就展開聊一聊區塊鏈共識機制到底是什麽,以及區塊鏈的共識過程到底是怎樣的。

分布式系統的經典問題: 拜占庭將軍問題

  拜占庭將軍問題其實是虛構出來的一個故事,是為了方便通俗地介紹分布式系統所面臨的難題。這裏我僅作一個簡短的說明,你可以在中文社區找到更豐富的通俗解釋材料。

  為了避免重復,我們換一種表述形式,還是以上一次的村子為例,假設隨著村子和人口的發展,大村子演變成了十一個小村子並分散在各地,各地的通信只能靠信鴿進行。

  大家約定了每年都會舉辦一個相親大會,至於誰能舉辦,每年輪流從兩個備選村子,A村和B村中選擇一個,然後大家投票,票數多者可以贏得舉辦權。

  由於地圖很大,任何一個村子的投票都無法靠一只信鴿傳輸到每個村子,必須靠一個中繼村子代為傳輸,這也就意味著有中繼村子可以讀到其他村子的投票信息。

  那麽,如何防止下面兩個問題的出現呢?

  1. 投票者的“精分”,這裏所謂的“精分”是指某個村子的投票行為不一致,發送給第一個村子的投票消息為“投票給A”,而發送給第二個村子的投票消息卻為“投票給B”。
  2. 中繼村子作弊,即篡改上一村的投票消息。

上面討論的問題我們可以認為是簡化的 “拜占庭將軍問題”(完整的拜占庭將軍問題還有將軍-副官模型,如果感興趣的話,你可以自行閱讀)。

我們回頭再看區塊鏈。區塊鏈本質上也是分布式系統的一種,其共識機制也是為了上述問題而提出的解決方案。

什麽是區塊鏈共識機制?

  共識機制是區塊鏈是核心的組成要素之一,它決定了區塊鏈的業務吞吐量、交易速度、不可篡改性、準入門檻等等,是最為關鍵的技術要素之一。

  要理解區塊鏈共識機制,首先就需要理解區塊鏈共識機制到底解決了什麽問題。

  共識機制主要解決了兩個問題:

  1. 誰有權利;
  2. 作弊問題。

  上一次我們構造了一個中心化記賬的場景,在這個場景下,記賬問題其實可以簡化為大家信任中心記賬者即可。

  然而在分布式記賬的場景下,問題更為復雜。首先,大家面臨的最大問題是誰有權利記賬,其次是如何避免記賬者作弊。畢竟,誰都有權利記賬,也就意味著誰都有可能作弊。

  以上兩部分共同構成了區塊鏈共識機制。

  另外補充一點,在比特幣社區,“共識”(consensus)這個詞已經跳出了技術的範疇。通常人們在表述一個比特幣上的問題時,共識的內涵還包括比特幣的使用者、開發者、礦工來達成社區共識的部分,所以“共識”這個詞在區塊鏈領域還有些“民主”的味道,不單單是技術領域的“共識”。

最經典的入門型共識機制:PoW工作量證明

  PoW (Proof of Work)工作量證明可以解決上述的兩個問題,

  在上一篇文章中,其實我們已經悄悄講解了一點PoW共識機制,你還記得上文提到的“24點”那個遊戲嗎?“24點”其實是盡可能隨機地選取系統中任意的節點來規避作弊者,這個方案的實踐其實就是PoW共識機制。

  產生記賬者的隨機性其實來自於誰最先計算出24點的答案,這個問題可以簡化成誰擁有的計算資源更多,誰就擁有整個系統的最大概率的記賬權。一旦這個概率超過一半以上,那麽這個系統就有一定的中心化風險。

  如何理解上面一段話呢?

  舉個例子,李四家發明了一種算盤,可以快速計算24點答案,比起其他人掰手指頭,李四家總是有很大的概率拿下記賬權,換句話說,也就是李四和全村其他所有人競爭,相當於算盤對全村其他人手指頭的競爭。

  如果算盤足夠強大,就能有一半的概率獲得記賬權,那麽李四個人的誠實性,就成為了系統的唯一破綻。

  比如李四在第一次記賬時篡改部分交易,第二次還是他記賬,還繼續篡改交易,那麽兩次修改如果自洽的話,是可以形成假賬的,這就是所謂的中心化風險。

  所以在PoW這種機制中,計算資源(又稱算力)是決定記賬權的唯一因素。與之對應的,便是計算難度。

  計算難度又稱作挖礦難度,計算難度是區塊鏈為了控制產生答案的速度,比如平均10分鐘就有一個答案產生,平均2分鐘一個答案產生。

  在上述場景中,因為李四有了算盤,強大的計算資源突然加入以後,肯定會讓整個系統的產生答案的速度變快很多,作為系統本身會自適應,將難度提升,降低答案產生的速度。

  上面介紹了這麽多,其實是想引出另外一個問題,PoW到底是如何避免作弊者的呢?答案就是計算資源(算力)。

  設想,如果一個作弊者想篡改信封裏面的交易,首先得獲得記賬權,也就是裝信封的權利。

  而影響記賬權的唯一因素只有計算資源(算力)的大小,如果想篡改交易,只能投入大量的計算資源與整個系統中其他所有人進行對抗,這是十分困難的,尤其在整個系統有一定基礎計算資源(算力)的情況下。

  PoW中一個有趣的設計是激勵機制,在PoW共識機制下,我們假設所有參與者都是理性的,理性的意思就是單純逐利,不考慮家庭、愛好等其他因素。有了理性的前提,PoW共識機制會給每個誠實的記賬者予以獎勵,這個設計可以抗擊作弊收益的問題。

  怎麽進行抗擊的呢?整個過程是這樣的,理性的人如果作弊、篡改賬本肯定需要投入成本,也就是計算資源,收益是篡改賬本獲得的收益減去投入成本,這個收益往往小於誠實計算所獲得的收益。所以,作弊者在作弊過程中投入的計算資源過大,反而得不償失。

PoW工作量證明的補充:解決雙花攻擊

  上面給出了一個結論,我們說作弊的收益往往小於誠實計算的收益。這一點其實對應到區塊鏈領域有個著名的問題:雙花攻擊(double-spending) 。

  雙花攻擊是指一個代幣被花費了兩次,這在任意的區塊鏈系統中是不被允許的。如果避免了雙花問題,基本就能避免上述作弊中收益過大的問題,因為攻擊者首先要竊取到你的私鑰,同時又能控制了你的計算資源(算力)。

  為了方便分析,我們回到上一篇中廣播交易的那一節。那一節中我介紹了廣播的內容分為兩種,第一種是Transaction,第二種是區塊,也就是信封。

  第一種又被稱為未確認的Transaction,第二種信封中所有的交易被稱作已確認的Transaction。

  所有記賬節點都會遵循以下兩條規則:

  規則一:一個代幣如果已經被花費,那麽會被標記成已花費,如果再次接收到這個代幣被花費的請求,那麽記賬節點會拒絕打包這筆交易;

  規則二:如果同時接收到兩個信封,這兩個信封中裝的兩筆交易出現了一個代幣被花費了兩次的情況,這種情況也就是我們所說的分叉(Fork),那麽選擇挖礦難度比較大的那個信封。

  規則一避免了未確認的交易出現雙花,規則二基本避免已經確認的交易中(信封中)的雙花問題。 

  假設作弊者的計算資源(算力)占整個系統的30%,那麽連續兩次獲得記賬權的概率是9%,看起來作弊的可能性還是挺高的,如果是連續6次獲得記賬權呢?概率直降到萬分之七。

  在比特幣中,這個6也就是6次確認,表示連續6個塊過去了,如果我的交易沒有被雙花的話,那麽它被篡改的可能性將越來越小,最後變得幾乎不可能被篡改。這也是區塊鏈不可被篡改說法的由來。

  試想,如果任何作弊者花了大量的成本獲取了系統30%的計算資源(算力),最後只有萬分之七的概率獲得篡改的可能性,比起作弊,還不如誠實記賬的收益高。

總結

  好了,今天帶你了解了區塊鏈的共識機制,也順便淺談了拜占庭將軍問題,介紹了區塊鏈的入門共識機制PoW,它其實也是目前區塊鏈領域使用最廣泛,應用最成熟的共識機制。

  最後,還涉及了一部分PoW工作量證明的補充:解決雙花攻擊。由於篇幅所限,我們將在技術篇詳細講解PoW、PoS、DPoS等共識機制。

第3講 | 淺說區塊鏈共識機制