Bitcoin source code 3 AppInit - killelder/cryptocurrency GitHub Wiki

初始化過程解析
main -> SetupEnvironment(設置環境) -> noui_connect(連接bitcoind信號處理對象)
-> AppInit(初始化) -> ParseParameters(參數解析) -> 參數處理
-> InitLogging(初始化Log) -> InitParameterInteraction(初始化參數)
-> AppInitBasicSetup(初始化基本上下文環境) -> AppInitSanityChecks(應用程序完整性檢查)
-> AppInitMain(應用程序運行主函數) -> WaitForShutdown(循環等待關閉信息)
-> Shutdown(關閉)

AppInitBasicSetup():註冊相應的消息以及處理方式。
AppInitParameterInteraction():設置區塊鏈運行設置區塊鏈運行參數,例如交易費等等。
AppInitSanityChecks():Sanity Check是用来檢查比特幣運行時需要的所有庫是否都運行正常。
AppInitMain():初始化主程序。
ShutDown():關閉所有後台進程並清理程序。

AppInitParameterInteraction

主要實現的功能是設置區塊鏈運行的一些參數
比特幣運行的本地環境中, 有四種數據的類型
raw block,從網路中接收的原始區塊信息, 對應文件為blk***.dat
undo data,在進行chain reorganization時使用的數據,對應文件為rev***.dat。
Chain reorganization是指某一個節點發現存在一條比當前本地維護更長的鏈
那麼該節點就需要進行Chain reorganization(Chain重組)
block index,區塊索引,每一個區塊都有一個唯一的索引,對應文件為~/.bitcoin/blocks/index下的.ldblevel db數據庫文件。
UTXO,Unspent transaction output,表示所有未花費的交易,對應文件為~/.bitcoin/chainstate/中的.ldb文件。