在這篇文章中我會(huì)給出一個(gè)虛擬的村莊叫“比特村”,整個(gè)文章會(huì)以講故事的方式,逐步告訴大家比特幣提出的動(dòng)機(jī)、解決了什么問題以及一些關(guān)鍵組件的目標(biāo)和設(shè)計(jì)方案。
問題的提出
我們先從比特幣產(chǎn)生的動(dòng)機(jī)開始。
以物易物的比特村
話說在這個(gè)世界上,有一個(gè)叫比特村的小村莊,村莊共有幾百戶人家。這個(gè)村莊幾乎與世隔絕,過著自給自足的生活。由于沒有大規(guī)模貿(mào)易,比特村村民一直過著以物易物的生活,也就是說村民之間并沒有使用統(tǒng)一的貨幣,互相間的貿(mào)易基本上就是老張家拿一袋面粉換老李家一只羊,王大嫂拿一筐野果換劉大嬸兩尺布。村民們一直就這么純樸的生活著。
實(shí)物貨幣
終于有一天,村民覺得一直這樣以物易物實(shí)在太不方便了,于是村子全員開會(huì),討論如何解決這個(gè)問題。有人提議,以便于分割且稀有的東西,例如黃金,作為一般等價(jià)物,把其它物品和黃金的對應(yīng)關(guān)系編成一張表格,例如一克黃金對應(yīng)一只羊,一克黃金對應(yīng)一袋面粉等等,此時(shí)老張?jiān)僖膊挥每钢淮娣蹥獯跤醯娜ダ侠罴覔Q羊了,他只要從家里摸出一克金子,就可以去老李家牽回一只羊,而老李拿著這一克黃金可以從任何愿意出讓面粉的人那里換回一袋面粉,當(dāng)然也可以換取任何和一克黃金等值的物品。
此時(shí)比特村進(jìn)入了實(shí)物貨幣時(shí)代。
符號(hào)貨幣
好景不長,過了一段時(shí)間,實(shí)物貨幣的弊端也出現(xiàn)了。因?yàn)楸忍卮甯浇鸬V并不多,開采和冶煉金子太費(fèi)時(shí)費(fèi)力了。而隨著使用,金子總是不斷會(huì)因?yàn)槟p、丟失或有人故意囤積而發(fā)生損耗。全村人又一次坐在了一起,開始商討對策。此時(shí)有人說,其實(shí)大家也不必一定要真的用黃金啊,隨便找張紙,寫上“一克黃金”,只要全村人都認(rèn)同這張紙就等于一克黃金,問題不就解決了。其他人紛紛表示認(rèn)同,但同時(shí)也有了新的問題:真實(shí)的黃金是需要開采和冶煉的,金礦有限,開采和冶煉也需要成本,所以沒有人可以短期憑空制造大量的黃金,可寫字就不同了,只要我紙夠筆夠,隨便像寫多少寫多少,那這就變成拼誰家里紙多了,搞不好到時(shí)一萬張紙才能換一只羊(實(shí)際上這就發(fā)生了經(jīng)濟(jì)學(xué)上的通貨膨脹)。
大家一想也是啊。不過此時(shí)又有人提出了解決方案:這個(gè)紙不是誰寫都有效,我們只認(rèn)村里德高望重的老村長寫得,大家都認(rèn)識(shí)老村長的字。老村長寫一些紙,同時(shí)按照各家黃金存量發(fā)給大家等量的紙,例如老張家有二百克黃金,老村長就發(fā)給老張二百張寫著“一克黃金”的紙,同時(shí)將老張家的黃金拿走作為抵押。就這樣,老村長將村里所有黃金收歸到自己的家里,并按各家上交的黃金數(shù)量發(fā)給等值的寫有字的紙。此時(shí)村民就可以拿著這些紙當(dāng)黃金進(jìn)行貿(mào)易了,而且大家都認(rèn)得老村長的字,其他人偽造不出來。另外,如果誰的紙磨損太嚴(yán)重,也可拿到老村長那里兌換新的等值的紙,另外老村長承諾任何人如果想要換成真黃金,只要拿紙回來,老村長就會(huì)把等值的黃金還給那人。因?yàn)槔洗彘L寫得紙的黃金量和真實(shí)放在家里的黃金量是一樣的,所以只要嚴(yán)格按照銷毀多少紙新寫多少紙的原則,每一張有效的紙總能換回相應(yīng)的真黃金。
此時(shí),比特村進(jìn)入了符號(hào)貨幣(紙幣)時(shí)代。而老村長就承擔(dān)了政府和銀行的角色。
中央系統(tǒng)虛擬貨幣
又過了幾年,老村長由于每天都要核對大量的舊紙幣,寫新的紙幣,還要把各種賬目仔細(xì)做好記錄。一來二去,老村長操勞過度不幸駕鶴西去了。
比特村再次召開全體大會(huì),討論應(yīng)該怎么辦。此時(shí)老村長的兒子二狗子自告奮勇接過了父親的筆,承擔(dān)起貨幣發(fā)行的責(zé)任。這個(gè)年輕的村長二狗子很聰明,他做了幾天,發(fā)現(xiàn)好像也不用真的寫那么多紙。完全可以這樣:村民把紙幣都交上來,銷毀,但是二狗子會(huì)記錄下每戶上交的紙幣數(shù)量。以后如果要進(jìn)行付錢,例如老張要拿一克金子向老李換一只羊,就一起給二狗子打個(gè)電話,說明要將老張名下的一克金子劃歸老李名下,二狗子拿出賬本,看看老張名下是否有一克金子,如果有就在老張的名下減掉一克,在老李的名下加上一克,這樣就完成了支付,此時(shí)老李在電話中聽到二狗子確認(rèn)轉(zhuǎn)賬完成,就可以放心讓老張把羊牽走了。
此時(shí)比特村進(jìn)入了中央系統(tǒng)虛擬貨幣時(shí)代。每個(gè)村民都不需要用實(shí)物支付,支付過程變成了二狗子那邊維護(hù)的賬本上數(shù)字的變更。
分布式虛擬貨幣
這新上任的二狗子是聰明,不過這人有時(shí)候是聰明反被聰明誤。有一天二狗子盯著這賬本,心想這全村各戶誰有多少錢就是我說的算,那我豈不是……。于是他頭腦一熱,私自從老張帳下劃了十克金子到自己名下。
本以為天衣無縫,但沒想到老張也有記賬的習(xí)慣,有一天他正要付錢卻被二狗子告知賬戶沒錢了。老張核對了一下自己的賬本,明明還有十克啊,于是拿著賬本去找二狗子理論,這一核對發(fā)現(xiàn)了那筆未經(jīng)老張同意的轉(zhuǎn)賬。
東窗事發(fā)!比特村炸開鍋了。二狗子被彈劾是不可避免了,不過通過這件事,大家發(fā)現(xiàn)了賬本集中在一個(gè)人手里的弊端:
這個(gè)體系完全依賴于賬本持有人的個(gè)人信用,如果這個(gè)人不守規(guī)矩,隨意篡改賬本,那么整個(gè)貨幣系統(tǒng)就會(huì)崩潰 如果這個(gè)人家里失火或者賬本失竊,同樣也會(huì)為整個(gè)體系帶來毀滅性的打擊 正當(dāng)人們不知所措時(shí),村里一個(gè)叫中本聰?shù)恼锌茖W(xué)家走上了臺(tái),告訴大家他已經(jīng)設(shè)計(jì)了一套不依賴任何中央處理人的叫比特幣的虛擬貨幣系統(tǒng),可以解決上述問題。然后他緩緩講述了自己的方案。
下面我們就來看看中本聰同學(xué)是如何設(shè)計(jì)這套系統(tǒng)的。
基礎(chǔ)設(shè)施搭建
賬簿公開機(jī)制
中本聰首先說明,要對現(xiàn)有賬簿進(jìn)行如下改造:
賬簿上不再記載每戶村民的余額,而只記載每一筆交易。即記載每一筆交易的付款人、收款人和付款金額。只要賬簿的初始狀態(tài)確定,每一筆交易記錄可靠并有時(shí)序,當(dāng)前每個(gè)人持有多少錢是可以推算出來的。 賬簿由私有改為公開,只要任何村民需要,都可以獲得當(dāng)前完整的賬簿,賬簿上記錄了從賬簿創(chuàng)建開始到當(dāng)前所有的交易記錄。 此言一出,下面立刻炸鍋了。第一條還無所謂,但是第二條簡直無法接受,因?yàn)橘~簿可是記錄了所有村民的交易,這樣大家的隱私不全暴露了嗎。
中本聰?shù)故遣换挪幻?,拿出了一對奇怪的東西。
身份與簽名機(jī)制(公鑰加密系統(tǒng))
中本聰說,大家不要慌。在他的這套機(jī)制下,任何人都不使用真實(shí)身份交易,而是使用一個(gè)唯一的代號(hào)交易。
他展示了手里神奇的東西,說這兩件東西分別叫保密印章和印章掃描器。后面他會(huì)給村里每一戶發(fā)一個(gè)保密印章和一個(gè)印章掃描器。兩者的作用如下:
保密印章可以在紙上蓋一個(gè)章,每個(gè)印章蓋出的章都隱含了一個(gè)全村唯一的一串字符,但是憑肉眼是看不出來的。也無法通過觀察來制造出相應(yīng)的印章。 印章掃描器可以掃描某個(gè)已經(jīng)蓋好的章,讀出隱含的信息,并在液晶屏上顯示出一串字符。 有了這兩個(gè)神奇的東西,大家就可以在不暴露真實(shí)身份的情況下進(jìn)行交易了,而印章隱含的那一串字符就是這戶人家的代號(hào)。具體如何巧妙利用保密印章和印章掃描器進(jìn)行交易,會(huì)在下文詳述。
成立虛擬礦工組織(挖礦群體)
下一步,中本聰面向全村招募虛擬礦工,招募要求如下:
礦工以組為單位,一組可以是單獨(dú)的一戶,也可以是幾戶聯(lián)合為一組 成為礦工不影響正常使用貨幣 礦工每天要花費(fèi)一定時(shí)間從事比特幣“挖礦”活動(dòng),但是不同于挖金礦,虛擬礦工不需要拿著工具去野外作業(yè),在家里就可以完成工作 礦工有一定可能性獲得報(bào)酬,在挖礦活動(dòng)中付出的努力越多,獲得報(bào)酬的可能性越大 礦工可以隨時(shí)退出,也可以隨時(shí)有新的礦工加進(jìn)來 很快,大約有五分之一的村民加入比特幣礦工組織,共分成了7個(gè)組。
建立初始賬簿(創(chuàng)世塊)
下面,中本聰宣布,先根據(jù)二狗子手里的賬簿,把抵押的所有黃金按賬簿記錄的余額退還給每位村民,然后徹底銷毀這本賬簿。
然后,中本聰拿出一本新賬簿,在賬簿的第一頁上記錄了一些交易記錄,特別的是,這些記錄的付款人一欄全都是“系統(tǒng)”,而收款人分別是每個(gè)印章對應(yīng)的隱含字符,代表初始時(shí)刻,系統(tǒng)為每一戶默認(rèn)分配了一定數(shù)量比特幣,但是數(shù)量非常少,都只有幾枚,甚至有些不幸的村戶沒有獲得比特幣。
接著中本聰說,由于目前市面上比特幣非常少,大家可以先回到用黃金做貨幣的時(shí)代,由于我不是村長,我也沒有權(quán)利強(qiáng)迫大家一定要承認(rèn)比特幣,大家可以自行決定要不要接受比特幣。不過隨著比特幣的流動(dòng)和礦工的活動(dòng),比特幣會(huì)慢慢多起來。
支付與交易
做了這么多鋪墊,終于說到重點(diǎn)了,下面說一下在這樣一個(gè)體系下如何完成支付。以老張付給老李10個(gè)比特幣為例。
付款人簽署交易單
為了支付10個(gè)比特幣,老張首先要詢問老李的標(biāo)識(shí)字符串,例如是“ABCDEFG”,同時(shí)老張也有一個(gè)標(biāo)識(shí)字符串例如是“HIJKLMN”,然后老張寫一張單子,內(nèi)容為“HILKLMN支付10比特幣給ABCDEFG”,然后用自己的保密印章改一個(gè)章,將這張單子交給老李。另外為了便于追溯這筆錢的來源,還要在單子里注明這筆錢的來源記在哪一頁,例如這個(gè)單子里,老張的10比特幣來自建立賬簿時(shí)系統(tǒng)的贈(zèng)送,記錄在賬簿第一頁。
收款人確認(rèn)單據(jù)簽署人
老李拿到這個(gè)單子后,需要確認(rèn)這個(gè)單子確實(shí)是來自“HIJKLMN”這個(gè)人(也就是老張)簽署的,這個(gè)并不困難。因?yàn)閱巫由媳仨氂斜C苷?,老李拿出印章掃描器,掃一下章,如果液晶屏顯示出的字符和付款人字符是一致的(這里是“HIJKLMN”),就可以確認(rèn)單子確實(shí)是付款人簽署的。這是因?yàn)楦鶕?jù)保密印章的機(jī)制,沒有其他人可以偽造印章,任何一個(gè)人只要掃描一下印章,都可以確認(rèn)單子的付款人和蓋章人是否一致。
收款人確認(rèn)付款人余額
這個(gè)系統(tǒng)到目前還是很有問題。通過保密印章,收款人雖然可以確認(rèn)付款人確實(shí)簽署了這份單子,但是無法自行確認(rèn)付款人是否有足夠的余額支付。之前的中央虛擬貨幣系統(tǒng)中,二狗子負(fù)責(zé)檢查付款人的余額,并通知收款人交易是否有效,現(xiàn)在把二狗子開了,誰來負(fù)責(zé)記賬和確認(rèn)每筆交易的有效性呢?
之前說過,中本聰設(shè)計(jì)的這個(gè)系統(tǒng)是分布式貨幣系統(tǒng),不依賴任何中央人物,所以不會(huì)有一個(gè)或少數(shù)幾個(gè)人負(fù)責(zé)這件事,最終承擔(dān)這份工作的是之前所提到的礦工組織。老張、老李和全村其他任何使用比特幣進(jìn)行交易的村民都依賴礦工組織的工作才能完成交易。
礦工的工作
礦工的工作是整個(gè)系統(tǒng)的核心,也是最復(fù)雜性最高的地方。下面逐步介紹礦工的工作內(nèi)容和目的。
礦工的工具
俗話說,工欲善其事,必先利其器。比特幣礦工雖然不用鐵撅、鐵锨和探照燈等工具,不過也要有一些必備的東西。
初始賬簿。每個(gè)組首先自己復(fù)制一份初始賬簿,初始賬簿只有一頁,記錄了系統(tǒng)的第一次贈(zèng)送
空賬簿紙。每個(gè)小組有若干賬簿紙,每一頁紙上僅有賬簿結(jié)構(gòu),沒有填內(nèi)容,具體內(nèi)容的書寫規(guī)則后面講述。下面是一張空賬簿紙的樣子,各個(gè)字段的意義后面會(huì)說到
編碼生成器(哈希函數(shù))。中本聰又向礦工組織的每個(gè)組分發(fā)了若干編碼生成器,這個(gè)東西很神奇,將一頁賬簿填好內(nèi)容的賬簿紙放入這個(gè)機(jī)器,機(jī)器會(huì)在賬簿紙的“本賬單編號(hào)”一欄自動(dòng)打印一串由“0”和“1”組成的編號(hào),共256個(gè)。最神奇的是,編號(hào)生成器有如下功能:
生成的編號(hào)僅與賬簿紙上填入的內(nèi)容有關(guān),與填寫人、字體、填寫時(shí)間等因素均無關(guān) 內(nèi)容相同的賬簿紙生成的編號(hào)總是相同,但是如果內(nèi)容哪怕只改一個(gè)字符,編號(hào)就會(huì)面目全非 編碼生成器在打印編碼時(shí)還需要將所有填入賬簿紙的交易單放入,機(jī)器會(huì)掃描交易單和填入交易單的一致性,尤其是保密印章,如果發(fā)現(xiàn)保密印章和付款人不一致,會(huì)拒絕打印編碼 將一張已打印的賬簿紙放入,機(jī)器會(huì)判定編號(hào)是否是有效的機(jī)器打印,并且判定編號(hào)和內(nèi)容是否一致,這個(gè)編號(hào)無法偽造 交易單收件箱。每個(gè)礦工小組需要在門口掛一個(gè)箱子用于收集交易單。 公告板。每個(gè)礦工小組同樣需要一個(gè)公告板公示一些信息。
有了上面的工具,礦工組織就可以開工了!
收集交易單
中本聰規(guī)定,每筆交易的發(fā)起人,不但要將交易單給到收款人,還要同時(shí)復(fù)制若干份一模一樣的交易單投遞到每個(gè)礦工小組的收件箱里。
礦工小組的人定期到自己的收件箱里把收集到的交易單一并取出來。
填寫賬簿
此時(shí)小組的人拿出一張空的賬簿紙,把這些交易填寫到“交易清單”一欄,同時(shí)找到當(dāng)前賬簿最后一頁,將最后一頁的編號(hào)抄寫到“上一張賬單編號(hào)一欄”。 注意還有個(gè)“幸運(yùn)數(shù)字”,可以隨便填上一個(gè)數(shù)字,如12345。然后,將這樣賬簿紙放入編號(hào)生成器,打印好編號(hào),一張賬簿就算完成了。
如果你以為礦工的工作就這么簡單,那就大錯(cuò)特錯(cuò)了,中本聰有個(gè)變態(tài)的規(guī)定:只有編號(hào)的前10個(gè)數(shù)均為0,這頁賬簿紙才算有效。
根據(jù)之前對編號(hào)生成器的描述,要修改編號(hào),只能修改賬簿紙的內(nèi)容,而“交易清單”和“上一張賬簿紙編號(hào)”是不能隨便改的,那么只能改幸運(yùn)數(shù)字了。于是為了生成有效的賬簿紙,小組里的礦工就不斷抄寫賬簿紙,但每張紙的幸運(yùn)數(shù)字都不同,然后不斷的重復(fù)將紙放入編碼器,如果生成的編號(hào)不符合規(guī)定,這張紙就算廢了,重復(fù)這個(gè)過程直到生成一串有效的編號(hào)。
我們知道,如果編號(hào)的每一個(gè)數(shù)字都是隨機(jī)的,那么平均寫1000多張幸運(yùn)數(shù)字不同的紙才能獲得一個(gè)有效的編號(hào)。
這就奇怪了,這些礦工為什么要拼命干這看似無意義的事情呢?還記得之前說過礦工有報(bào)酬吧,這就是礦工的動(dòng)力了。中本聰規(guī)定:每一張賬簿紙的交易清單第一條交易為“系統(tǒng)給這個(gè)小組支付50個(gè)比特幣”。也就是說,如果你生成了一張有意義的賬簿紙,并且被所有挖礦小組接受了,那么就意味著這條交易也被接受了,你的挖礦小組獲得了50個(gè)比特幣。
這就是礦工被叫做礦工的原因,也是為什么之前說隨著交易和礦工的活動(dòng),比特幣的數(shù)量會(huì)不斷增多。例如下面是一個(gè)挖礦過程,這個(gè)小組的公共比特幣帳號(hào)為“UVWXYZ”。
在幸運(yùn)數(shù)字嘗試到“533”時(shí),系統(tǒng)生成了一頁有效賬簿。
確認(rèn)賬簿
當(dāng)某挖礦小組幸運(yùn)的生成了一張有意義的賬簿,為了得到獎(jiǎng)勵(lì),必須立刻請其它小組確認(rèn)自己的工作。前面說過,當(dāng)前村里有7個(gè)挖礦組,所以這個(gè)小組必須將有效賬簿紙謄抄6份快馬加鞭送到其他6個(gè)小組請求確認(rèn)。
中本聰規(guī)定,當(dāng)某個(gè)小組接到其他小組送來的賬簿紙時(shí),必須立即停下手里的挖礦工作進(jìn)行賬簿確認(rèn)。
需要確認(rèn)的信息有三個(gè):
賬簿的編號(hào)有效
賬簿的前一頁賬簿有效
交易清單有效
首先看第一個(gè),這個(gè)確認(rèn)比較簡單。只要將送來的賬簿紙放入編碼生成器進(jìn)行驗(yàn)證,如果驗(yàn)證通過,則編號(hào)有效。
第二部分需要將賬簿頁上的“上一頁賬簿紙編號(hào)”和這個(gè)小組目前保存的有效賬簿最后一頁編號(hào)比對,如果相同則確認(rèn),如果不同,需要順著已有賬簿向前比對,直到找到這個(gè)編號(hào)的頁。如果沒有找到指定的“上一頁賬簿紙編號(hào)”對應(yīng)的頁,這個(gè)小組會(huì)將此頁丟掉。不予確認(rèn)。
注意,由上面的機(jī)制可以保證,如果各個(gè)小組手里的賬簿紙是相同的,那么他們都能按同樣的順序裝訂成相同的賬簿。因?yàn)楹竺嬉粡埣埖木幪?hào)總是依賴前面的紙的編號(hào),編碼生成器的機(jī)制保證了所有合法賬簿紙的相對先后順序在每個(gè)小組那里都是相同的(可能會(huì)有分支,但不會(huì)出現(xiàn)環(huán),后面細(xì)講)。
最后是如何確認(rèn)交易清單有效,其實(shí)也就是要確認(rèn)當(dāng)前每筆交易的付款人有足夠的余額支付這筆錢。由于交易信息里包含這筆錢是如何來的,還包含了記錄來源交易的賬單編號(hào)。例如,HIJKLMN要給ABCDEFG10個(gè)比特幣,并注明了這10個(gè)比特幣來自之前OPQRST支付給HIJKLMN的一筆交易,確認(rèn)時(shí)首先要確認(rèn)之前這筆交易是否存在,同時(shí)還要檢查HIJKLMN在這之前沒有將這10個(gè)比特幣支付給別人。這一切確認(rèn)后,這筆交易有效性就被確認(rèn)了。
其中第一筆是系統(tǒng)獎(jiǎng)勵(lì)給生成這頁賬簿的小組的50個(gè),這筆交易大家都默認(rèn)承認(rèn),后面的只要按照上述方法追溯,就可以確認(rèn)HIJKLMN是否當(dāng)前真有10個(gè)比特幣支付給ABCDEFG。
如果完成了所有了上述驗(yàn)證并全部通過,這個(gè)小組就認(rèn)可了上述賬簿紙有效,然后將這張賬簿紙并入小組的主賬簿,舍棄目前正在進(jìn)行的工作,后面的挖礦工作會(huì)基于這本更新后的主賬本進(jìn)行。
賬簿確認(rèn)反饋
對于挖礦小組來說,當(dāng)賬簿紙送出去后,如果后面有收到其他小組送來的賬簿紙,其“上一頁賬簿紙編號(hào)”為自己之前送出去的賬簿紙,那么就表示他們的工作成功被其他小組認(rèn)可了,因?yàn)橐呀?jīng)有小組基于他們的賬簿紙繼續(xù)工作了。此時(shí),可以粗略的說可以認(rèn)為已經(jīng)得到了50個(gè)比特幣。
另外,任何一個(gè)小組當(dāng)新生成有效賬簿紙或確認(rèn)了別的小組的賬簿紙時(shí),就將最新被這個(gè)小組承認(rèn)的交易寫到公告牌上,那么收款人只要發(fā)現(xiàn)相關(guān)交易被各個(gè)小組認(rèn)可了,基本就可以認(rèn)為這筆錢已經(jīng)到了自己的賬上,后面他就可以在付款時(shí)將錢的來源指向這筆交易了。
以上就是整個(gè)比特幣的支付體系。下面我們來分析一下,這個(gè)體系為什么可以工作下去,以及這個(gè)體系可能面臨的風(fēng)險(xiǎn)。
工作機(jī)制分析
雖然上面闡述了比特幣的基本運(yùn)作規(guī)則,但是村民們還是有不少疑問。所以中本聰同學(xué)專門開了個(gè)答疑會(huì),解答常見問題。下面總結(jié)一下村民最集中關(guān)心的問題。
核心問題答疑
如果同時(shí)收到兩份合法的賬簿頁怎么辦?
注意在上面的運(yùn)行機(jī)制中,各個(gè)挖礦小組是并行工作的,因此完全可能出現(xiàn)這樣的情況:某小組收到兩份不一樣的賬簿頁,它們都基于當(dāng)前這個(gè)小組的主賬簿的最后一頁,并且內(nèi)容也都完全合法,怎么辦?
關(guān)于這個(gè)問題,中本聰同學(xué)說,小組不應(yīng)該以線性方式組織賬簿,而應(yīng)該以樹狀組織賬簿,任何時(shí)刻,都以當(dāng)前最長分支作為主賬簿,但是保留其它分支。舉個(gè)例子,某小組同時(shí)收到A、B兩份賬簿頁,經(jīng)核算都是合法的,此時(shí)小組應(yīng)該將兩頁以分叉的形式組織起來,如下圖所示:
黑色表示當(dāng)前賬簿主干。此時(shí),可以隨便選擇一個(gè)頁作為當(dāng)前主分支,例如選擇A:
此時(shí)如果有一個(gè)新的賬簿頁是基于A的,那么這個(gè)主干就延續(xù)下去:
如果這個(gè)主干一直這么延續(xù)下去,表示大家基本都以A為主干,B就會(huì)被遺忘。但是也有可能忽然B變成更長了:
那么我們就需要將B分支作為當(dāng)前主干,基于這個(gè)分支進(jìn)行后續(xù)工作。
從局部來看,雖然在某一時(shí)刻各個(gè)小組的賬簿主干可能存在不一致,但大方向是一致的,那些偶爾由于不同步產(chǎn)生的小分支,會(huì)很快被淹沒在歷史中。
如果挖礦小組有人偽造賬簿怎么辦
關(guān)于這個(gè)問題,中本聰同學(xué)說,只要挖礦組織中大多數(shù)人是誠實(shí)的,這個(gè)系統(tǒng)就可靠,具體分幾個(gè)方面給予答復(fù)。
首先,基于保密印章機(jī)制,沒有人能偽造他人身份進(jìn)行付款,因?yàn)榫幋a生成器在打印編碼時(shí)會(huì)核對所有交易單的保密印章,印章和付款人不一致會(huì)拒絕打印。
而且誠實(shí)的礦工也不會(huì)承認(rèn)不合法的交易(如某筆交易付款方余額不夠)。
所以只有一種可能的攻擊行為,即在收款人確認(rèn)收款后,從另一條分支上建立另外的交易單,取消之前的付款,而將同一筆錢再次付款給另一個(gè)人(即所謂的double-spending問題)。下面同樣用一個(gè)例子說明這個(gè)問題。
先假設(shè)有一個(gè)攻擊者擁有10個(gè)比特幣,他準(zhǔn)備將這筆錢同時(shí)支付給兩名受害者A和B,并都得到承認(rèn)。
第一步,攻擊者準(zhǔn)備從受害者A手里買10比特幣的黃金,他簽署交易單給受害者A,轉(zhuǎn)10個(gè)比特幣給受害者A。
第二步,這筆交易在最新的賬簿頁中被確認(rèn),并被各個(gè)挖礦小組公告出來。受害人A看到公告,確認(rèn)比特幣到賬,給了攻擊者10個(gè)比特幣等值的黃金。
第三步,攻擊者找到賬簿,從包含剛才交易的賬簿頁的前一頁做出一個(gè)分支,生成更多的賬單頁,超過剛才的分支。由于此時(shí)剛才攻擊者制造的分支變成了主干分支,而包含受害者A得到錢的分支變成了旁支,因此挖礦組織不再承認(rèn)剛才的轉(zhuǎn)賬,受害者A得到的10比特幣被取消了。
第四步,攻擊者可以再次簽署交易單,將同一筆錢支付給受害者B。受害者B確認(rèn)錢到賬后,支付給攻擊者等值黃金。
至此,攻擊者將10個(gè)比特幣花了兩次,從兩名受害者那里各購得等值黃金。攻擊者還可以如法炮制,取消與受害者B的轉(zhuǎn)賬,將同一筆錢再支付給其他人……
關(guān)于這種攻擊,中本聰給出的解決方案是,建議收款人不要在公告掛出時(shí)立即確認(rèn)交易完成,而是應(yīng)該再看一段時(shí)間,等待各個(gè)挖礦小組再掛出6張確認(rèn)賬簿,并且之前的賬簿沒有被取消,才確認(rèn)錢已到賬。
中本聰解釋道,之前設(shè)定變態(tài)的編號(hào)規(guī)則,正是為了防御這一點(diǎn)。根據(jù)前面所述,生成有效賬簿頁不是那么簡單的,要花費(fèi)大量的人力反復(fù)試不同的幸運(yùn)數(shù)字,而且過程完全是碰運(yùn)氣。如果某賬簿頁包含你收到錢的確認(rèn),并且在后面又延續(xù)了6個(gè),那么攻擊者想要在落后6頁的情況下從另一個(gè)分支趕超當(dāng)前主分支是非常困難的,除非攻擊者擁有非常多的人力,超過其他所有誠實(shí)礦工的人力之和。
而且,如果攻擊者有如此多人力,與其花這么大力氣搞這種攻擊,還不如做良民挖礦來的收益大。這就從動(dòng)機(jī)上杜絕了攻擊的形成。
比特幣會(huì)一直增加下去,豈不是會(huì)嚴(yán)重通貨膨脹
中本聰說,這一點(diǎn)我也想到了。前面忘了說了,我給礦工組織的操作細(xì)則手冊會(huì)說明,剛開始我們協(xié)議每生成一頁賬簿,獎(jiǎng)勵(lì)小組50個(gè)比特幣,后面,每當(dāng)賬簿增加21,000頁,獎(jiǎng)勵(lì)就減半,例如當(dāng)達(dá)到210,000頁后,每生成一頁賬簿獎(jiǎng)勵(lì)25個(gè)比特幣,420,000頁后,每生成一頁獎(jiǎng)勵(lì)12.5個(gè),依次類推,等賬簿達(dá)到6,930,000頁后,新生成賬簿頁就沒有獎(jiǎng)勵(lì)了。此時(shí)比特幣全量約為21,000,000個(gè),這就是比特幣的總量,所以不會(huì)無限增加下去。
沒有獎(jiǎng)勵(lì)后,就沒人做礦工了,豈不是沒人幫忙確認(rèn)交易了
到時(shí),礦工的收益會(huì)由挖礦所得變?yōu)槭杖∈掷m(xù)費(fèi)。例如,你在轉(zhuǎn)賬時(shí)可以指定其中1%作為手續(xù)費(fèi)支付給生成賬簿頁的小組,各個(gè)小組會(huì)挑選手續(xù)費(fèi)高的交易單優(yōu)先確認(rèn)。
礦工如果越來越多,比特幣生成速度會(huì)變快嗎
不會(huì)。中本聰解釋,雖然可以任意加入和退出礦工組織,導(dǎo)致礦工人數(shù)變化,每個(gè)礦工也會(huì)拿到一個(gè)編碼生成器,不過我已經(jīng)在編碼生成器中加入了調(diào)控機(jī)制,當(dāng)前工作的編碼生成器越多,每個(gè)機(jī)器的效率就越低,保證新賬簿頁生成速率不變。
雖然每個(gè)人的代號(hào)是匿名的,但如果泄露了某個(gè)人的代號(hào),賬簿又是公開的,豈不是他的所有賬目都查出來了
確實(shí)是這樣的。例如你要和某人交易,必然要要到他的代號(hào)才能填寫交易單。因?yàn)槭湛钊艘粰谝钊肽侨说拇?hào)。不過中本聰說可以提供無限制的保密印章,建議每一次交易用不同的保密印章,這樣查賬簿就追查不到同一個(gè)人的所有賬目了。
答疑完畢。
說明
本文用通俗比喻的方式講解了比特幣的運(yùn)行機(jī)制。有幾點(diǎn)需要說明:
為了便于理解,我做了很多簡化,因此有些機(jī)制細(xì)節(jié)和實(shí)際的比特幣可能不完全相同。但總體思想和關(guān)鍵原理是一致的。 由于很多計(jì)算機(jī)世界的東西(如公鑰體系、網(wǎng)絡(luò)傳輸)在現(xiàn)實(shí)世界中并沒有特別好的對等物,所以故事里難免有一些生硬和不合常理的細(xì)節(jié)。 本文描述的是比特幣網(wǎng)絡(luò)本身的技術(shù)原理和運(yùn)作機(jī)制,當(dāng)在如Mtgox這種買賣市場中進(jìn)行比特幣交易時(shí),市場做了中間代理,并不遵從上述機(jī)制
-
比特幣
+關(guān)注
關(guān)注
57文章
7002瀏覽量
140172
發(fā)布評論請先 登錄
相關(guān)推薦
評論