
文章中給出一個虛擬的村莊叫“比特村”,整個文章會以講故事的方式,逐步告訴大家比特幣提出的動機、解決了什么問題以及一些關鍵組件的目標和設計方案。
上一篇文章了解比特幣比特幣的底層技術,接下來我們來講講礦工的角色。
礦工的工作是整個系統(tǒng)的核心,也是最復雜性最高的地方。下面逐步介紹礦工的工作內(nèi)容和目的。
礦工的工具
俗話說,工欲善其事,必先利其器。比特幣礦工雖然不用鐵撅、鐵锨和探照燈等工具,不過也要有一些必備的東西。
初始賬簿。每個組首先自己復制一份初始賬簿,初始賬簿只有一頁,記錄了系統(tǒng)的第一次贈送。
空賬簿紙。每個小組有若干賬簿紙,每一頁紙上僅有賬簿結(jié)構(gòu),沒有填內(nèi)容,具體內(nèi)容的書寫規(guī)則后面講述。下面是一張空賬簿紙的樣子,各個字段的意義后面會說到

編碼生成器(哈希函數(shù))。中本聰又向礦工組織的每個組分發(fā)了若干編碼生成器,這個東西很神奇,將一頁賬簿填好內(nèi)容的賬簿紙放入這個機器,機器會在賬簿紙的“本賬單編號”一欄自動打印一串由“0”和“1”組成的編號,共256個。最神奇的是,編號生成器有如下功能:
01
生成的編號僅與賬簿紙上填入的內(nèi)容有關,與填寫人、字體、填寫時間等因素均無關。
02
內(nèi)容相同的賬簿紙生成的編號總是相同,但是如果內(nèi)容哪怕只改一個字符,編號就會面目全非。
03
編碼生成器在打印編碼時還需要將所有填入賬簿紙的交易單放入,機器會掃描交易單和填入交易單的一致性,尤其是保密印章,如果發(fā)現(xiàn)保密印章和付款人不一致,會拒絕打印編碼。
04
將一張已打印的賬簿紙放入,機器會判定編號是否是有效的機器打印,并且判定編號和內(nèi)容是否一致,這個編號無法偽造。
05
交易單收件箱。每個礦工小組需要在門口掛一個箱子用于收集交易單。
06
公告板。每個礦工小組同樣需要一個公告板公示一些信息。
有了上面的工具,礦工組織就可以開工了!
收集交易單
中本聰規(guī)定,每筆交易的發(fā)起人,不但要將交易單給到收款人,還要同時復制若干份一模一樣的交易單投遞到每個礦工小組的收件箱里。
礦工小組的人定期到自己的收件箱里把收集到的交易單一并取出來。
填寫賬簿
此時小組的人拿出一張空的賬簿紙,把這些交易填寫到“交易清單”一欄,同時找到當前賬簿最后一頁,將最后一頁的編號抄寫到“上一張賬單編號一欄”。 注意還有個“幸運數(shù)字”,可以隨便填上一個數(shù)字,如12345。然后,將這樣賬簿紙放入編號生成器,打印好編號,一張賬簿就算完成了。
如果你以為礦工的工作就這么簡單,那就大錯特錯了,中本聰有個變態(tài)的規(guī)定:只有編號的前10個數(shù)均為0,這頁賬簿紙才算有效。
根據(jù)之前對編號生成器的描述,要修改編號,只能修改賬簿紙的內(nèi)容,而“交易清單”和“上一張賬簿紙編號”是不能隨便改的,那么只能改幸運數(shù)字了。于是為了生成有效的賬簿紙,小組里的礦工就不斷抄寫賬簿紙,但每張紙的幸運數(shù)字都不同,然后不斷的重復將紙放入編碼器,如果生成的編號不符合規(guī)定,這張紙就算廢了,重復這個過程直到生成一串有效的編號。
我們知道,如果編號的每一個數(shù)字都是隨機的,那么平均寫1000多張幸運數(shù)字不同的紙才能獲得一個有效的編號。
這就奇怪了,這些礦工為什么要拼命干這看似無意義的事情呢?還記得之前說過礦工有報酬吧,這就是礦工的動力了。中本聰規(guī)定:每一張賬簿紙的交易清單第一條交易為“系統(tǒng)給這個小組支付50個比特幣”。也就是說,如果你生成了一張有意義的賬簿紙,并且被所有挖礦小組接受了,那么就意味著這條交易也被接受了,你的挖礦小組獲得了50個比特幣。
這就是礦工被叫做礦工的原因,也是為什么之前說隨著交易和礦工的活動,比特幣的數(shù)量會不斷增多。例如下面是一個挖礦過程,這個小組的公共比特幣帳號為“UVWXYZ”。

在幸運數(shù)字嘗試到“533”時,系統(tǒng)生成了一頁有效賬簿。
確認賬簿
當某挖礦小組幸運的生成了一張有意義的賬簿,為了得到獎勵,必須立刻請其它小組確認自己的工作。前面說過,當前村里有7個挖礦組,所以這個小組必須將有效賬簿紙謄抄6份快馬加鞭送到其他6個小組請求確認。
中本聰規(guī)定,當某個小組接到其他小組送來的賬簿紙時,必須立即停下手里的挖礦工作進行賬簿確認。
需要確認的信息有三個:
賬簿的編號有效
賬簿的前一頁賬簿有效
交易清單有效
首先看第一個,這個確認比較簡單。只要將送來的賬簿紙放入編碼生成器進行驗證,如果驗證通過,則編號有效。
第二部分需要將賬簿頁上的“上一頁賬簿紙編號”和這個小組目前保存的有效賬簿最后一頁編號比對,如果相同則確認,如果不同,需要順著已有賬簿向前比對,直到找到這個編號的頁。如果沒有找到指定的“上一頁賬簿紙編號”對應的頁,這個小組會將此頁丟掉。不予確認。
注意,由上面的機制可以保證,如果各個小組手里的賬簿紙是相同的,那么他們都能按同樣的順序裝訂成相同的賬簿。因為后面一張紙的編號總是依賴前面的紙的編號,編碼生成器的機制保證了所有合法賬簿紙的相對先后順序在每個小組那里都是相同的(可能會有分支,但不會出現(xiàn)環(huán),后面細講)。
最后是如何確認交易清單有效,其實也就是要確認當前每筆交易的付款人有足夠的余額支付這筆錢。由于交易信息里包含這筆錢是如何來的,還包含了記錄來源交易的賬單編號。例如,HIJKLMN要給ABCDEFG10個比特幣,并注明了這10個比特幣來自之前OPQRST支付給HIJKLMN的一筆交易,確認時首先要確認之前這筆交易是否存在,同時還要檢查HIJKLMN在這之前沒有將這10個比特幣支付給別人。這一切確認后,這筆交易有效性就被確認了。
其中第一筆是系統(tǒng)獎勵給生成這頁賬簿的小組的50個,這筆交易大家都默認承認,后面的只要按照上述方法追溯,就可以確認HIJKLMN是否當前真有10個比特幣支付給ABCDEFG。
如果完成了所有了上述驗證并全部通過,這個小組就認可了上述賬簿紙有效,然后將這張賬簿紙并入小組的主賬簿,舍棄目前正在進行的工作,后面的挖礦工作會基于這本更新后的主賬本進行。
賬簿確認反饋
對于挖礦小組來說,當賬簿紙送出去后,如果后面有收到其他小組送來的賬簿紙,其“上一頁賬簿紙編號”為自己之前送出去的賬簿紙,那么就表示他們的工作成功被其他小組認可了,因為已經(jīng)有小組基于他們的賬簿紙繼續(xù)工作了。此時,可以粗略的說可以認為已經(jīng)得到了50個比特幣。
另外,任何一個小組當新生成有效賬簿紙或確認了別的小組的賬簿紙時,就將最新被這個小組承認的交易寫到公告牌上,那么收款人只要發(fā)現(xiàn)相關交易被各個小組認可了,基本就可以認為這筆錢已經(jīng)到了自己的賬上,后面他就可以在付款時將錢的來源指向這筆交易了。
以上就是整個比特幣的支付體系。下面我們來分析一下,這個體系為什么可以工作下去,以及這個體系可能面臨的風險。
雖然上面闡述了比特幣的基本運作規(guī)則,但是村民們還是有不少疑問。所以中本聰同學專門開了個答疑會,解答常見問題。敬等下期......
原文轉(zhuǎn)載自張洋的博客