拜占庭將軍問題

接觸區(qū)塊鏈的同學(xué),多少都聽說過拜占庭將軍問題,經(jīng)??吹交蚵牭侥衬硡^(qū)塊鏈?zhǔn)褂媚衬乘惴ń鉀Q了拜占庭將軍問題,那么究竟什么是拜占庭將軍問題呢?

什么是拜占庭將軍問題

也被稱為“拜占庭容錯”、“拜占庭將軍問題”。

拜占庭將軍問題是Leslie Lamport(2013年的圖靈講得?。┯脕頌槊枋?b>分布式系統(tǒng)一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子。

這個例子大意是這樣的:

拜占庭帝國想要進攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵御5支常規(guī)拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態(tài)下同時攻擊。他們?nèi)我恢к婈爢为氝M攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通信兵騎馬相互通信來協(xié)商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態(tài)下,拜占庭將軍們才能保證有多于6支軍隊在同一時間一起發(fā)起進攻,從而贏取戰(zhàn)斗?

拜占庭將軍問題中并不去考慮通信兵是否會被截獲或無法傳達信息等問題,即消息傳遞的信道絕無問題。Lamport已經(jīng)證明了在消息可能丟失的不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的。所以,在研究拜占庭將軍問題的時候,已經(jīng)假定了信道是沒有問題的.

問題分析

單從上面的說明可能無法理解這個問題的復(fù)雜性,我們來簡單分析一下:

先看在沒有叛徒情況下,假如一個將軍A提一個進攻提議(如:明日下午1點進攻,你愿意加入嗎?)由通信兵通信分別告訴其他的將軍,如果幸運中的幸運,他收到了其他6位將軍以上的同意,發(fā)起進攻。如果不幸,其他的將軍也在此時發(fā)出不同的進攻提議(如:明日下午2點、3點進攻,你愿意加入嗎?),由于時間上的差異,不同的將軍收到(并認(rèn)可)的進攻提議可能是不一樣的,這是可能出現(xiàn)A提議有3個支持者,B提議有4個支持者,C提議有2個支持者等等。

再加一點復(fù)雜性,在有叛徒情況下,一個叛徒會向不同的將軍發(fā)出不同的進攻提議(通知A明日下午1點進攻, 通知B明日下午2點進攻等等),一個叛徒也會可能同意多個進攻提議(即同意下午1點進攻又同意下午2點進攻)。

叛徒發(fā)送前后不一致的進攻提議,被稱為“拜占庭錯誤”,而能夠處理拜占庭錯誤的這種容錯性稱為「Byzantine fault tolerance」,簡稱為BFT。

相信大家已經(jīng)可以明白這個問題的復(fù)雜性了。

中本聰?shù)慕鉀Q方案

在出現(xiàn)比特幣之前,解決分布式系統(tǒng)一致性問題主要是Lamport提出的Paxos算法或其衍生算法。Paxos類算法僅適用于中心化的分布式系統(tǒng),這樣的系統(tǒng)的沒有不誠實的節(jié)點(不會發(fā)送虛假錯誤消息,但允許出現(xiàn)網(wǎng)絡(luò)不通或宕機出現(xiàn)的消息延遲)。

中本聰在比特幣中創(chuàng)造性的引入了“工作量證明(POW : Proof of Work)”來解決這個問題,有興趣可進一步閱讀工作量證明

通過工作量證明就增加了發(fā)送信息的成本,降低節(jié)點發(fā)送消息速率,這樣就以保證在一個時間只有一個節(jié)點(或是很少)在進行廣播,同時在廣播時會附上自己的簽名。

這個過程就像一位將軍A在向其他的將軍(B、C、D…)發(fā)起一個進攻提議一樣,將軍B、C、D…看到將軍A簽過名的進攻提議書,如果是誠實的將軍就會立刻同意進攻提議,而不會發(fā)起自己新的進攻提議。

以上就是比特幣網(wǎng)絡(luò)中是單個區(qū)塊(賬本)達成共識的方法(取得一致性)。

理解了單個區(qū)塊取得一致性的方法,那么整個區(qū)塊鏈(總賬本)如果達成一致也好理解。

我們稍微把將軍問題改一下:假設(shè)攻下一個城堡需要多次的進攻,每次進攻的提議必須基于之前最多次數(shù)的勝利進攻下提出的(只有這樣敵方已有損失最大,我方進攻勝利的可能性就更大),這樣約定之后,將軍A在收到進攻提議時,就會檢查一下這個提議是不是基于最多的勝利提出的,如果不是(基于最多的勝利)將軍A就不會同意這樣的提議,如果是的,將軍A就會把這次提議記下來。

這就是比特幣網(wǎng)絡(luò)最長鏈選擇。

經(jīng)濟學(xué)分析

工作量證明其實相當(dāng)于提高了做叛徒(發(fā)布虛假區(qū)塊)的成本,在工作量證明下,只有第一個完成證明的節(jié)點才能廣播區(qū)塊,競爭難度非常大,需要很高的算力,如果不成功其算力就白白的耗費了(算力是需要成本的),如果有這樣的算力作為誠實的節(jié)點,同樣也可以獲得很大的收益(這就是礦工所作的工作),這也實際就不會有做叛徒的動機,整個系統(tǒng)也因此而更穩(wěn)定。

很多人批評工作量證明造成巨大的電力浪費,促使人們?nèi)ヌ剿餍碌慕鉀Q一致性(共識)問題的機制:權(quán)益證明機制(POS: Proof of Stake)是一個代表。在拜占庭將軍問題的角度來看,它同樣提高了做叛徒的成本,因為賬戶需要首先持有大量余額才能有更多的幾率廣播區(qū)塊,POS不是本文重點,以后在講。

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

------------------------------------------------------------------------------------------------------

本文轉(zhuǎn)載自知乎

作者:Tiny熊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容