公元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)在時登澜,才知道這一切有沒有價值阔挠。