位元幣原始碼解析之初始化

2021-08-18 22:38:55 字數 3176 閱讀 6166

本文主要描述了程序啟動時節點位址、區塊資訊和錢包資訊的初始化(節點執行緒和礦工挖礦執行緒在後續「位元幣原始碼解析之執行緒處理」一文中介紹,孤立塊處理在後續「位元幣原始碼解讀之挖礦」一文中介紹)。

初始化流程圖如下所示:

(1)首先呼叫caddrdb類的loadaddresses()函式(同時caddrdb的建構函式預設開啟addr.dat檔案)。原始碼如下所示:

bool

loadaddresses

()

class

caddrdb

:public

cdb

...

...}

(2)判斷有沒有使用者自定義的位址資訊(資訊位於addr.txt中)。如果有自定義位址資訊,則獲取對應位址資訊,如果該位址不在mapaddresses中,則儲存到mapaddresses並且寫入addr.dat配置檔案中;否則將nservices資訊寫入addr.dat配置檔案中。

map

<

vector

<

unsigned

char

>,

caddress

>::

iterator

it =

mapaddresses

.find

(addr

.getkey

());

if

(it

==mapaddresses

.end

())

else

}

(3)從addr.dat檔案中匹配key為「addr」,從而獲取對應位址資訊,並插入到mapaddresses向量中。

loop

}

(1)首先呼叫ctxdb 類的loadblockindex()函式(同時ctxdb 的建構函式預設開啟blkindex.dat檔案)。如果開啟blkindex.dat失敗,則建立創世塊(創世塊的後續文章介紹)。

ctxdb

txdb

("cr"

);

if(!

txdb

.loadblockindex

())

return

false

;txdb

.close

();class

ctxdb

:public

cdb

...

...};

(3)從blkindex.dat檔案中匹配字元位「blockindex」的key值,進而獲取對應區塊索引資訊,如果mapblockindex中不存在該區塊,則插入mapblockindex中向量中。

loop

else

}

(4)如果該區塊是創世塊pindexgenesisblock,則儲存到創世塊索引pindexgenesisblock中

if

(pindexgenesisblock

==null

&&diskindex

.getblockhash

()==

hashgenesisblock

)pindexgenesisblock

=pindexnew

;(5)從配置檔案blkindex.dat中找到字元位「hashbestchain」的key值,取出索引儲存到最長鏈索引pindexbest中以及取出高度儲存到nbestheight 中。

if

(!readhashbestchain

(hashbestchain

))

if

(!mapblockindex

.count

(hashbestchain

))

return

error

("ctxdb::loadblockindex() : blockindex for hashbestchain not found\n"

);pindexbest

=mapblockindex

[hashbestchain

];nbestheight

=pindexbest

->

nheight

;(1)呼叫cwalletdb類的loadwallet()函式(同時cwalletdb的建構函式預設開啟wallet.dat檔案)。

vector

<

unsigned

char

>

vchdefaultkey

;if

(!cwalletdb

("cr"

).loadwallet

(vchdefaultkey

))

return

false

;class

cwalletdb

:public

cdb

}

(2)從wallet.dat檔案中

位元幣原始碼解讀之整體框架

位元幣原始碼解讀之執行緒處理-礦工執行緒

Tomcat原始碼之 初始化

1.首先設定catalina 的路徑和初始化classloader 2.利用反射模式啟動catalila catalila.load 的時候 初始化相應的容器 img catalila.start 啟動的時候,把相應的容器同事啟動 按從大到小依次啟動 先啟動server,在service,然後eng...

mybatis 原始碼分析之初始化

mybatis 的配置檔案解析又xmlconfigbuilder的parseconfiguration方法來完成,解析結果都存在configuration這個類中 private void parseconfiguration xnode root catch exception e 別名解析 pr...

SpringIOC 初始化原始碼解析

springioc容器的關鍵兩個主要的容器系列 寫了段簡單的 ioc容器的具體的過程都在這一句話上 後台很硬的 下面咱們就來看看ioc的後台是多麼的硬,加了斷點除錯了下,跳進去的第一步是 public throws bean ception 上面 的refresh 是ioc容器啟動的入口,後邊會牽扯...