? ? ? 上次在ubuntu系統(tǒng)中將比特處源碼編譯環(huán)境設(shè)置好了后察皇,還沒有具體分析里面的代碼,今天我們就解讀一下泽台。源碼版本是bitcoin-0.9.5rc2什荣。
? ? 我們說驗證比特幣客戶端安裝成功就是從 which bitcoind 這個命令進(jìn)行驗證的,因為比特幣客戶端有兩個怀酷。一個是圖形界面的版本稻爬,通常被稱為 Bitcoin(首字母大寫),以及一個簡潔命令行的版本(稱為 bitcoind)蜕依。
我們就從bitcoind這個命令行入手桅锄,因為這個里面代碼少,感覺簡單點(嘿嘿)样眠。我在源碼的src目錄下發(fā)現(xiàn)了bitcoind.cpp文件友瘤。但沒發(fā)現(xiàn)bitcoind.h文件,我也不知道為什么檐束。但是沒影響我們看代碼辫秧。
一個C++程序的入口是從main()函數(shù)執(zhí)行的。我們也從這里看起厢塘。
代碼很簡單我們就逐行分析下茶没。
一。SetupEnvironment函數(shù)定義在src/util.cpp中晚碾。
這個函數(shù)設(shè)置了本地運(yùn)行環(huán)境抓半。此函數(shù)的作用是根據(jù)不同國家設(shè)置不同的編碼,用于國際化的格嘁。
二笛求。noui_connect
連接bitcoind客戶端的信號處理程序。我的理解是這個信號處理程序就是偵聽程序的各種消息包括異常消息,也可能是硬件的異常消息或程序的普通信號消息探入。
三狡孔。AppInit()
應(yīng)用程序初始化,其實這里面包括了很多東西
1蜂嗽。ParseParameters()//解析運(yùn)行輸入的參數(shù)并將參數(shù)放入mapArgs; mapMultiArgs;這兩個map對象中苗膝。
2。判斷數(shù)據(jù)目錄是否存在并讀取配置文件參數(shù)指定的配置文件
3植旧。判斷參數(shù)testnet regtest參數(shù)的合法性和是否輸入了--help或-?獲取幫助信息的參數(shù)辱揭。
4。根據(jù)輸入?yún)?shù)得到相應(yīng)結(jié)果并組合的json數(shù)據(jù)格式打印輸出 病附。
5问窃。根據(jù)輸入?yún)?shù)進(jìn)行相應(yīng)的設(shè)置(AppInit2)并開啟一個新線程,始終偵聽退出程序的消息完沪。
這就是bitcoind.cpp里面的代碼內(nèi)容域庇,分析的可能不太準(zhǔn)確僅供參考,也可能在以后的閱讀中會發(fā)現(xiàn)其中的錯誤覆积。我們先主要了解里面的工作流程和大概框架听皿。
我繪制了個流程圖來說明一下客戶端的工作原理。流程圖如下:
作者:區(qū)塊鏈研習(xí)社比特幣源碼研讀班技健,black