回覆列表
  • 1 # 林言io

    一群拜占庭將軍分別各率領一支軍隊共同攻打一座城市。假如軍隊只有進攻或撤離兩種選擇。因此將軍們必須透過投票來選擇最終的策略,也就是所有軍隊一起進攻或所有軍隊一起撤離。

    因為各位將軍分處城市不同方向,他們只能透過信使互相聯絡。在投票過程中每位將軍都將自己投票給進攻還是撤退的資訊透過信使分別通知其他所有將軍,這樣一來每位將軍根據自己的投票和其他所有將軍送來的資訊就可以知道共同的投票結果而決定行動策略。

    這裡有兩個問題。

    一是將軍中可能出現叛徒,叛徒不僅可能給糟糕的策略投票,還可能選擇性地傳送投票資訊。假設有9位將軍投票,其中1名叛徒。8名忠誠的將軍中出現了4人投進攻,4人投撤離的情況。這時候叛徒可能故意給4名投進攻的將領送信表示投票進攻,而給4名投撤離的將領送信表示投撤離。這樣一來在4名投進攻的將領看來,投票結果是5人投進攻,從而發起進攻;而在4名投撤離的將軍看來則是5人投撤離。最後的結果是軍隊步調不一,可能會輸掉這場戰役。

    二是由於將軍之間需要透過信使通訊,信使成了關鍵的一環。叛變將軍可能透過偽造信件來以其他將軍的身份傳送假投票。即便所有將軍都保持忠誠,也不能排除信使被敵人截殺,甚至被敵人間諜替換等情況。

    因此很難透過保證人員可靠性(叛徒)及通訊可靠性(信使)來解決問題。

    區塊鏈是怎樣解決拜占庭的問題的呢?

    答案是共識演算法。

    在拜占庭的將軍之中,如果我們在戰役之前規定:

    九名將軍按照順序分別投票,順序分別為A~J,每個將軍都有自己獨一無二的印章。需要投票時,A先投票,a投完票後將自己的投票結果分別蓋上自己獨一無二的印章,給另外八位將軍每人發一份自己的投票結果。

    當b收到a的投票結果時,在將自己的投票結果加蓋印章後分別發給另外八個人,直到最後j投票後,每人手中都有8份投票結果。在投票結束後,每位將軍可以向其他任意幾位將軍傳送驗證資訊,來核對雙方得到的投票結果是否相同。

    假如這裡面有叛徒,叛徒在這種投票機制下,如果他選擇在發出去的八份信報中針對不同的將軍寫了不同的投票結果。投票結束後如果有將軍覺得投票有問題,他向其他將軍驗證時可能會得出某一個人的投票有兩種情況,這時候叛徒就會被發現。所以叛徒只能在發出去的八份信報中保持相同的投票,這顯然不會影響最後軍隊的整體行動的一致性。

    如果在信報傳遞的過程中出現了被截斷或者丟失的情況,沒有收到信報的將軍可以向其他收到信報的幾位將軍尋求丟失信報的投票結果。如果信報被篡改,那在最後將軍們之間相互驗證的時候會發現錯誤,得到正確的結果。

    在實際的區塊鏈系統中,解決拜占庭問題所採用的共識機制有好幾種方法,提供了將軍們投票順序的解決方法。比如工作量證明機制(PoW,按照將軍們平時的勤勞程度決定投票順序)、權益證明機制(PoS,按照將軍們各自的財富所有程度決定投票順序)。

  • 中秋節和大豐收的關聯?
  • 傳統文化的議論句?