比特幣源碼第一版(BitCoin v0.01 ALPHA),是對照比特幣白皮書研究區塊鏈的最佳選擇,下載解壓後目錄結構如圖一所示。其中src爲源碼文件夾,bitcoin.exe爲可執行文件,在Win7x64環境下可直接運行(Win10環境下運行失敗,可通過源碼編譯運行)。
圖一 比特幣第一版源碼目錄結構
圖二 比特幣運行時系統目錄結構
準備兩臺連網機器,IP分別是:192.168.1.108和192.168.1.110,在110機器的運行目錄下新建addr.txt,輸入:192.168.1.108:8333,保存。首先在108機器上運行,然後在110機中運行,勾選Options菜單下的Generate Coins,運行結果見圖三和圖四。
圖三 192.168.1.108運行,挖礦成功5次
圖四 192.168.1.110運行,挖礦成功7次/5確認
從圖三和圖四下方的狀態欄可以看出,各有1個網絡連接、11個區塊,第6次纔開始確認區塊,120次確認成熟時間。
關於6次確認和120次Coinbase成熟時間(源碼中成熟時間爲100),下述爲轉載描述:
確認次數 = 當前區塊高度 - 交易所在區塊的高度
針對非Coninbase的交易:區塊的每一次確認都會增加上一個區塊被篡改的難度,6個區塊之後,交易被篡改的可能性幾乎爲0,所以有了“交易經過6次確認之後加入區塊鏈不可更改”的的說法。
針對Coinbase交易的100次確認:當一個塊成爲孤立塊時,它的所有有效交易被重新添加到排隊交易池中,並將被包括在另一個塊中。對於孤兒區塊的50BTC獎勵將丟失,這就是爲什麼Coinbase需要100次確認的原因。再具體些,塊鏈分叉會產生孤塊,並且這些塊中的挖掘回報丟失。這只是比特幣工作方式中不可避免的一部分,有時甚至當沒有人攻擊網絡時也會發生。如果沒有100區塊確認的成熟時間,那麼每當分叉時,非主鏈的孤塊上的交易全部會丟失,即使沒有任何形式的雙重花費或其他攻擊。在分叉鏈上,成千上萬的人可以發現錢包裏的硬幣不見了,即使沒有人真正攻擊他們,也沒有理由懷疑他們收到的錢。例如,假如沒有成熟時間,礦工可能將25BTC存入EWallet,如果我從同一個EWallet上完全不相關的賬戶中提取錢,那麼如果有分叉,我的提款可能就會消失,而且我不幸提取了礦工的Coinbase費用。由於這種污染傾向於“感染”交易,每個區塊的BTC遠遠超過25。每一個無效塊都會導致價值數百個比特幣的交易被逆轉。所以,有了成熟時間的設置,只要分叉不超過100塊,任何人都不可能像這樣意外丟失硬幣。如果分叉的壽命超過100個塊,那麼由無效交易引起的損壞很可能是一個巨大的災難。
再舉例說明:比如沒有成熟時間的限制,A區塊產生後,A中的挖礦交易UTXO可以在下一個區塊B中被使用,那麼區塊B中包含了區塊A中的a交易。
當某些原因出現分叉,B區塊成爲孤塊,這時應該將B中的有效交易添加到內存池,打包到新的區塊中。這時B中的a交易因爲引用了區塊A的Coinbase費用不能輕易重新打包到其他的塊中。因爲更換了區塊後,Coinbase交易就失效了。
對addr.dat、wallet.dat、blkindex.dat文件的解讀(BerkeleyDB UI)見如下幾圖:
對區塊文件blk0001.dat的解讀(BlockDataParser)如下:
工具下載: