? ? ? 上次在ubuntu系統(tǒng)中將比特處源碼編譯環(huán)境設(shè)置好了后,還沒(méi)有具體分析里面的代碼,今天我們就解讀一下。源碼版本是bitcoin-0.9.5rc2。
? ? 我們說(shuō)驗(yàn)證比特幣客戶端安裝成功就是從 which bitcoind 這個(gè)命令進(jìn)行驗(yàn)證的,因?yàn)楸忍貛趴蛻舳擞袃蓚€(gè)。一個(gè)是圖形界面的版本,通常被稱(chēng)為 Bitcoin(首字母大寫(xiě)),以及一個(gè)簡(jiǎn)潔命令行的版本(稱(chēng)為 bitcoind)。
我們就從bitcoind這個(gè)命令行入手,因?yàn)檫@個(gè)里面代碼少,感覺(jué)簡(jiǎn)單點(diǎn)(嘿嘿)。我在源碼的src目錄下發(fā)現(xiàn)了bitcoind.cpp文件。但沒(méi)發(fā)現(xiàn)bitcoind.h文件,我也不知道為什么。但是沒(méi)影響我們看代碼。
一個(gè)C++程序的入口是從main()函數(shù)執(zhí)行的。我們也從這里看起。

代碼很簡(jiǎn)單我們就逐行分析下。
一。SetupEnvironment函數(shù)定義在src/util.cpp中。

這個(gè)函數(shù)設(shè)置了本地運(yùn)行環(huán)境。此函數(shù)的作用是根據(jù)不同國(guó)家設(shè)置不同的編碼,用于國(guó)際化的。
二。noui_connect
連接bitcoind客戶端的信號(hào)處理程序。我的理解是這個(gè)信號(hào)處理程序就是偵聽(tīng)程序的各種消息包括異常消息,也可能是硬件的異常消息或程序的普通信號(hào)消息。
三。AppInit()
應(yīng)用程序初始化,其實(shí)這里面包括了很多東西
1。ParseParameters()//解析運(yùn)行輸入的參數(shù)并將參數(shù)放入mapArgs; mapMultiArgs;這兩個(gè)map對(duì)象中。
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)并開(kāi)啟一個(gè)新線程,始終偵聽(tīng)退出程序的消息。

這就是bitcoind.cpp里面的代碼內(nèi)容,分析的可能不太準(zhǔn)確僅供參考,也可能在以后的閱讀中會(huì)發(fā)現(xiàn)其中的錯(cuò)誤。我們先主要了解里面的工作流程和大概框架。
我繪制了個(gè)流程圖來(lái)說(shuō)明一下客戶端的工作原理。流程圖如下:

作者:區(qū)塊鏈研習(xí)社比特幣源碼研讀班,black