比特幣源碼研讀之一

本人15年畢業(yè)后一直從事Java電商平臺的開發(fā)工作,2017年4月開始接觸區(qū)塊鏈技術(shù),隨后慢慢自學(xué)了《精通比特幣》,談?wù)剠^(qū)塊鏈,以太坊,Solidity等相關(guān)內(nèi)容。前不久開始閱讀bitcoin的源碼,在網(wǎng)上找資料的過程中,發(fā)現(xiàn)并加入了區(qū)塊鏈研習(xí)社。隨后在編譯比特幣源碼的過程中與菜菜子進行了一系列的技術(shù)交流。剛好比特幣源碼班二期開班,隨后報名加入該班級,開啟了比特幣源碼的研讀之旅。源碼的閱讀相對枯燥無味,希望自己能在堅持下去。好了,廢話不多說,Let’s get started.

本系列文章基于bitcoin-0.15, 下載地址: https://github.com/bitcoin/bitcoin. 我們先從宏觀上看下源碼的目錄結(jié)構(gòu)以及數(shù)據(jù)目錄的結(jié)構(gòu)。項目源碼的目錄結(jié)構(gòu)如下:

接下來我們簡要分析下src目錄下幾個關(guān)鍵的模塊,后續(xù)隨著我們對源碼的不斷研究將詳細分析各個模塊的內(nèi)容。

./:網(wǎng)絡(luò)處理模塊,塊的產(chǎn)生,初始化模塊,鏈的操作模塊等

compact:處理文件兼容性相關(guān)的細節(jié),較為low level

consensus:交易/塊的驗證,merkle tree相關(guān)的計算,一些共識參數(shù)的定義

crypto:加密HASH函數(shù),SHA256、RIPEMD160等

leveldb:bitcoin使用level db存儲block、tx、utxo等內(nèi)容(文章后面有相關(guān)描述)https://github.com/google/leveldb

policy:與consensus相反,用戶可以根據(jù)自身的需求定義不同的policy,例如是否轉(zhuǎn)發(fā)大小為100k以上的交易等

primitives:塊和交易相關(guān)的基本數(shù)據(jù)類型定義

qt:桌面客戶端源程序

rpc:遠程過程調(diào)用接口的相關(guān)實現(xiàn)

script:腳本引擎,定義了操作碼,交易簽名的生成與驗證等

secp256k1:橢圓曲線函數(shù)庫

univalue:univalue庫https://github.com/jgarzik/univalue

wallet:錢包相關(guān)操作,地址的管理,交易的生成等

zmq:zmq是一個高性能的異步消息庫

接下來,我們來看一下數(shù)據(jù)目錄結(jié)構(gòu)并簡要分析下一些主要的文件:

? blocks/blk*.dat:所有的區(qū)塊數(shù)據(jù),這部分數(shù)據(jù)只有在錢包需要重新掃描丟失的交易,重組鏈以及向其他節(jié)點提供區(qū)塊數(shù)據(jù)等情況時被使用。

? blocks/rev*.dat:這些文件可以理解為“撤銷”(undo)文件。區(qū)塊鏈在某一種程度上可以看做是一個狀態(tài)機,每一種狀態(tài)我們叫做chain state(UTXOs),每當(dāng)接收到了一個塊,經(jīng)過一系列的處理(狀態(tài)轉(zhuǎn)換函數(shù))變成了另一個chain state。所以我們可以把一個塊當(dāng)作是某個chain state的一個補?。╬atch),同時把這些“撤銷”文件當(dāng)作是回退(reverse)操作的patch。當(dāng)發(fā)生區(qū)塊鏈重組(reorganization)的時候,這些數(shù)據(jù)可以方便快捷的回滾chain state.

? blocks/index/*:該目錄下是level db的存儲文件,記錄了該節(jié)點上所有塊的元數(shù)據(jù)信息以及怎樣在磁盤中找到塊的具體數(shù)據(jù)。如果沒有這部分數(shù)據(jù),查找一個塊將會非常的慢。

? chainstate/*:該目錄下是UTXO的level db存儲文件以及相關(guān)的一些meta信息,可以用于驗證塊和交易的有效性。這部分數(shù)據(jù)也可以通過參數(shù)-reindex根據(jù)blocks重新生成。如果沒有這部分數(shù)據(jù),需要掃描所有的塊進行區(qū)塊和交易的驗證將會非常耗時。

? wallet.data:最為重要的錢包文件,該文件中存儲著錢包中所有的密鑰信息。我們常說的備份bitcoin core錢包,就是備份該文件。只要有了該文件,把文件放到對應(yīng)的錢包數(shù)據(jù)目錄下,你可以在任何其他任何bitcoin core節(jié)點操作你的錢包。

? debug.log:該文件記錄的程序運行的各種提示信息。在遇到問題時,可以通過查看該文件獲得具體的信息提示。啟動bitcoind時,可以通過參數(shù)-debug設(shè)置日志級別。

本篇文章簡要分析了比特幣源碼的目錄結(jié)構(gòu)以及數(shù)據(jù)存儲目錄結(jié)構(gòu),接下來的文章我們將進入源碼的閱讀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這次跟大家講一個比較長的故事,可能會分幾個篇章講完,如果對我的故事感興趣的人,可以繼續(xù)關(guān)注后面幾篇故事,也可以私信...
    ami啾啾閱讀 288評論 0 0
  • 11-29 每日打卡 【三件事】1. 得到訂閱精讀兩個小時。2. 平臺的繼續(xù)熟悉,尋找一種更便捷的方法,一周后把相...
    純簡之佳閱讀 215評論 0 1
  • 天貓精靈X1官方團隊宣布天貓超級會員將于8月8日首先體驗產(chǎn)品。截止到8月8日10點,超級會員可在天貓精靈官方旗艦店...
    摩爾金融閱讀 311評論 0 0
  • 來滬4月有余,我習(xí)慣了每天上下班的地鐵線路。在上海地鐵,我遭遇過小偷,也遇到過穿粉色波點襯衫的變態(tài)...... 第...
    吃草姑娘閱讀 756評論 6 2
  • 一 炎熱的夏天,蟬不知躲在何處小聲地叫著。聲音斷斷續(xù)續(xù),漫長而悠揚。 三水躺在鋪著涼席的床上,翻來覆去睡不著,耳機...
    離尹閱讀 1,188評論 0 6

友情鏈接更多精彩內(nèi)容