比特幣的blockchain-1
blockchain是個新造詞,至少在2008年之前網上是搜尋不到這個詞的;
比特幣的白皮書裡面出現過chain of blocks
的描述,但是沒有直接用block chain
的句子;
在早期bitcointalk.org上面的討論中,為了方便討論,早期參與者頻繁引用chain of blocks
的主題,但是誰是最早的引用者,已不可考據。
如果真正要較真blockchain這個單詞第一次出現的地方,我想大概是中本聰的第一版bitcoin 原始碼中;
bitcoin v0.01原始碼中,中本聰第一次在函式註釋中
完整的引用了block chain
這個術語,鑑於中本聰在比特幣白皮書發表的2年前已經開始編寫原始碼;所以有理由確認:
- blockchain這個名詞是2007-2008年間誕生於世間的
- 中本聰是比特幣之父,比特幣是blockchain之母
現在有一種說法,是比特幣和區塊鏈是不同的,比特幣是個沒有什麼前途的龐氏貨幣,而區塊鏈作為一種新興的基礎技術將會在很多領域發揚光大,前景光明;
對於這個說法,我認為Andreas的一場演講值得一看:
https://www.youtube.com/watch?v=SMEOKDVXlUo
好了,八卦完畢,我們開始探究比特幣裡面的blockchain究竟是個什麼樣的技術,它是解決什麼問題的,實現細節是怎樣的;
然後我們一貫的風格是:光說不練假把式
;在原理說明中,我們會用程式碼parse真正的比特幣區塊鏈檔案來一探究竟。
由來
還記得我們之前的文章裡面提到的,如果要建立一個分散式的賬本,要解決兩個問題:
- 什麼樣的交易是一筆合法的交易
- 哪個節點有記賬的權力,如何保證整個賬本是唯一且不可篡改的
我們在比特幣交易的系列文章中解答了第一個問題,現在是解決第二個問題的時候了。
先思考一下貨幣發行的問題,比特幣網路中,會有成千上萬的節點參與者,哪些節點能獲得發幣的權利呢?或者說,憑什麼這些節點能發幣呢?
人們在金銀貨幣大行其道的時代,發幣是通過開採金礦來實現的;採礦者承擔了勘探、挖掘的風險,大家認可其開採成果並承認其鑄幣權;那麼對映到電子世界中,能不能有一種類似的挖礦的機制呢?
中本聰的回答就是POW (proof of work—工作量證明);全網的所有節點一起算一個毫無意義的隨機數字,這個數字滿足以下的條件,凡是能算出這個數字的人,我們就承認他有一次的記賬權:即一次鑄幣的權利;這個條件如下:
在一個計算週期內,計算出來的這個數字R滿足 F(Chain, R) < Diffculty;其中F是SHA256演算法,Chain是賬本,Diffculty是不斷減小的,這意味著尋找R的機率會越來越小
中本聰認為算力是非常公平的、不可偽造的一種證明手段;凡是能在規定週期內正確解答謎題的人,理應獲得回報;所有加入到這個比特幣網路的人,都應該承認這一點,如果你不承認,那比特幣網路就不歡迎你;
那麼,鑄幣的問題解決了;但是如何防止有的節點獲取記賬權之後,偽造賬本呢?
答案是將POW的計算結果嵌入到賬本中,每一次新週期的計算,其結果必須在之前所有計算結果的基礎上完成;這樣如果有人想要偽造賬本,他就必須在一個計算週期內偽造更多的賬目;如果想要偽造整個賬本,就需要將比特幣創世之初的所有POW重新計算一遍,而能夠獲得這樣的算力,基本上是不可能的。
那麼,如何將這個計算證明過程嵌入到賬本里面呢?
答案就是每個計算週期生成一個block,這個block包含了這個週期內全網的交易,然後將block用HASH值作為指標串聯起來,構造成一條堅不可摧的chain;這就是blockchain的由來。
區塊結構
如果你執行bitcond,會發現在資料目錄有四類檔案: