拜占庭将军们的投票出了问题
上世紀80年代,數(shù)字貨幣出現(xiàn)在人們的視野中。可是有兩個很嚴重的問題一直限制了數(shù)字貨幣的發(fā)展,這就是雙重支付問題和拜占庭將軍問題。
拜占庭將軍問題不是歷史上拜占庭的戰(zhàn)爭中出現(xiàn)的,而是1982年Leslie Lamport在其論文中提出的分布式對等網(wǎng)絡的容錯問題。這個Leslie Lamport你可能沒聽說過,但是著名排版軟件論文寫作神器LaTex你肯定聽說過,2013年他獲得的“圖靈獎”的他就是這款軟件的開發(fā)者。
論文原文:
We imagine that several divisions of the Byzantine army are camped outside an enemy city, each division commanded by its own general. The generals can communicate with one another only by messenger. After observing the enemy, they must decide upon a common plan of action. However, some of the generals may be traitors, trying to prevent the loyal generals from reaching agreement.
一群拜占庭將軍分別各率領一支軍隊共同攻打一座城市。假如軍隊只有進攻或撤離兩種選擇。因此將軍們必須通過投票來選擇最終的策略,也就是所有軍隊一起進攻或所有軍隊一起撤離。
因為各位將軍分處城市不同方向,他們只能通過信使互相聯(lián)系。在投票過程中每位將軍都將自己投票給進攻還是撤退的信息通過信使分別通知其他所有將軍,這樣一來每位將軍根據(jù)自己的投票和其他所有將軍送來的信息就可以知道共同的投票結果而決定行動策略。
這里有兩個問題。
一是將軍中可能出現(xiàn)叛徒,叛徒不僅可能給糟糕的策略投票,還可能選擇性地發(fā)送投票信息。假設有9位將軍投票,其中1名叛徒。8名忠誠的將軍中出現(xiàn)了4人投進攻,4人投撤離的情況。這時候叛徒可能故意給4名投進攻的將領送信表示投票進攻,而給4名投撤離的將領送信表示投撤離。這樣一來在4名投進攻的將領看來,投票結果是5人投進攻,從而發(fā)起進攻;而在4名投撤離的將軍看來則是5人投撤離。最后的結果是軍隊步調(diào)不一,可能會輸?shù)暨@場戰(zhàn)役。
二是由于將軍之間需要通過信使通訊,信使成了關鍵的一環(huán)。叛變將軍可能通過偽造信件來以其他將軍的身份發(fā)送假投票。即便所有將軍都保持忠誠,也不能排除信使被敵人截殺,甚至被敵人間諜替換等情況。
因此很難通過保證人員可靠性(叛徒)及通訊可靠性(信使)來解決問題。
那么區(qū)塊鏈是怎樣解決拜占庭的問題的呢?
答案是共識算法。
在拜占庭的將軍之中,如果我們在戰(zhàn)役之前規(guī)定:
九名將軍按照順序分別投票,順序分別為A~J,每個將軍都有自己獨一無二的印章。需要投票時,A先投票,a投完票后將自己的投票結果分別蓋上自己獨一無二的印章,給另外八位將軍每人發(fā)一份自己的投票結果。當b收到a的投票結果時,在將自己的投票結果加蓋印章后分別發(fā)給另外八個人,直到最后j投票后,每人手中都有8份投票結果。在投票結束后,每位將軍可以向其他任意幾位將軍發(fā)送驗證信息,來核對雙方得到的投票結果是否相同。
假如這里面有叛徒,叛徒在這種投票機制下,如果他選擇在發(fā)出去的八份信報中針對不同的將軍寫了不同的投票結果。投票結束后如果有將軍覺得投票有問題,他向其他將軍驗證時可能會得出某一個人的投票有兩種情況,這時候叛徒就會被發(fā)現(xiàn)。所以叛徒只能在發(fā)出去的八份信報中保持相同的投票,這顯然不會影響最后軍隊的整體行動的一致性。
如果在信報傳遞的過程中出現(xiàn)了被截斷或者丟失的情況,沒有收到信報的將軍可以向其他收到信報的幾位將軍尋求丟失信報的投票結果。如果信報被篡改,那在最后將軍們之間相互驗證的時候會發(fā)現(xiàn)錯誤,得到正確的結果。
在實際的區(qū)塊鏈系統(tǒng)中,解決拜占庭問題所采用的共識機制有好幾種方法,提供了將軍們投票順序的解決方法。比如工作量證明機制(PoW,按照將軍們平時的勤勞程度決定投票順序)、權益證明機制(PoS,按照將軍們各自的財富所有程度決定投票順序)。
歡迎關注公眾號:鏈數(shù)據(jù)(youmolin2) ? 一個專注于熱點技術和生活的公眾號
總結
以上是生活随笔為你收集整理的拜占庭将军们的投票出了问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。