什麼是拜占庭將軍問題

本文首發於深刻淺出區塊鏈社區 原文連接:什麼是拜占庭將軍問題原文已更新,請讀者前往原文閱讀web

接觸區塊鏈的同窗,多少都據說過拜占庭將軍問題,常常看到或聽到某某區塊鏈使用某某算法解決了拜占庭將軍問題,那麼究竟什麼是拜占庭將軍問題呢?算法

什麼是拜占庭將軍問題

也被稱爲「拜占庭容錯」、「拜占庭將軍問題」。 拜占庭將軍問題是Leslie Lamport(2013年的圖靈講得住)用來爲描述分佈式系統一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子。網絡

這個例子大意是這樣的:分佈式

拜占庭帝國想要進攻一個強大的敵人,爲此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵騎馬相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不肯定他們中是否有叛徒,叛徒可能擅自變動進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們才能保證有多於6支軍隊在同一時間一塊兒發起進攻,從而贏取戰鬥?學習

拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或沒法傳達信息等問題,即消息傳遞的信道絕無問題。Lamport已經證實了在消息可能丟失的不可靠信道上試圖經過消息傳遞的方式達到一致性是不可能的。因此,在研究拜占庭將軍問題的時候,已經假定了信道是沒有問題的.區塊鏈

問題分析

單從上面的說明可能沒法理解這個問題的複雜性,咱們來簡單分析一下:.net

  1. 先看在沒有叛徒狀況下,假如一個將軍A提一個進攻提議(如:明日下午1點進攻,你願意加入嗎?)由通訊兵通訊分別告訴其餘的將軍,若是幸運中的幸運,他收到了其餘6位將軍以上的贊成,發起進攻。若是不幸,其餘的將軍也在此時發出不一樣的進攻提議(如:明日下午2點、3點進攻,你願意加入嗎?),因爲時間上的差別,不一樣的將軍收到(並承認)的進攻提議多是不同的,這是可能出現A提議有3個支持者,B提議有4個支持者,C提議有2個支持者等等。get

  2. 再加一點複雜性,在有叛徒狀況下,一個叛徒會向不一樣的將軍發出不一樣的進攻提議(通知A明日下午1點進攻, 通知B明日下午2點進攻等等),一個叛徒也會可能贊成多個進攻提議(即贊成下午1點進攻又贊成下午2點進攻)。博客

叛徒發送先後不一致的進攻提議,被稱爲「拜占庭錯誤」,而可以處理拜占庭錯誤的這種容錯性稱爲「Byzantine fault tolerance」,簡稱爲BFT。it

相信你們已經能夠明白這個問題的複雜性了。

中本聰的解決方案

在出現比特幣以前,解決分佈式系統一致性問題主要是Lamport提出的Paxos算法或其衍生算法。Paxos類算法僅適用於中心化的分佈式系統,這樣的系統的沒有不誠實的節點(不會發送虛假錯誤消息,但容許出現網絡不通或宕機出現的消息延遲)。

中本聰在比特幣中創造性的引入了「工做量證實(POW : Proof of Work)」來解決這個問題,有興趣可進一步閱讀工做量證實。 經過工做量證實就增長了發送信息的成本,下降節點發送消息速率,這樣就以保證在一個時間只有一個節點(或是不多)在進行廣播,同時在廣播時會附上本身的簽名。 這個過程就像一位將軍A在向其餘的將軍(B、C、D...)發起一個進攻提議同樣,將軍B、C、D...看到將軍A簽過名的進攻提議書,若是是誠實的將軍就會馬上贊成進攻提議,而不會發起本身新的進攻提議。

以上就是比特幣網絡中是單個區塊(帳本)達成共識的方法(取得一致性)。

理解了單個區塊取得一致性的方法,那麼整個區塊鏈(總帳本)若是達成一致也好理解。 咱們稍微把將軍問題改一下:假設攻下一個城堡須要屢次的進攻,每次進攻的提議必須基於以前最屢次數的勝利進攻下提出的(只有這樣敵方已有損失最大,我方進攻勝利的可能性就更大),這樣約定以後,將軍A在收到進攻提議時,就會檢查一下這個提議是否是基於最多的勝利提出的,若是不是(基於最多的勝利)將軍A就不會贊成這樣的提議,若是是的,將軍A就會把此次提議記下來。

這就是比特幣網絡最長鏈選擇

經濟學分析

工做量證實其實至關於提升了作叛徒(發佈虛假區塊)的成本,在工做量證實下,只有第一個完成證實的節點才能廣播區塊,競爭難度很是大,須要很高的算力,若是不成功其算力就白白的耗費了(算力是須要成本的),若是有這樣的算力做爲誠實的節點,一樣也能夠得到很大的收益(這就是礦工所做的工做),這也實際就不會有作叛徒的動機,整個系統也所以而更穩定。

不少人批評工做量證實形成巨大的電力浪費,促令人們去探索新的解決一致性(共識)問題的機制:權益證實機制(POS: Proof of Stake)是一個表明。在拜占庭將軍問題的角度來看,它一樣提升了作叛徒的成本,由於帳戶須要首先持有大量餘額纔能有更多的概率廣播區塊,POS不是本文重點,之後在講。

共識算法的核心就是解決拜占庭將軍問題(分佈式網絡一致性問題)。

擴展閱讀

The Byzantine Generals Problem

深刻淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。

☛ 個人知識星球爲各位解答區塊鏈技術問題,歡迎加入討論。

☛ 關注公衆號「深刻淺出區塊鏈技術」第一時間獲取區塊鏈技術信息。

相關文章
相關標籤/搜索