在互聯(lián)網(wǎng)里有個(gè)很麻煩的問題,叫拜占庭將軍問題。它提出了一個(gè)疑問,在所有平等的通信節(jié)點(diǎn)中,如果發(fā)生信息丟失、或被篡改,整個(gè)網(wǎng)絡(luò)怎么維持工作。
為了方便大家理解,它的提出人蘭伯特先生用中世紀(jì)活躍在地中海沿岸的拜占庭帝國的模擬場(chǎng)景來舉例說明,因此這個(gè)互聯(lián)網(wǎng)世界的論點(diǎn)被稱為拜占庭問題。
假設(shè)有十個(gè)拜占庭將軍分別率領(lǐng)十支軍隊(duì)包圍了敵人的一個(gè)城市,他們分散在敵城周邊,隨時(shí)準(zhǔn)備進(jìn)攻。注意:這十位將軍完全平等,沒有主帥。
由于敵人也不是吃干飯的,必須有六支以上的拜占庭軍隊(duì)聯(lián)合行動(dòng)才能擊敗敵軍占領(lǐng)城市。
這時(shí)候拜占庭將軍們就將面臨一個(gè)問題了。
比如一號(hào)將軍決定在明天下午一點(diǎn)發(fā)動(dòng)進(jìn)攻,為保證勝利,他必須把行動(dòng)時(shí)間和地點(diǎn)通知其余九位將軍,讓他們和自己同時(shí)發(fā)起攻擊。
這個(gè)信息是要靠通信兵來傳達(dá)的,通信兵是不是可靠,或者是不是傻子記性特別差,都不能保證,而且一號(hào)將軍也不能確定其余九位將軍中,有沒有人已經(jīng)被敵軍收買叛變了。
一個(gè)看似簡單的戰(zhàn)役,在這里由于出現(xiàn)這些問題,變得復(fù)雜起來。
比如去二號(hào)將軍那里的通信兵已經(jīng)被敵軍收買了,本來明天下午一點(diǎn)的總攻時(shí)間,被他擅自更改到后天下午一點(diǎn)。
這就等于二號(hào)將軍已經(jīng)退出了這次行動(dòng),如果到明天下午一點(diǎn),收到正確信息的將軍只有五個(gè),那么拜占庭大軍就會(huì)被敵人擊敗。
這里可能大家還會(huì)說,哪有那么傻的將軍,二號(hào)將軍再派個(gè)傳令兵去一號(hào)將軍哪里核實(shí)一下就可以了嘛。
對(duì)不起,提出這個(gè)問題的科學(xué)家真不是傻子,拜占庭將軍問題,是在信息通道絕對(duì)沒問題的情況下的假設(shè),也就是說不管收到的是正確的、還是錯(cuò)誤的信息,對(duì)方肯定能收到信息。
要是你說派人核實(shí),那就是另一個(gè)事了,這個(gè)叫作“二軍問題”。也很復(fù)雜,稍微說一下:
比如一號(hào)將軍和二號(hào)將軍之間,有敵軍駐扎或者頻繁巡邏,為了安全起見,二位將軍不能冒險(xiǎn)去對(duì)方那里開會(huì)商量,免得在路上被敵軍干掉。那就得派通信兵來負(fù)責(zé)聯(lián)系。
于是,這個(gè)看似簡單的事情,在這種通信通道里就會(huì)出現(xiàn)一個(gè)很無聊循環(huán),具體如下:話說二號(hào)將軍接到了錯(cuò)誤的指令信息后,派出一個(gè)通信兵去一號(hào)將軍那里核實(shí):“我家將軍叫我來問問,您是不是叫我們后天下午一點(diǎn)一起進(jìn)攻?”
一號(hào)將軍一聽,氣的暴跳如雷,跟二號(hào)將軍的通信兵說:“犢癟子玩意兒,老子非宰了那個(gè)通信兵不可,我說的是明天下午一點(diǎn)?!?/p>
二號(hào)通信兵回去和二號(hào)將軍一說,二號(hào)將軍一聽,還好還好,幸虧我聰明,派了個(gè)人核實(shí)一下。趕緊再派一個(gè)人去一號(hào)將軍那里通知一聲,我同意明天下午一點(diǎn)和你一起進(jìn)攻。
好了,無聊的循環(huán)開始了。
一號(hào)將軍也學(xué)聰明了,也派了個(gè)通信兵去二號(hào)將軍那里回答:“我知道你同意明天下午一點(diǎn)一起進(jìn)攻了?!?/p>
二號(hào)將軍不放心,于是又派了一個(gè)通信兵去一號(hào)將軍哪里說:“OK,我知道你知道我同意明天下午一起進(jìn)攻了?!?/p>
一號(hào)又派通信兵去二號(hào),“好的,我知道你知道我知道你同意明天下午一起進(jìn)攻了?!?/p>
二號(hào)又來,“行,我知道你知道我知道你知道我明天下午一起進(jìn)攻了”
一號(hào)再來:“我知道你知道我知道你知道我知道……”
二號(hào):“我知道你知道我知道………………………”
一號(hào):“我知道………………………………………………”
二號(hào):“……………………………………………………………”
一號(hào)……………………………………………………………………
怎么感覺有點(diǎn)混字?jǐn)?shù)的嫌疑。
看起來網(wǎng)絡(luò)通信的核實(shí)是個(gè)沒法確認(rèn)的大麻煩,要是通信成了這個(gè)樣子,我們就沒法干活了。不過我們這里就先不說“二軍問題”的解決辦法了,大概知道這事挺麻煩就行。
那么怎么解決拜占庭問題呢?
拜占庭將軍問題在現(xiàn)實(shí)里是不可能發(fā)生的,將軍和通信兵的家屬們都在國內(nèi)呢,誰敢叛變或者不負(fù)責(zé)任的瞎傳消息,導(dǎo)致大軍慘敗,拜占庭皇帝可以殺了他全家。
在區(qū)塊鏈技術(shù)出現(xiàn)之前,這個(gè)問題在互聯(lián)網(wǎng)中又是無法解決的。你不可能說為了保證各個(gè)節(jié)點(diǎn)的忠實(shí)性,讓他們交押金,誰敢亂傳信息就扣誰的錢吧。
這里要注意一下,我們說的是在所有節(jié)點(diǎn)平等的互聯(lián)網(wǎng)里無法解決這個(gè)拜占庭將軍問題。大家都是將軍,都是平等的,沒有誰是權(quán)威或者主將。
上面所舉的例子還只是十個(gè)拜占庭將軍的通信兵不靠譜,還沒說這十個(gè)平等的將軍搞在一起,能搞出多少幺蛾子來呢。
比如二號(hào)將軍平時(shí)就是看不慣一號(hào)將軍,憑啥你說明天下午一點(diǎn)進(jìn)攻,我就得屁顛屁顛的跟著你賣命啊,我偏不,你明天自己去吧。
好了,這種人在十個(gè)將軍里,只要有五個(gè),拜占庭大軍就必?cái)o疑。
現(xiàn)實(shí)中的互聯(lián)網(wǎng)節(jié)點(diǎn)是不平等的,所以不存在這個(gè)問題。比如一個(gè)新聞網(wǎng)站的主編發(fā)個(gè)郵件給下面的編輯,讓他發(fā)篇文章,說明天會(huì)下雨。結(jié)果編輯不知道哪根筋搭錯(cuò)了,像那個(gè)叛變的通信兵一樣,昧著良心說:明天晴空萬里,后天會(huì)下雨。
現(xiàn)實(shí)世界里的互聯(lián)網(wǎng)公司處理這種事很簡單,把這個(gè)編輯開除了事,殺雞儆猴,看誰以后還敢亂發(fā)新聞,就跟現(xiàn)實(shí)中的拜占庭皇帝一樣。
于是,所有的互聯(lián)網(wǎng)公司都是中心化而非去中心化分布式的,因?yàn)樵跊]有區(qū)塊鏈技術(shù)之前,沒有人能解決拜占庭問題,也就是沒人能想出辦法來,讓一群平等的、互不相識(shí)的人(節(jié)點(diǎn))為了共同的一個(gè)社區(qū)或者公司分工協(xié)作,共同發(fā)展。
區(qū)塊鏈?zhǔn)窃趺醋龅浇鉀Q拜占庭將軍問題的呢?怎么能夠讓一群互不相識(shí)、從未謀面的人,在一個(gè)體系里以平等的身份,共同努力維護(hù)這個(gè)系統(tǒng)呢?
靠價(jià)值共識(shí),以前的文章說過一些比特幣的問題。大家都知道比特幣是有價(jià)值的,一個(gè)比特幣好幾萬人民幣呢。
如果現(xiàn)在你是一個(gè)比特幣的礦工,我相信你是絕對(duì)不會(huì)故意自己去在這個(gè)系統(tǒng)里為非作歹、故意搗亂的,而且你一個(gè)人也不可能有這個(gè)能力。
但是,如果像你這樣的人多了,超過了比特幣網(wǎng)絡(luò)節(jié)點(diǎn)的百分之五十一,你們這幫搗亂份子神經(jīng)病發(fā)了,一起決定要?dú)У舯忍貛牛俏乙矝]辦法。
不過那你就是在跟自己過不去,自己讓自己花大價(jià)錢買來的礦機(jī)、耗時(shí)耗電的辛辛苦苦挖來的比特幣變成一串毫無價(jià)值的代碼,對(duì)你有什么好處?
因此在比特幣的系統(tǒng)里,是沒有拜占庭將軍問題的,沒有哪個(gè)通信節(jié)點(diǎn)會(huì)傳出不實(shí)的信息,做出不利于自己、不利于比特幣系統(tǒng)的決定。就算有瘋子這么干了,比特幣的系統(tǒng)也不會(huì)承認(rèn)他發(fā)出區(qū)塊,大家只認(rèn)正常人維護(hù)的最長鏈。
當(dāng)然,就像現(xiàn)在的公司競(jìng)爭一樣,如果有一個(gè)公司或者個(gè)人,想出錢收買足夠的比特幣叛徒,來搞垮比特幣,那也不是不行。
截止2018年2月,比特幣的全網(wǎng)算力為:22.7EH/s(1EH=1000PH=1000000TH),按照比特大陸螞蟻S9型礦機(jī)的13.5T的算力計(jì)算:22.7*1000*1000T /13.5=1680000臺(tái)全球約有168萬臺(tái)螞蟻S9礦機(jī)在運(yùn)行,
考慮到還有很多礦工用的是老型號(hào)的礦機(jī),保守估計(jì)吧,全網(wǎng)共有200萬臺(tái)礦機(jī)。
要改變比特幣區(qū)塊鏈的記錄,需要超過51%的節(jié)點(diǎn)達(dá)成共識(shí),那你就需要收買102萬臺(tái)礦機(jī)。
現(xiàn)在比特幣大約挖出了80%,約1600萬枚。也就是每個(gè)礦機(jī)平均每人8個(gè)比特幣。
現(xiàn)在可以核算成本了,螞蟻S9礦機(jī)大約14萬一臺(tái),比特幣一個(gè)大約是42000元人民幣,8個(gè)336000元,一臺(tái)礦機(jī)你得先陪人家48萬。102萬臺(tái)就是4896億人民幣。
還沒計(jì)算人家挖礦過程中的電費(fèi),所有礦機(jī)一年的電費(fèi)和挪威全國一年的電費(fèi)相當(dāng)。102萬臺(tái)礦機(jī),挖了幾年賠幾年,自己去算吧。
這還只是你賠給人礦工的本錢,102萬礦工總得有利可圖才會(huì)跟著你干這事吧,不然誰誰瘋了,把自己掙錢的系統(tǒng)摧毀掉?那這個(gè)數(shù)字還得翻幾番才有誘惑力吧,翻五倍就是二萬五千億。
算到這里,你覺得代價(jià)已經(jīng)夠大了吧,還沒完呢。還沒有計(jì)算擁有大量比特幣的大佬們,在受到攻擊時(shí)的反擊力量,這就不知道還得往上翻多少倍,你才能擊敗他們了,因?yàn)樗麄儽澈筮€有98萬沒被收買的礦工,這個(gè)力量無法估算。
可惜,令人絕望的是:就算你成功的收買了51%的比特幣叛徒改變了比特幣賬本,可那剩下的98萬礦工每人都保留了那條正確的區(qū)塊鏈,完全可以另起爐灶,繼續(xù)他們的游戲,這在區(qū)塊鏈技術(shù)里,叫做分叉。
而且你一定要相信,那51%的叛徒不久還會(huì)回到那個(gè)不可篡改的比特幣網(wǎng)絡(luò)里,繼續(xù)參加游戲的,而那個(gè)系統(tǒng)壓根不在乎他們是不是忠誠。一切都白忙活了。
有沒有一種“抽刀斷水水更流”的感覺?
現(xiàn)在,你覺得誰有這個(gè)本錢和動(dòng)力去破壞這條區(qū)塊鏈?