中本聰如何解決拜占庭將軍們的難題

公元395年1月17日枪向,羅馬皇帝狄奧多西一世掛了。死前把帝國一分為二咧党,交給兩個兒子掌管秘蛔。其中西羅馬帝國在476年被日耳曼蠻族滅掉。千年后的1453年,東羅馬帝國都城君士坦丁堡(今土耳其伊斯坦布爾)被奧斯曼帝國攻陷深员。

相傳伊斯坦布爾城建于古希臘時期负蠕,由墨伽拉城的王-拜占斯修建,所以最早的名字叫拜占庭倦畅。

17世紀遮糖,史學家為了區(qū)分古羅馬帝國和中世紀羅馬帝國,把東羅馬帝國改稱為拜占庭帝國叠赐。

拜占庭將軍們的難題

在一次戰(zhàn)爭中撤蚊,拜占庭帝國出動四名將軍去進攻敵國河绽。他們帶領各自的軍隊巢钓,分別從不同的方向包圍了強大的對手位喂。但要想擊敗敵人,只有一半以上的將軍同時進攻才能成功罢洲,否則會被消滅踢故。分散包圍的將軍們離得很遠,需要通過通訊兵協(xié)商進攻方向和時間奏路。這時候畴椰,他們碰到一個難題:四個將軍中間可能存在一個叛徒臊诊,假設將軍A是叛徒鸽粉,他派出3個通訊兵分別告訴B、C抓艳、D上午9點触机、10點、11點發(fā)起進攻玷或,那這三個將軍無疑會全軍覆沒儡首。所以,四個將軍之間都不敢信任對方偏友,他們需要確認信息的正確性蔬胯。

他們想出一個辦法并達成了共識,按照這個共識協(xié)議來執(zhí)行:每個收到信息的將軍位他,再派出通訊兵去告訴其他將軍自己收到的信息氛濒,已收到的最多的信息為準,發(fā)起進攻鹅髓。

再來看剛才的問題舞竿,B、C窿冯、D收到叛徒A的消息后骗奖,B將軍派出通訊兵告訴C、D將軍,他收到的信息是上午9點進攻执桌,C鄙皇、D也同樣派出通訊兵這么做。于是仰挣,B得到3條信息:A告訴B上午9點進攻育苟;A告訴C上午10點進攻;A告訴D上午11點進攻椎木。B依此判斷A是他們中的叛徒违柏,協(xié)商無效。

另一種情況香椎,A將軍不是叛徒漱竖,他派出了3個通訊兵,分別告訴B畜伐、C馍惹、D將軍,上午9點發(fā)起進攻玛界。B万矾、C、D三位將軍收到信息后慎框,互相確認信息良狈。如果B是叛徒,B告訴D說收到的信息是上午10點發(fā)起進攻笨枯,C和D也分別告訴另外兩個將軍薪丁,A的信息是上午9點發(fā)起進攻。于是馅精,C和D將軍收到的信息都是兩個上午9點严嗜,一個上午10點。他們只要執(zhí)行收到的多的那個命令就可以了洲敢。因為漫玄,B如果確實是叛徒,A压彭、B睦优、C將軍會上午9點發(fā)起進攻。如果B不是叛徒哮塞,那B收到的信息是兩個9點一個10點刨秆,B會執(zhí)行收到多的信息,B忆畅、C衡未、D三個將軍會一起發(fā)起進攻尸执。所以,按照這個共識執(zhí)行缓醋,結果都沒有問題如失。

這就是拜占庭將軍問題(Byzantine failures)。在比特幣和區(qū)塊鏈中送粱,幾乎每篇介紹的文章中褪贵,都會講到拜占庭將軍問題。

其實將軍的故事并沒有真正發(fā)生過抗俄。它是由萊斯利·蘭伯特(Leslie Lamport)在論文中脆丁,用來為描述分布式系統(tǒng)一致性問題的一個著名的例子,是在點對點通信中的一個基本問題动雹。

萊斯利.蘭伯特在論文中證明了槽卫,上面例子中的將軍總數(shù)大于3M ,背叛者為M 或者更少時胰蝠,忠誠的將軍可以達成命令上的一致歼培。(就是說一共有四個將軍其中叛徒有一個的情況下,通過例子中的共識算法可以保證命令執(zhí)行的正確性)

當中本聰設計比特幣系統(tǒng)時茸塞,也面臨和拜占庭將軍類似且復雜得多的問題躲庄。

讓我們回到 數(shù)字世界中的現(xiàn)金交易系統(tǒng)--比特幣 文中那個村子里。村民們每個人都有一本賬钾虐,當有交易的時候噪窘,就大聲廣播到全村所有村民,收到廣播的村民們在自己的賬本上記錄交易內容禾唁,完成賬本的同步統(tǒng)一效览。每個村民就像相于一個拜占庭將軍无切,但村民數(shù)遠遠多于將軍的數(shù)量荡短。假如,村里有100個村民哆键,按照前面拜占庭將軍問題中的方法掘托,一筆交易每個村民需要通信99次,所有村民需要通信(100-1)^2次(這還是不考慮一個村民可以同時發(fā)起多個交易的情況)籍嘹。如果村子發(fā)展成地球村闪盔,那通信數(shù)量將是天文數(shù)字。很明顯辱士,當村民達到一定數(shù)量泪掀,前面的方法就已經無法解決問題了。

我們再來分析一下更復雜的問題:我們知道通信距離的遠近或通道的擁疏颂碘,會造成延遲時間的不同异赫。如果賬本上A村民未花費的余額有10元,但他同時廣播支付給B、C各10元塔拳,由于延遲問題鼠证,有的村民先收到A支付給B的交易信息,有的村民先收到A支付給C的交易信息靠抑,那村民是記錄哪一筆交易呢量九?全村共同維護的賬本怎么統(tǒng)一呢?

中本聰在比特幣中的解決方案

假設地球村的村民都來到了2009年颂碧,每個人都用上了電腦和互聯(lián)網荠列。中本聰說,我制定一些協(xié)議規(guī)則载城,我已經寫在了點對點電子現(xiàn)金系統(tǒng)程序里弯予,你們只要在電腦上運行,就可以安全的在網絡中使用電子現(xiàn)金來交易个曙。

這種網上的電子現(xiàn)金叫比特幣(bitcoin)锈嫩,記錄比特幣交易數(shù)據(jù)的電子帳頁叫區(qū)塊(block),把帳頁按時間順序像鏈條一樣連起來就成了區(qū)塊鏈(blockchain)垦搬,每一個運行比特幣電子現(xiàn)金軟件的電腦稱為一個節(jié)點(node)呼寸。

1.誰來發(fā)行

比特幣總量2100萬枚。
平均每十分鐘記一次帳猴贰,也就是增加一個區(qū)塊对雪。
每記一次賬也就是增加一個區(qū)塊,程序系統(tǒng)自動發(fā)行50個比特幣獎勵給記賬節(jié)點米绕。
每增加21萬個區(qū)塊(大約四年)瑟捣,獎勵給記賬節(jié)點的比特幣減少一半。直到2140年栅干,2100萬枚比特幣發(fā)行完畢迈套。

這些規(guī)則都已經寫進了程序里,運行在了每一個使用比特幣軟件的人電腦里碱鳞,在不能達成95%共識的情況下桑李,任何人無權修改。

比特幣不存在超發(fā)貨幣的情況窿给,這有點像黃金贵白。黃金是非再生資源,總量固定崩泡。每年的產量除去工業(yè)用量禁荒,增長幅度低于生產力增長幅度,有通縮性質角撞。

自2009年至今呛伴,比特幣系統(tǒng)分別在2012年和2016年區(qū)塊高度在21萬和42萬塊時寥掐,進行了兩次獎勵減半。目前磷蜀,記賬獎勵為12.5個比特幣召耘,2020年將迎來第三次減半,屆時獎勵將為6.25個比特幣褐隆。

2.誰來記賬

只有答對問題的節(jié)點才有記賬的權利污它。
記賬節(jié)點只承認最長的那條區(qū)塊鏈。
所有想記賬拿獎勵的節(jié)點需要同時解一個題庶弃,誰先解出答案衫贬,誰就能把最近收集到的交易內容寫入區(qū)塊放到區(qū)塊鏈上,并且廣播給其他節(jié)點歇攻。其他收到廣播的節(jié)點驗證你的答案正確后會停止解題固惯,并且把自己的區(qū)塊鏈同步更新,然后繼續(xù)解答下一題缴守。
每增加2016個區(qū)塊(大約二周)葬毫,根據(jù)解題的快慢,調整一次題的難度屡穗,以保證平均解題時間穩(wěn)定在10分鐘(也就是平均10分鐘增加一個區(qū)塊)贴捡。

解出答案取得記賬權的節(jié)點,稱為“礦工”村砂,大家爭著解題的過程就叫做“挖礦”烂斋,把這些節(jié)點設備集中起來一起挖礦的地方就是“礦場”。需要解的題也不是想象中的數(shù)學難題础废,其實有點像買彩票汛骂,就是一種碰撞。

礦場

我們來看看是怎么解題的:現(xiàn)在比特幣軟件給出的解題難度是碰撞出一個前18位是0的64位數(shù)字(000.....)评腺。節(jié)點驗證完一個收到的廣播交易數(shù)據(jù)后帘瞭,會放在一個待打包的池子里,把它們生成一個準備放到鏈上的區(qū)塊歇僧,比如這個區(qū)塊的內容是“張三給了李四5個比特幣”图张。在這個內容的后面加上一個不斷變化的數(shù)字,用一種SHA256的算法對它進行哈希運算(SHA256(張三給了李四5個比特幣+100101))诈悍,將運算結果和當前的難度值(前18位是0的64位數(shù)字)比較,如果小于難度值兽埃,則解題成功侥钳。

這到底有多難呢?當前比特幣的算力是5279.13P/秒柄错,相當于每秒運算多少次舷夺?每秒哈希碰撞次數(shù)=1000的5次方*5279.13苦酱,按這種運算速度,平均10分鐘解出一個題给猾。

2009年以來疫萤,比比特幣價格更瘋狂的是全網算力,比特幣價格有多次下跌90%以上敢伸,但算力卻從來沒有消失過扯饶,一路增長了幾十億倍。這背后有對比特幣池颈、區(qū)塊鏈的信仰尾序,但更多的是對利益的追逐,是人性躯砰。

即便這種碰撞幾率每币,也會有兩個節(jié)點幾乎同時得到答案的可能。這時候琢歇,它們會同時打包自己的區(qū)塊兰怠,并廣播出去,這就使區(qū)塊鏈有了一個分叉李茫。

中本聰給出的規(guī)則是“記賬節(jié)點只承認最長的那條區(qū)塊鏈”痕慢。有了分叉后先不管,下一個得到記賬權的節(jié)點(連續(xù)兩次同時取得記賬權的可能進一步減杏渴浮)掖举,如果先收到其中一個分叉節(jié)點A的廣播,就會把新區(qū)快加到這個分叉鏈上娜庇,這樣就會有一條分叉鏈長塔次,一條分叉鏈短。以后再得到記賬權的節(jié)點名秀,都會按照“最長的鏈是正確鏈”的規(guī)則來維護這條長鏈励负,而短的分叉鏈中的區(qū)塊會被廢棄掉,那些被廢棄的交易會重新打包到正確的鏈上匕得。理論上認為继榆,經過六個區(qū)塊的確認,交易就不會有被廢棄的可能了汁掠。

中本聰這套通過提供算力進行大量哈希運算略吨,爭奪記賬權,使所有節(jié)點取得共識的機制考阱,就是工作量證明(Proof Of Work翠忠,簡稱POW)共識機制。

3.工作量證明(POW)的優(yōu)缺點

  • 簡潔乞榨,自然秽之,中立当娱。

  • 安全性較高,破壞系統(tǒng)需要極大的成本
    只有破壞者擁有全網算力的51%以上才有可能發(fā)起攻擊考榨,算力是礦工們投入大量 設備跨细、電力等成本得到的。攻擊者需要付出全網51%上的挖礦成本才行河质,這基本 上等于一個中等國家全年的國防預算了冀惭,但攻擊者得到利益卻可能很少。

  • 區(qū)塊確認時間長愤诱,不利于商業(yè)應用云头。
  • 每個區(qū)塊大小只有1M,不利于大量交易淫半。
  • 電力能源消耗大溃槐。

運行中本聰設計的共識機制的比特幣系統(tǒng),已經安全運行了9年科吭,并帶動了區(qū)塊鏈技術的發(fā)展應用昏滴。

結束語

比特幣的能源消耗問題一直被人詬病。但我們也應該看到对人,比特幣巨大的全網算力是保證比特幣系統(tǒng)穩(wěn)健運行的重要保障谣殊,算力的增長對應的就是設備的投入和電力消耗的增加。

在一個開放的環(huán)境中牺弄,要使內部變得有序姻几,必然帶來外部無序的增加。這就像你家里的衛(wèi)生势告,你不打掃它是不會自己變的整潔的蛇捌,但是你如果打掃,必然會把垃圾扔到外面咱台,而造成外部的無序络拌。

工業(yè)革命以來,人類每一次大的變革回溺,都會帶來對外部環(huán)境的破壞春贸。機器、電力的發(fā)明消耗了大量煤炭遗遵,汽車的發(fā)明消耗了大量石油萍恕,計算機和網絡的發(fā)明消耗了電力,各種材料的生產過程排放了大量污染瓮恭。大型商業(yè)公司雄坪、銀行的服務器集群也同樣消耗了巨大的電力能源。AlphaGo與人類下一盤棋都要消耗3000美金的電力屯蹦。

這是仁者見仁维哈,智者見智的問題,只有當人們從未來回望現(xiàn)在時登澜,才知道這一切有沒有價值阔挠。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脑蠕,隨后出現(xiàn)的幾起案子购撼,更是在濱河造成了極大的恐慌,老刑警劉巖谴仙,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迂求,死亡現(xiàn)場離奇詭異,居然都是意外死亡晃跺,警方通過查閱死者的電腦和手機揩局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掀虎,“玉大人凌盯,你說我怎么就攤上這事∨胗瘢” “怎么了驰怎?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長二打。 經常有香客問我县忌,道長,這世上最難降的妖魔是什么继效? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任症杏,我火速辦了婚禮,結果婚禮上莲趣,老公的妹妹穿的比我還像新娘鸳慈。我一直安慰自己,他們只是感情好喧伞,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布走芋。 她就那樣靜靜地躺著,像睡著了一般潘鲫。 火紅的嫁衣襯著肌膚如雪翁逞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天溉仑,我揣著相機與錄音挖函,去河邊找鬼。 笑死浊竟,一個胖子當著我的面吹牛怨喘,可吹牛的內容都是我干的津畸。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼必怜,長吁一口氣:“原來是場噩夢啊……” “哼肉拓!你這毒婦竟也來了?” 一聲冷哼從身側響起梳庆,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤暖途,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膏执,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驻售,經...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年更米,在試婚紗的時候發(fā)現(xiàn)自己被綠了欺栗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡壳快,死狀恐怖纸巷,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情眶痰,我是刑警寧澤瘤旨,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站竖伯,受9級特大地震影響存哲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜七婴,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一祟偷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧打厘,春花似錦修肠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至莽鸭,卻和暖如春吗伤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硫眨。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工足淆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓巧号,卻偏偏與公主長得像族奢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子裂逐,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內容