Bitcoind
當比特幣守護程序切換到更長的鏈時,磁碟上的 .blk 文件會發生什麼?
我有興趣編寫一個程序,該程序將 (1) 解析我的全節點比特幣守護程序寫入磁碟的 .blk 文件,以及 (2) 以增量方式將它們寫入關係數據庫(即,跟踪其中的 .blk 文件)。 blk 文件,我已經看過以避免重複工作)。但是,當我的比特幣守護程序說“哦,另一個鏈比我們目前擁有的鏈更大,讓我們切換到它”時,這種方法似乎會導致問題。具體來說,我可以想像兩種可能性:
- 比特幣守護程序返回到現有的 .blk 文件並從舊鏈中刪除塊。如果發生這種情況,我的程序將需要跟踪磁碟上 .blk 文件的 mtime,並在 mtime 更改時覆蓋源自這些 .blk 文件的解析數據。
- 比特幣守護程序從不修改“完成的”.blk 文件(即,除了目前正在寫入的最新文件之外的塊文件),而是知道 .blk 文件中的某些塊可能對應於被拒絕的區塊鏈。如果是這種情況,我的程序將需要查詢守護程序以獲取此資訊並適當地更新目標數據庫。
這些可能性中的哪一個(如果有的話)是正確的?
第二個是正確的。這些
blk*.dat
文件只是附加的。一旦一個塊被下載並寫入磁碟,它就永遠不會被刪除(修剪時除外)。維護塊索引(數據庫)blocks/index
以跟踪磁碟上的塊位置和狀態(有效、無效等)。