這篇文章的定位會(huì)比較科普蜗细,盡量用類(lèi)比的方法將比特幣的基本原理講出來(lái)。這篇文章不會(huì)涉及算法和協(xié)議中比較細(xì)節(jié)的部分怒详。
在這篇文章中我會(huì)給出一個(gè)虛擬的村莊叫“比特村”炉媒,整個(gè)文章會(huì)以講故事的方式,逐步告訴大家比特幣提出的動(dòng)機(jī)昆烁、解決了什么問(wèn)題以及一些關(guān)鍵組件的目標(biāo)和設(shè)計(jì)方案吊骤。
問(wèn)題的提出
我們先從比特幣產(chǎn)生的動(dòng)機(jī)開(kāi)始。
以物易物的比特村
話(huà)說(shuō)在這個(gè)世界上静尼,有一個(gè)叫比特村的小村莊白粉,村莊共有幾百戶(hù)人家。這個(gè)村莊幾乎與世隔絕鼠渺,過(guò)著自給自足的生活蜗元。由于沒(méi)有大規(guī)模貿(mào)易,比特村村民一直過(guò)著以物易物的生活系冗,也就是說(shuō)村民之間并沒(méi)有使用統(tǒng)一的貨幣奕扣,互相間的貿(mào)易基本上就是老張家拿一袋面粉換老李家一只羊,王大嫂拿一筐野果換劉大嬸兩尺布掌敬。村民們一直就這么純樸的生活著惯豆。
實(shí)物貨幣
終于有一天,村民覺(jué)得一直這樣以物易物實(shí)在太不方便了奔害,于是村子全員開(kāi)會(huì)楷兽,討論如何解決這個(gè)問(wèn)題字旭。有人提議另假,以便于分割且稀有的東西,例如黃金图仓,作為一般等價(jià)物,把其它物品和黃金的對(duì)應(yīng)關(guān)系編成一張表格揭厚,例如一克黃金對(duì)應(yīng)一只羊却特,一克黃金對(duì)應(yīng)一袋面粉等等,此時(shí)老張?jiān)僖膊挥每钢淮娣蹥獯跤醯娜ダ侠罴覔Q羊了筛圆,他只要從家里摸出一克金子裂明,就可以去老李家牽回一只羊,而老李拿著這一克黃金可以從任何愿意出讓面粉的人那里換回一袋面粉太援,當(dāng)然也可以換取任何和一克黃金等值的物品闽晦。
此時(shí)比特村進(jìn)入了實(shí)物貨幣時(shí)代。
符號(hào)貨幣
好景不長(zhǎng)提岔,過(guò)了一段時(shí)間仙蛉,實(shí)物貨幣的弊端也出現(xiàn)了。因?yàn)楸忍卮甯浇鸬V并不多碱蒙,開(kāi)采和冶煉金子太費(fèi)時(shí)費(fèi)力了捅儒。而隨著使用,金子總是不斷會(huì)因?yàn)槟p振亮、丟失或有人故意囤積而發(fā)生損耗巧还。全村人又一次坐在了一起,開(kāi)始商討對(duì)策坊秸。此時(shí)有人說(shuō)麸祷,其實(shí)大家也不必一定要真的用黃金啊,隨便找張紙褒搔,寫(xiě)上“一克黃金”阶牍,只要全村人都認(rèn)同這張紙就等于一克黃金,問(wèn)題不就解決了星瘾。其他人紛紛表示認(rèn)同走孽,但同時(shí)也有了新的問(wèn)題:真實(shí)的黃金是需要開(kāi)采和冶煉的,金礦有限琳状,開(kāi)采和冶煉也需要成本磕瓷,所以沒(méi)有人可以短期憑空制造大量的黃金,可寫(xiě)字就不同了念逞,只要我紙夠筆夠困食,隨便像寫(xiě)多少寫(xiě)多少,那這就變成拼誰(shuí)家里紙多了翎承,搞不好到時(shí)一萬(wàn)張紙才能換一只羊(實(shí)際上這就發(fā)生了經(jīng)濟(jì)學(xué)上的通貨膨脹)硕盹。
大家一想也是啊。不過(guò)此時(shí)又有人提出了解決方案:這個(gè)紙不是誰(shuí)寫(xiě)都有效叨咖,我們只認(rèn)村里德高望重的老村長(zhǎng)寫(xiě)得瘩例,大家都認(rèn)識(shí)老村長(zhǎng)的字啊胶。老村長(zhǎng)寫(xiě)一些紙,同時(shí)按照各家黃金存量發(fā)給大家等量的紙垛贤,例如老張家有二百克黃金焰坪,老村長(zhǎng)就發(fā)給老張二百?gòu)垖?xiě)著“一克黃金”的紙,同時(shí)將老張家的黃金拿走作為抵押南吮。就這樣,老村長(zhǎng)將村里所有黃金收歸到自己的家里誊酌,并按各家上交的黃金數(shù)量發(fā)給等值的寫(xiě)有字的紙部凑。此時(shí)村民就可以拿著這些紙當(dāng)黃金進(jìn)行貿(mào)易了,而且大家都認(rèn)得老村長(zhǎng)的字碧浊,其他人偽造不出來(lái)涂邀。另外,如果誰(shuí)的紙磨損太嚴(yán)重箱锐,也可拿到老村長(zhǎng)那里兌換新的等值的紙比勉,另外老村長(zhǎng)承諾任何人如果想要換成真黃金,只要拿紙回來(lái)驹止,老村長(zhǎng)就會(huì)把等值的黃金還給那人浩聋。因?yàn)槔洗彘L(zhǎng)寫(xiě)得紙的黃金量和真實(shí)放在家里的黃金量是一樣的,所以只要嚴(yán)格按照銷(xiāo)毀多少紙新寫(xiě)多少紙的原則臊恋,每一張有效的紙總能換回相應(yīng)的真黃金衣洁。
此時(shí),比特村進(jìn)入了符號(hào)貨幣(紙幣)時(shí)代抖仅。而老村長(zhǎng)就承擔(dān)了政府和銀行的角色坊夫。
中央系統(tǒng)虛擬貨幣
又過(guò)了幾年,老村長(zhǎng)由于每天都要核對(duì)大量的舊紙幣撤卢,寫(xiě)新的紙幣环凿,還要把各種賬目仔細(xì)做好記錄。一來(lái)二去放吩,老村長(zhǎng)操勞過(guò)度不幸駕鶴西去了智听。
比特村再次召開(kāi)全體大會(huì),討論應(yīng)該怎么辦渡紫。此時(shí)老村長(zhǎng)的兒子二狗子自告奮勇接過(guò)了父親的筆瞭稼,承擔(dān)起貨幣發(fā)行的責(zé)任。這個(gè)年輕的村長(zhǎng)二狗子很聰明腻惠,他做了幾天环肘,發(fā)現(xiàn)好像也不用真的寫(xiě)那么多紙。完全可以這樣:村民把紙幣都交上來(lái)集灌,銷(xiāo)毀悔雹,但是二狗子會(huì)記錄下每戶(hù)上交的紙幣數(shù)量复哆。以后如果要進(jìn)行付錢(qián),例如老張要拿一克金子向老李換一只羊腌零,就一起給二狗子打個(gè)電話(huà)梯找,說(shuō)明要將老張名下的一克金子劃歸老李名下,二狗子拿出賬本益涧,看看老張名下是否有一克金子锈锤,如果有就在老張的名下減掉一克,在老李的名下加上一克闲询,這樣就完成了支付久免,此時(shí)老李在電話(huà)中聽(tīng)到二狗子確認(rèn)轉(zhuǎn)賬完成,就可以放心讓老張把羊牽走了扭弧。
此時(shí)比特村進(jìn)入了中央系統(tǒng)虛擬貨幣時(shí)代阎姥。每個(gè)村民都不需要用實(shí)物支付,支付過(guò)程變成了二狗子那邊維護(hù)的賬本上數(shù)字的變更鸽捻。
分布式虛擬貨幣
這新上任的二狗子是聰明呼巴,不過(guò)這人有時(shí)候是聰明反被聰明誤。有一天二狗子盯著這賬本御蒲,心想這全村各戶(hù)誰(shuí)有多少錢(qián)就是我說(shuō)的算衣赶,那我豈不是……。于是他頭腦一熱厚满,私自從老張帳下劃了十克金子到自己名下屑埋。
本以為天衣無(wú)縫,但沒(méi)想到老張也有記賬的習(xí)慣痰滋,有一天他正要付錢(qián)卻被二狗子告知賬戶(hù)沒(méi)錢(qián)了摘能。老張核對(duì)了一下自己的賬本,明明還有十克啊敲街,于是拿著賬本去找二狗子理論团搞,這一核對(duì)發(fā)現(xiàn)了那筆未經(jīng)老張同意的轉(zhuǎn)賬。
東窗事發(fā)多艇!比特村炸開(kāi)鍋了逻恐。二狗子被彈劾是不可避免了,不過(guò)通過(guò)這件事峻黍,大家發(fā)現(xiàn)了賬本集中在一個(gè)人手里的弊端:
這個(gè)體系完全依賴(lài)于賬本持有人的個(gè)人信用复隆,如果這個(gè)人不守規(guī)矩,隨意篡改賬本姆涩,那么整個(gè)貨幣系統(tǒng)就會(huì)崩潰
如果這個(gè)人家里失火或者賬本失竊挽拂,同樣也會(huì)為整個(gè)體系帶來(lái)毀滅性的打擊
正當(dāng)人們不知所措時(shí),村里一個(gè)叫中本聰?shù)恼锌茖W(xué)家走上了臺(tái)骨饿,告訴大家他已經(jīng)設(shè)計(jì)了一套不依賴(lài)任何中央處理人的叫比特幣的虛擬貨幣系統(tǒng)亏栈,可以解決上述問(wèn)題台腥。然后他緩緩講述了自己的方案。
下面我們就來(lái)看看中本聰同學(xué)是如何設(shè)計(jì)這套系統(tǒng)的绒北。
基礎(chǔ)設(shè)施搭建
賬簿公開(kāi)機(jī)制
中本聰首先說(shuō)明黎侈,要對(duì)現(xiàn)有賬簿進(jìn)行如下改造:
賬簿上不再記載每戶(hù)村民的余額,而只記載每一筆交易闷游。即記載每一筆交易的付款人峻汉、收款人和付款金額。只要賬簿的初始狀態(tài)確定脐往,每一筆交易記錄可靠并有時(shí)序休吠,當(dāng)前每個(gè)人持有多少錢(qián)是可以推算出來(lái)的。
賬簿由私有改為公開(kāi)钙勃,只要任何村民需要蛛碌,都可以獲得當(dāng)前完整的賬簿聂喇,賬簿上記錄了從賬簿創(chuàng)建開(kāi)始到當(dāng)前所有的交易記錄辖源。
此言一出,下面立刻炸鍋了希太。第一條還無(wú)所謂克饶,但是第二條簡(jiǎn)直無(wú)法接受,因?yàn)橘~簿可是記錄了所有村民的交易誊辉,這樣大家的隱私不全暴露了嗎矾湃。
中本聰?shù)故遣换挪幻Γ贸隽艘粚?duì)奇怪的東西堕澄。
身份與簽名機(jī)制(公鑰加密系統(tǒng))
中本聰說(shuō)邀跃,大家不要慌。在他的這套機(jī)制下蛙紫,任何人都不使用真實(shí)身份交易拍屑,而是使用一個(gè)唯一的代號(hào)交易。
他展示了手里神奇的東西坑傅,說(shuō)這兩件東西分別叫保密印章和印章掃描器僵驰。后面他會(huì)給村里每一戶(hù)發(fā)一個(gè)保密印章和一個(gè)印章掃描器。兩者的作用如下:
保密印章可以在紙上蓋一個(gè)章唁毒,每個(gè)印章蓋出的章都隱含了一個(gè)全村唯一的一串字符蒜茴,但是憑肉眼是看不出來(lái)的。也無(wú)法通過(guò)觀察來(lái)制造出相應(yīng)的印章浆西。
印章掃描器可以?huà)呙枘硞€(gè)已經(jīng)蓋好的章粉私,讀出隱含的信息,并在液晶屏上顯示出一串字符近零。
有了這兩個(gè)神奇的東西毡鉴,大家就可以在不暴露真實(shí)身份的情況下進(jìn)行交易了崔泵,而印章隱含的那一串字符就是這戶(hù)人家的代號(hào)。具體如何巧妙利用保密印章和印章掃描器進(jìn)行交易猪瞬,會(huì)在下文詳述憎瘸。
成立虛擬礦工組織(挖礦群體)
下一步,中本聰面向全村招募虛擬礦工陈瘦,招募要求如下:
礦工以組為單位幌甘,一組可以是單獨(dú)的一戶(hù),也可以是幾戶(hù)聯(lián)合為一組
成為礦工不影響正常使用貨幣
礦工每天要花費(fèi)一定時(shí)間從事比特幣“挖礦”活動(dòng)痊项,但是不同于挖金礦锅风,虛擬礦工不需要拿著工具去野外作業(yè),在家里就可以完成工作
礦工有一定可能性獲得報(bào)酬鞍泉,在挖礦活動(dòng)中付出的努力越多皱埠,獲得報(bào)酬的可能性越大
礦工可以隨時(shí)退出,也可以隨時(shí)有新的礦工加進(jìn)來(lái)
很快咖驮,大約有五分之一的村民加入比特幣礦工組織边器,共分成了7個(gè)組。
建立初始賬簿(創(chuàng)世塊)
下面托修,中本聰宣布忘巧,先根據(jù)二狗子手里的賬簿,把抵押的所有黃金按賬簿記錄的余額退還給每位村民睦刃,然后徹底銷(xiāo)毀這本賬簿砚嘴。
然后,中本聰拿出一本新賬簿涩拙,在賬簿的第一頁(yè)上記錄了一些交易記錄际长,特別的是,這些記錄的付款人一欄全都是“系統(tǒng)”兴泥,而收款人分別是每個(gè)印章對(duì)應(yīng)的隱含字符工育,代表初始時(shí)刻,系統(tǒng)為每一戶(hù)默認(rèn)分配了一定數(shù)量比特幣郁轻,但是數(shù)量非常少翅娶,都只有幾枚,甚至有些不幸的村戶(hù)沒(méi)有獲得比特幣好唯。
接著中本聰說(shuō)竭沫,由于目前市面上比特幣非常少,大家可以先回到用黃金做貨幣的時(shí)代骑篙,由于我不是村長(zhǎng)蜕提,我也沒(méi)有權(quán)利強(qiáng)迫大家一定要承認(rèn)比特幣,大家可以自行決定要不要接受比特幣靶端。不過(guò)隨著比特幣的流動(dòng)和礦工的活動(dòng)谎势,比特幣會(huì)慢慢多起來(lái)凛膏。
支付與交易
做了這么多鋪墊,終于說(shuō)到重點(diǎn)了脏榆,下面說(shuō)一下在這樣一個(gè)體系下如何完成支付猖毫。以老張付給老李10個(gè)比特幣為例。
付款人簽署交易單
為了支付10個(gè)比特幣须喂,老張首先要詢(xún)問(wèn)老李的標(biāo)識(shí)字符串吁断,例如是“ABCDEFG”,同時(shí)老張也有一個(gè)標(biāo)識(shí)字符串例如是“HIJKLMN”坞生,然后老張寫(xiě)一張單子仔役,內(nèi)容為“HILKLMN支付10比特幣給ABCDEFG”,然后用自己的保密印章改一個(gè)章是己,將這張單子交給老李又兵。另外為了便于追溯這筆錢(qián)的來(lái)源,還要在單子里注明這筆錢(qián)的來(lái)源記在哪一頁(yè)卒废,例如這個(gè)單子里沛厨,老張的10比特幣來(lái)自建立賬簿時(shí)系統(tǒng)的贈(zèng)送,記錄在賬簿第一頁(yè)升熊。
收款人確認(rèn)單據(jù)簽署人
老李拿到這個(gè)單子后俄烁,需要確認(rèn)這個(gè)單子確實(shí)是來(lái)自“HIJKLMN”這個(gè)人(也就是老張)簽署的绸栅,這個(gè)并不困難级野。因?yàn)閱巫由媳仨氂斜C苷拢侠钅贸鲇≌聮呙杵鞔饪瑁瑨咭幌抡卤腿幔绻壕溜@示出的字符和付款人字符是一致的(這里是“HIJKLMN”),就可以確認(rèn)單子確實(shí)是付款人簽署的风纠。這是因?yàn)楦鶕?jù)保密印章的機(jī)制况鸣,沒(méi)有其他人可以偽造印章,任何一個(gè)人只要掃描一下印章竹观,都可以確認(rèn)單子的付款人和蓋章人是否一致镐捧。
收款人確認(rèn)付款人余額
這個(gè)系統(tǒng)到目前還是很有問(wèn)題。通過(guò)保密印章臭增,收款人雖然可以確認(rèn)付款人確實(shí)簽署了這份單子懂酱,但是無(wú)法自行確認(rèn)付款人是否有足夠的余額支付。之前的中央虛擬貨幣系統(tǒng)中誊抛,二狗子負(fù)責(zé)檢查付款人的余額列牺,并通知收款人交易是否有效,現(xiàn)在把二狗子開(kāi)了拗窃,誰(shuí)來(lái)負(fù)責(zé)記賬和確認(rèn)每筆交易的有效性呢瞎领?
之前說(shuō)過(guò)泌辫,中本聰設(shè)計(jì)的這個(gè)系統(tǒng)是分布式貨幣系統(tǒng),不依賴(lài)任何中央人物九默,所以不會(huì)有一個(gè)或少數(shù)幾個(gè)人負(fù)責(zé)這件事震放,最終承擔(dān)這份工作的是之前所提到的礦工組織。老張驼修、老李和全村其他任何使用比特幣進(jìn)行交易的村民都依賴(lài)礦工組織的工作才能完成交易澜搅。
礦工的工作
礦工的工作是整個(gè)系統(tǒng)的核心,也是最復(fù)雜性最高的地方邪锌。下面逐步介紹礦工的工作內(nèi)容和目的勉躺。
礦工的工具
俗話(huà)說(shuō),工欲善其事觅丰,必先利其器饵溅。比特幣礦工雖然不用鐵撅、鐵锨和探照燈等工具妇萄,不過(guò)也要有一些必備的東西蜕企。
初始賬簿。每個(gè)組首先自己復(fù)制一份初始賬簿冠句,初始賬簿只有一頁(yè)轻掩,記錄了系統(tǒng)的第一次贈(zèng)送
空賬簿紙。每個(gè)小組有若干賬簿紙懦底,每一頁(yè)紙上僅有賬簿結(jié)構(gòu)唇牧,沒(méi)有填內(nèi)容,具體內(nèi)容的書(shū)寫(xiě)規(guī)則后面講述聚唐。下面是一張空賬簿紙的樣子丐重,各個(gè)字段的意義后面會(huì)說(shuō)到
編碼生成器(哈希函數(shù))。中本聰又向礦工組織的每個(gè)組分發(fā)了若干編碼生成器杆查,這個(gè)東西很神奇扮惦,將一頁(yè)賬簿填好內(nèi)容的賬簿紙放入這個(gè)機(jī)器,機(jī)器會(huì)在賬簿紙的“本賬單編號(hào)”一欄自動(dòng)打印一串由“0”和“1”組成的編號(hào)亲桦,共256個(gè)崖蜜。最神奇的是,編號(hào)生成器有如下功能:
生成的編號(hào)僅與賬簿紙上填入的內(nèi)容有關(guān)客峭,與填寫(xiě)人豫领、字體、填寫(xiě)時(shí)間等因素均無(wú)關(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)無(wú)法偽造
交易單收件箱。每個(gè)礦工小組需要在門(mén)口掛一個(gè)箱子用于收集交易單同欠。
公告板样傍。每個(gè)礦工小組同樣需要一個(gè)公告板公示一些信息。
有了上面的工具铺遂,礦工組織就可以開(kāi)工了衫哥!
收集交易單
中本聰規(guī)定,每筆交易的發(fā)起人襟锐,不但要將交易單給到收款人撤逢,還要同時(shí)復(fù)制若干份一模一樣的交易單投遞到每個(gè)礦工小組的收件箱里。
礦工小組的人定期到自己的收件箱里把收集到的交易單一并取出來(lái)粮坞。
填寫(xiě)賬簿
此時(shí)小組的人拿出一張空的賬簿紙蚊荣,把這些交易填寫(xiě)到“交易清單”一欄,同時(shí)找到當(dāng)前賬簿最后一頁(yè)莫杈,將最后一頁(yè)的編號(hào)抄寫(xiě)到“上一張賬單編號(hào)一欄”互例。 注意還有個(gè)“幸運(yùn)數(shù)字”,可以隨便填上一個(gè)數(shù)字筝闹,如12345媳叨。然后,將這樣賬簿紙放入編號(hào)生成器丁存,打印好編號(hào)肩杈,一張賬簿就算完成了柴我。
如果你以為礦工的工作就這么簡(jiǎn)單解寝,那就大錯(cuò)特錯(cuò)了,中本聰有個(gè)變態(tài)的規(guī)定:只有編號(hào)的前10個(gè)數(shù)均為0艘儒,這頁(yè)賬簿紙才算有效聋伦。
根據(jù)之前對(duì)編號(hào)生成器的描述,要修改編號(hào)界睁,只能修改賬簿紙的內(nèi)容觉增,而“交易清單”和“上一張賬簿紙編號(hào)”是不能隨便改的,那么只能改幸運(yùn)數(shù)字了翻斟。于是為了生成有效的賬簿紙逾礁,小組里的礦工就不斷抄寫(xiě)賬簿紙,但每張紙的幸運(yùn)數(shù)字都不同访惜,然后不斷的重復(fù)將紙放入編碼器嘹履,如果生成的編號(hào)不符合規(guī)定腻扇,這張紙就算廢了,重復(fù)這個(gè)過(guò)程直到生成一串有效的編號(hào)砾嫉。
我們知道幼苛,如果編號(hào)的每一個(gè)數(shù)字都是隨機(jī)的,那么平均寫(xiě)1000多張幸運(yùn)數(shù)字不同的紙才能獲得一個(gè)有效的編號(hào)焕刮。
這就奇怪了舶沿,這些礦工為什么要拼命干這看似無(wú)意義的事情呢?還記得之前說(shuō)過(guò)礦工有報(bào)酬吧配并,這就是礦工的動(dòng)力了括荡。中本聰規(guī)定:每一張賬簿紙的交易清單第一條交易為“系統(tǒng)給這個(gè)小組支付50個(gè)比特幣”。也就是說(shuō)溉旋,如果你生成了一張有意義的賬簿紙一汽,并且被所有挖礦小組接受了,那么就意味著這條交易也被接受了低滩,你的挖礦小組獲得了50個(gè)比特幣召夹。
這就是礦工被叫做礦工的原因,也是為什么之前說(shuō)隨著交易和礦工的活動(dòng)恕沫,比特幣的數(shù)量會(huì)不斷增多监憎。例如下面是一個(gè)挖礦過(guò)程,這個(gè)小組的公共比特幣帳號(hào)為“UVWXYZ”婶溯。
在幸運(yùn)數(shù)字嘗試到“533”時(shí)鲸阔,系統(tǒng)生成了一頁(yè)有效賬簿。
確認(rèn)賬簿
當(dāng)某挖礦小組幸運(yùn)的生成了一張有意義的賬簿迄委,為了得到獎(jiǎng)勵(lì)褐筛,必須立刻請(qǐng)其它小組確認(rèn)自己的工作。前面說(shuō)過(guò)叙身,當(dāng)前村里有7個(gè)挖礦組渔扎,所以這個(gè)小組必須將有效賬簿紙謄抄6份快馬加鞭送到其他6個(gè)小組請(qǐng)求確認(rèn)。
中本聰規(guī)定信轿,當(dāng)某個(gè)小組接到其他小組送來(lái)的賬簿紙時(shí)晃痴,必須立即停下手里的挖礦工作進(jìn)行賬簿確認(rèn)。
需要確認(rèn)的信息有三個(gè):
賬簿的編號(hào)有效
賬簿的前一頁(yè)賬簿有效
交易清單有效
首先看第一個(gè)财忽,這個(gè)確認(rèn)比較簡(jiǎn)單倘核。只要將送來(lái)的賬簿紙放入編碼生成器進(jìn)行驗(yàn)證,如果驗(yàn)證通過(guò)即彪,則編號(hào)有效紧唱。
第二部分需要將賬簿頁(yè)上的“上一頁(yè)賬簿紙編號(hào)”和這個(gè)小組目前保存的有效賬簿最后一頁(yè)編號(hào)比對(duì),如果相同則確認(rèn),如果不同漏益,需要順著已有賬簿向前比對(duì)酬凳,直到找到這個(gè)編號(hào)的頁(yè)。如果沒(méi)有找到指定的“上一頁(yè)賬簿紙編號(hào)”對(duì)應(yīng)的頁(yè)遭庶,這個(gè)小組會(huì)將此頁(yè)丟掉宁仔。不予確認(rèn)。
注意峦睡,由上面的機(jī)制可以保證翎苫,如果各個(gè)小組手里的賬簿紙是相同的,那么他們都能按同樣的順序裝訂成相同的賬簿榨了。因?yàn)楹竺嬉粡埣埖木幪?hào)總是依賴(lài)前面的紙的編號(hào)煎谍,編碼生成器的機(jī)制保證了所有合法賬簿紙的相對(duì)先后順序在每個(gè)小組那里都是相同的(可能會(huì)有分支,但不會(huì)出現(xiàn)環(huán)龙屉,后面細(xì)講)呐粘。
最后是如何確認(rèn)交易清單有效,其實(shí)也就是要確認(rèn)當(dāng)前每筆交易的付款人有足夠的余額支付這筆錢(qián)转捕。由于交易信息里包含這筆錢(qián)是如何來(lái)的作岖,還包含了記錄來(lái)源交易的賬單編號(hào)。例如五芝,HIJKLMN要給ABCDEFG10個(gè)比特幣痘儡,并注明了這10個(gè)比特幣來(lái)自之前OPQRST支付給HIJKLMN的一筆交易,確認(rèn)時(shí)首先要確認(rèn)之前這筆交易是否存在枢步,同時(shí)還要檢查HIJKLMN在這之前沒(méi)有將這10個(gè)比特幣支付給別人沉删。這一切確認(rèn)后,這筆交易有效性就被確認(rèn)了醉途。
其中第一筆是系統(tǒng)獎(jiǎng)勵(lì)給生成這頁(yè)賬簿的小組的50個(gè)矾瑰,這筆交易大家都默認(rèn)承認(rèn),后面的只要按照上述方法追溯隘擎,就可以確認(rèn)HIJKLMN是否當(dāng)前真有10個(gè)比特幣支付給ABCDEFG殴穴。
如果完成了所有了上述驗(yàn)證并全部通過(guò),這個(gè)小組就認(rèn)可了上述賬簿紙有效嵌屎,然后將這張賬簿紙并入小組的主賬簿推正,舍棄目前正在進(jìn)行的工作,后面的挖礦工作會(huì)基于這本更新后的主賬本進(jìn)行宝惰。
賬簿確認(rèn)反饋
對(duì)于挖礦小組來(lái)說(shuō),當(dāng)賬簿紙送出去后再沧,如果后面有收到其他小組送來(lái)的賬簿紙尼夺,其“上一頁(yè)賬簿紙編號(hào)”為自己之前送出去的賬簿紙,那么就表示他們的工作成功被其他小組認(rèn)可了,因?yàn)橐呀?jīng)有小組基于他們的賬簿紙繼續(xù)工作了淤堵。此時(shí)寝衫,可以粗略的說(shuō)可以認(rèn)為已經(jīng)得到了50個(gè)比特幣。
另外拐邪,任何一個(gè)小組當(dāng)新生成有效賬簿紙或確認(rèn)了別的小組的賬簿紙時(shí)慰毅,就將最新被這個(gè)小組承認(rèn)的交易寫(xiě)到公告牌上,那么收款人只要發(fā)現(xiàn)相關(guān)交易被各個(gè)小組認(rèn)可了扎阶,基本就可以認(rèn)為這筆錢(qián)已經(jīng)到了自己的賬上汹胃,后面他就可以在付款時(shí)將錢(qián)的來(lái)源指向這筆交易了。
以上就是整個(gè)比特幣的支付體系东臀。下面我們來(lái)分析一下着饥,這個(gè)體系為什么可以工作下去,以及這個(gè)體系可能面臨的風(fēng)險(xiǎn)惰赋。
工作機(jī)制分析
雖然上面闡述了比特幣的基本運(yùn)作規(guī)則宰掉,但是村民們還是有不少疑問(wèn)。所以中本聰同學(xué)專(zhuān)門(mén)開(kāi)了個(gè)答疑會(huì)赁濒,解答常見(jiàn)問(wèn)題轨奄。下面總結(jié)一下村民最集中關(guān)心的問(wèn)題。
核心問(wèn)題答疑
如果同時(shí)收到兩份合法的賬簿頁(yè)怎么辦拒炎?
注意在上面的運(yùn)行機(jī)制中戚绕,各個(gè)挖礦小組是并行工作的,因此完全可能出現(xiàn)這樣的情況:某小組收到兩份不一樣的賬簿頁(yè)枝冀,它們都基于當(dāng)前這個(gè)小組的主賬簿的最后一頁(yè)舞丛,并且內(nèi)容也都完全合法,怎么辦果漾?
關(guān)于這個(gè)問(wèn)題球切,中本聰同學(xué)說(shuō),小組不應(yīng)該以線(xiàn)性方式組織賬簿绒障,而應(yīng)該以樹(shù)狀組織賬簿吨凑,任何時(shí)刻,都以當(dāng)前最長(zhǎng)分支作為主賬簿户辱,但是保留其它分支鸵钝。舉個(gè)例子,某小組同時(shí)收到A庐镐、B兩份賬簿頁(yè)恩商,經(jīng)核算都是合法的,此時(shí)小組應(yīng)該將兩頁(yè)以分叉的形式組織起來(lái)必逆,如下圖所示:
黑色表示當(dāng)前賬簿主干怠堪。此時(shí)揽乱,可以隨便選擇一個(gè)頁(yè)作為當(dāng)前主分支,例如選擇A:
此時(shí)如果有一個(gè)新的賬簿頁(yè)是基于A的粟矿,那么這個(gè)主干就延續(xù)下去:
如果這個(gè)主干一直這么延續(xù)下去凰棉,表示大家基本都以A為主干,B就會(huì)被遺忘陌粹。但是也有可能忽然B變成更長(zhǎng)了:
那么我們就需要將B分支作為當(dāng)前主干撒犀,基于這個(gè)分支進(jìn)行后續(xù)工作。
從局部來(lái)看掏秩,雖然在某一時(shí)刻各個(gè)小組的賬簿主干可能存在不一致或舞,但大方向是一致的,那些偶爾由于不同步產(chǎn)生的小分支哗讥,會(huì)很快被淹沒(méi)在歷史中嚷那。
如果挖礦小組有人偽造賬簿怎么辦
關(guān)于這個(gè)問(wèn)題,中本聰同學(xué)說(shuō)杆煞,只要挖礦組織中大多數(shù)人是誠(chéng)實(shí)的魏宽,這個(gè)系統(tǒng)就可靠,具體分幾個(gè)方面給予答復(fù)决乎。
首先队询,基于保密印章機(jī)制,沒(méi)有人能偽造他人身份進(jìn)行付款构诚,因?yàn)榫幋a生成器在打印編碼時(shí)會(huì)核對(duì)所有交易單的保密印章蚌斩,印章和付款人不一致會(huì)拒絕打印。
而且誠(chéng)實(shí)的礦工也不會(huì)承認(rèn)不合法的交易(如某筆交易付款方余額不夠)范嘱。
所以只有一種可能的攻擊行為送膳,即在收款人確認(rèn)收款后,從另一條分支上建立另外的交易單丑蛤,取消之前的付款叠聋,而將同一筆錢(qián)再次付款給另一個(gè)人(即所謂的double-spending問(wèn)題)。下面同樣用一個(gè)例子說(shuō)明這個(gè)問(wèn)題受裹。
先假設(shè)有一個(gè)攻擊者擁有10個(gè)比特幣碌补,他準(zhǔn)備將這筆錢(qián)同時(shí)支付給兩名受害者A和B,并都得到承認(rèn)棉饶。
第一步厦章,攻擊者準(zhǔn)備從受害者A手里買(mǎi)10比特幣的黃金,他簽署交易單給受害者A照藻,轉(zhuǎn)10個(gè)比特幣給受害者A袜啃。
第二步,這筆交易在最新的賬簿頁(yè)中被確認(rèn)岩梳,并被各個(gè)挖礦小組公告出來(lái)囊骤。受害人A看到公告晃择,確認(rèn)比特幣到賬冀值,給了攻擊者10個(gè)比特幣等值的黃金也物。
第三步,攻擊者找到賬簿列疗,從包含剛才交易的賬簿頁(yè)的前一頁(yè)做出一個(gè)分支滑蚯,生成更多的賬單頁(yè),超過(guò)剛才的分支抵栈。由于此時(shí)剛才攻擊者制造的分支變成了主干分支告材,而包含受害者A得到錢(qián)的分支變成了旁支,因此挖礦組織不再承認(rèn)剛才的轉(zhuǎn)賬古劲,受害者A得到的10比特幣被取消了斥赋。
第四步,攻擊者可以再次簽署交易單产艾,將同一筆錢(qián)支付給受害者B疤剑。受害者B確認(rèn)錢(qián)到賬后,支付給攻擊者等值黃金闷堡。
至此隘膘,攻擊者將10個(gè)比特幣花了兩次,從兩名受害者那里各購(gòu)得等值黃金杠览。攻擊者還可以如法炮制弯菊,取消與受害者B的轉(zhuǎn)賬,將同一筆錢(qián)再支付給其他人……
關(guān)于這種攻擊踱阿,中本聰給出的解決方案是管钳,建議收款人不要在公告掛出時(shí)立即確認(rèn)交易完成,而是應(yīng)該再看一段時(shí)間软舌,等待各個(gè)挖礦小組再掛出6張確認(rèn)賬簿才漆,并且之前的賬簿沒(méi)有被取消,才確認(rèn)錢(qián)已到賬葫隙。
中本聰解釋道栽烂,之前設(shè)定變態(tài)的編號(hào)規(guī)則,正是為了防御這一點(diǎn)恋脚。根據(jù)前面所述腺办,生成有效賬簿頁(yè)不是那么簡(jiǎn)單的,要花費(fèi)大量的人力反復(fù)試不同的幸運(yùn)數(shù)字糟描,而且過(guò)程完全是碰運(yùn)氣怀喉。如果某賬簿頁(yè)包含你收到錢(qián)的確認(rèn),并且在后面又延續(xù)了6個(gè)船响,那么攻擊者想要在落后6頁(yè)的情況下從另一個(gè)分支趕超當(dāng)前主分支是非常困難的躬拢,除非攻擊者擁有非常多的人力躲履,超過(guò)其他所有誠(chéng)實(shí)礦工的人力之和。
而且聊闯,如果攻擊者有如此多人力工猜,與其花這么大力氣搞這種攻擊,還不如做良民挖礦來(lái)的收益大菱蔬。這就從動(dòng)機(jī)上杜絕了攻擊的形成篷帅。
比特幣會(huì)一直增加下去,豈不是會(huì)嚴(yán)重通貨膨脹
中本聰說(shuō)拴泌,這一點(diǎn)我也想到了魏身。前面忘了說(shuō)了,我給礦工組織的操作細(xì)則手冊(cè)會(huì)說(shuō)明蚪腐,剛開(kāi)始我們協(xié)議每生成一頁(yè)賬簿箭昵,獎(jiǎng)勵(lì)小組50個(gè)比特幣,后面回季,每當(dāng)賬簿增加21,000頁(yè)家制,獎(jiǎng)勵(lì)就減半,例如當(dāng)達(dá)到210,000頁(yè)后茧跋,每生成一頁(yè)賬簿獎(jiǎng)勵(lì)25個(gè)比特幣慰丛,420,000頁(yè)后,每生成一頁(yè)獎(jiǎng)勵(lì)12.5個(gè)瘾杭,依次類(lèi)推诅病,等賬簿達(dá)到6,930,000頁(yè)后,新生成賬簿頁(yè)就沒(méi)有獎(jiǎng)勵(lì)了粥烁。此時(shí)比特幣全量約為21,000,000個(gè)贤笆,這就是比特幣的總量,所以不會(huì)無(wú)限增加下去讨阻。
沒(méi)有獎(jiǎng)勵(lì)后芥永,就沒(méi)人做礦工了,豈不是沒(méi)人幫忙確認(rèn)交易了
到時(shí)钝吮,礦工的收益會(huì)由挖礦所得變?yōu)槭杖∈掷m(xù)費(fèi)埋涧。例如,你在轉(zhuǎn)賬時(shí)可以指定其中1%作為手續(xù)費(fèi)支付給生成賬簿頁(yè)的小組奇瘦,各個(gè)小組會(huì)挑選手續(xù)費(fèi)高的交易單優(yōu)先確認(rèn)棘催。
礦工如果越來(lái)越多,比特幣生成速度會(huì)變快嗎
不會(huì)耳标。中本聰解釋?zhuān)m然可以任意加入和退出礦工組織双藕,導(dǎo)致礦工人數(shù)變化惭缰,每個(gè)礦工也會(huì)拿到一個(gè)編碼生成器理肺,不過(guò)我已經(jīng)在編碼生成器中加入了調(diào)控機(jī)制,當(dāng)前工作的編碼生成器越多阱飘,每個(gè)機(jī)器的效率就越低,保證新賬簿頁(yè)生成速率不變。
雖然每個(gè)人的代號(hào)是匿名的,但如果泄露了某個(gè)人的代號(hào)轴踱,賬簿又是公開(kāi)的,豈不是他的所有賬目都查出來(lái)了
確實(shí)是這樣的乡革。例如你要和某人交易寇僧,必然要要到他的代號(hào)才能填寫(xiě)交易單摊腋。因?yàn)槭湛钊艘粰谝钊肽侨说拇?hào)沸版。不過(guò)中本聰說(shuō)可以提供無(wú)限制的保密印章,建議每一次交易用不同的保密印章兴蒸,這樣查賬簿就追查不到同一個(gè)人的所有賬目了视粮。
答疑完畢。
說(shuō)明
本文用通俗比喻的方式講解了比特幣的運(yùn)行機(jī)制橙凳。有幾點(diǎn)需要說(shuō)明:
為了便于理解蕾殴,我做了很多簡(jiǎn)化,因此有些機(jī)制細(xì)節(jié)和實(shí)際的比特幣可能不完全相同岛啸。但總體思想和關(guān)鍵原理是一致的钓觉。
由于很多計(jì)算機(jī)世界的東西(如公鑰體系、網(wǎng)絡(luò)傳輸)在現(xiàn)實(shí)世界中并沒(méi)有特別好的對(duì)等物坚踩,所以故事里難免有一些生硬和不合常理的細(xì)節(jié)荡灾。
本文描述的是比特幣網(wǎng)絡(luò)本身的技術(shù)原理和運(yùn)作機(jī)制,當(dāng)在如Mtgox這種買(mǎi)賣(mài)市場(chǎng)中進(jìn)行比特幣交易時(shí)瞬铸,市場(chǎng)做了中間代理批幌,并不遵從上述機(jī)制。