區(qū)塊鏈的解決方案是如何解決拜占庭將軍問(wèn)題的
每一本講區(qū)塊鏈技術(shù)的書(shū)籍,幾乎都會(huì)講到拜占庭將軍問(wèn)題,看到這個(gè)詞語(yǔ)時(shí),我曾經(jīng)一度認(rèn)為有一位名叫拜占庭的將軍帶領(lǐng)著一支龐大的軍隊(duì)打仗時(shí)遇到了難題,但查閱了一些資料后,發(fā)現(xiàn)實(shí)際上并沒(méi)有拜占庭將軍,也沒(méi)有這場(chǎng)戰(zhàn)爭(zhēng),完全是計(jì)算機(jī)專(zhuān)家假想出的問(wèn)題。
1拜占庭帝國(guó)
拜占庭這個(gè)專(zhuān)有名詞取自于拜占庭帝國(guó),又叫東羅馬帝國(guó),其軍事力量很強(qiáng)大,地處現(xiàn)今歐洲的土耳其國(guó)家。
在《區(qū)塊鏈----從數(shù)字貨幣到信用社會(huì)》中關(guān)于拜占庭將軍問(wèn)題的描述有點(diǎn)小錯(cuò)誤,書(shū)中把問(wèn)題描述成10個(gè)鄰國(guó)去攻打拜占庭國(guó)家,但查到這個(gè)問(wèn)題的提出者Leslie Lamport的論文原稿時(shí),實(shí)際上這是一個(gè)假想的問(wèn)題。
萊斯利·蘭伯特(Leslie Lamport),是微軟研究院的首席研究員,曾獲得2013年圖靈獎(jiǎng)——計(jì)算機(jī)界的諾貝爾獎(jiǎng)。這家伙覺(jué)得故事讓問(wèn)題變得受歡迎,因此他在提出觀(guān)點(diǎn)和問(wèn)題時(shí)常用故事背景吸引眼球,拜占庭將軍的故事就是蘭伯特在研究分布式系統(tǒng)容錯(cuò)性的時(shí)候編出的一個(gè)故事。
外國(guó)研究人員引用歐洲歷史來(lái)舉例說(shuō)明一個(gè)算法問(wèn)題,中國(guó)人容易誤解,拜占庭幅員遼闊、軍事力量強(qiáng)大,派出多支部隊(duì)去攻打敵軍,并不是挨打。
2問(wèn)題描述
論文中的原文:
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.
假設(shè)拜占庭帝國(guó)的幾支軍隊(duì)在敵人的城池外扎營(yíng),每支軍隊(duì)聽(tīng)命于自己的將軍,這些將軍之間只能通過(guò)信使傳遞消息。在對(duì)敵軍進(jìn)行偵察后,將軍們必須制訂一份共同行動(dòng)計(jì)劃。但是,有些將軍可能是叛徒,這些叛徒會(huì)阻礙那些忠誠(chéng)的將軍達(dá)成共識(shí)。
這個(gè)問(wèn)題的簡(jiǎn)潔描述:在已知有間諜的分布式軍隊(duì)中,將軍們?nèi)绾芜_(dá)成共識(shí),執(zhí)行共同的作戰(zhàn)計(jì)劃,來(lái)取得戰(zhàn)爭(zhēng)的勝利。
3問(wèn)題的難點(diǎn)
這個(gè)問(wèn)題困擾了程序員們很多年,直到比特幣的出現(xiàn)。通常會(huì)遇到的問(wèn)題有:
這些將軍離得很遠(yuǎn),不能每遇到一個(gè)問(wèn)題,就聚到一起開(kāi)會(huì)商量對(duì)策
這些將軍中可能有少量叛徒,叛徒會(huì)亂發(fā)消息
信使在傳遞消息時(shí)可能會(huì)把信弄丟
信息可能會(huì)被敵國(guó)截獲
無(wú)法確認(rèn)消息是否真的來(lái)自某位將軍
將軍們?cè)谏塘窟^(guò)程中可能會(huì)浪費(fèi)很多天時(shí)間,貽誤戰(zhàn)機(jī)
4區(qū)塊鏈的解決方案
把軍隊(duì)想像成計(jì)算機(jī)節(jié)點(diǎn),把信使想像成計(jì)算機(jī)間的網(wǎng)絡(luò)通訊,攻占敵軍就是寫(xiě)入一個(gè)大家公認(rèn)的區(qū)塊記錄。
區(qū)塊鏈技術(shù)在發(fā)送信息中加入了成本,降低了信息傳遞的速率,并采用了工作量證明(PoW),即一個(gè)節(jié)點(diǎn)必須經(jīng)過(guò)大量嘗試性計(jì)算才能得出一個(gè)結(jié)果,而其它節(jié)點(diǎn)只需極少的時(shí)間就能證明其真?zhèn)危@樣能夠減少垃圾消息、假消息在節(jié)點(diǎn)間傳播的狀況。
挖礦節(jié)點(diǎn)把一段時(shí)間內(nèi)的交易信息打包成一個(gè)區(qū)塊,蓋上時(shí)間戳,與上一個(gè)區(qū)塊銜接在一起,每個(gè)區(qū)塊都包含了上一個(gè)區(qū)塊的索引(哈希值),然后再寫(xiě)入新的信息,從而形成新的區(qū)塊,首尾相連,最終形成了區(qū)塊鏈。
用工作量證明、公鑰加密等技術(shù),使比特幣網(wǎng)絡(luò)從一個(gè)去中心化的不可信網(wǎng)絡(luò)變?yōu)榭尚啪W(wǎng)絡(luò),使所有參與者可以在某些事情上達(dá)成一致,使價(jià)值傳遞成為了可能。