Finn

Finn

👨🏻‍💻工作:Web3 产品经理 🏙️城市:香港 🧩性格:INFP 最近在做 GameFi,能赚钱的游戏
jike
email

「Web3 筆記」拜占庭將軍問題

拜占庭將軍問題#

如果你第一次看到這個名字,可能會覺得這是一個歷史人物遇到的一個打仗的問題。但其實完全不是,而是一個計算機學家提出來為了解決分佈式網絡的問題。

拜占庭將軍問題(Byzantine Generals Problem),是由萊斯利・蘭波特在其同名論文中提出的分佈式對等網絡通信容錯問題。

簡單介紹一下問題提出者:

萊斯利・蘭波特Leslie Lamport),美國計算機科學家。也是排版系統 LaTeX 的開發者。2013 年,獲得圖靈獎。

開開腦洞#

在探尋拜占庭將軍問題這個複雜問題前,我想先給一個小問題來開開腦洞(適應下思維方式)。

有兩個守門童 A 和 B,有兩扇門 a 和 b,我們的目標是找到 a 和 b 中正確的門,已知:

  1. 我們可以各詢問 A 和 B 一個問題
  2. A 和 B 一個人說真話,一個人說假話

請問,如何問才能找到正確的門?

可以思考一下,還挺有意思的,其實只用問一個問題就可以得到答案。

答案:詢問 A:你認為 B 會說哪個門是正確的門?(正確答案就是 A 回答的另一扇門)

達成共識#

這個拜占庭將軍問題舉的例子比較複雜,希望能用一個簡單的例子來讓你理解:

一群好朋友(將軍)想要討論明天早上十點是否一起去公園,但是現在無法群聊,只能一對一的私聊,可以確定的是朋友內有想搗亂或破壞大家的關係(故意亂說),如何達成大家統一行動的目標(一起去或不去)?

比如,一共 9 個人,大家采用多數服從少數的原則,當四人同意去,四人不同意去,壞蛋跟同意的四人說同意去,跟不同意的四人說不同意去,雙方都以為自己勝利,會導致出現目標失敗。

上述的故事映射到計算機系統裡,將軍便成了計算機,而私聊就是通信系統。雖然上述的問題涉及了電子化的決策支持與信息安全,卻沒辦法單純的用密碼學與數字簽名來解決。因為電路錯誤仍可能影響整個加密過程,這不是密碼學與數字簽名算法在解決的問題。因此計算機就有可能將錯誤的結果提交去,亦可能導致錯誤的決策。

而在區塊鏈中,若出現了無法達成共識會出現分叉、宕機等問題。當一條鏈共識出現問題,將會對這條鏈造成信任危機也是致命打擊,所以在區塊鏈中共識算法是生態發展的底層基礎。

口頭協議#

其實共識算法在不斷進步,也有非常聰明的人在不斷提出新穎的解題思路。在本問題被提出的論文中,萊斯利・蘭波特已經提出了兩種解法,今天就分享口頭協議這個解法。

以下內容並不是原版解法,是根據個人理解的表達,若有錯誤希望理解

定義:

  1. 分為兩類,好人(希望統一),壞人(希望不統一)
  2. 提出提案的人自動作為領頭(將軍)

目標:

  1. 若領頭是好人,保證所有好人都執行領頭的提議
  2. 保證所有好人保持一致執行

失敗案例#

繼續按上面的去公園為基礎,這次是 a、b、c 3 人商討是否明天去公園,其中一人壞人。

b 提出去公園的想法,作為領隊。

(下方有圖解)

可能 1#

b 領隊不是壞人,c 是壞人

a 收到 b 去公園的想法,但是不知道 b 是否是好人,所以問 c:b 提議是去還是不去,c 反饋不去,所以 a 收到 1 個去,1 個不去。a 知道 b 和 c 中有一個壞人,但不知道是誰。

所以無法達成共識:失敗

可能 2#

b 領隊是壞人,a c 都是好人

a 收到 b 去提議,c 收到 b 不去的提議,此時 a 和 c 交換信息,都得到 1 個去,1 個不去。

所以無法達成共識

img

成功案例#

這次是 a、b、c、d 4 人商討是否明天去公園,其中一人壞人。

可能 1:#

領隊 c 是好人,提出明天不去公園,d 是壞人。

a 收到不去公園的意見後,詢問 b、d 領隊的意見是什麼,得到的是不去(b)和去(d)。

a 得到的是(不去、不去、去),選擇多數不去就行,b 同理結論是不去。

最後 a、b、c 都不去,達成目標 2,並且符合領隊的命令,達成目標 1.

可能 2:#

領隊 c 是壞人,對 a、b 說去,對 d 說不去。

a 收到去的提議後,詢問 b、d 領隊的意見是什麼,得到的是去(b)和不去(d)。

a 得到的是(去、去、不去),選擇多數去就行,b 同理結論是去。

d 收到不去的提議後,詢問 a、b 領隊的意見是什麼,得到的是去(a)和去(b)。

d 得到的是(不去、去、去),選擇多數去就行。

最後 a、b、d 都統一去了,達成目標 2,由於領隊是壞人,無需考慮目標 1。

img

其實,當時萊斯利・蘭波特提出口頭協議時就給出了結論,若有 n 人參與,m 人是壞人,那麼只有當 n > 3m 時才能達成共識。也就是說當有 2 人壞人時,需要一共 7 人才能達成共識,具體的推演過程可以看李永樂老師的視頻,很有意思。

當然區塊鏈中比特幣和以太坊都采用的 PoW(工作量證明)也非常出色的解決了共識問題,並且經過十幾年的穩定運行也證明了這種方法的可行性。但是 PoW 也有非常多被人詬病的問題,有機會再詳細研究一下 PoW 的底層邏輯。

參考鏈接:#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。