bitcoind的LevelDB中塊密鑰內容的格式?
我正在嘗試使用 bitcoind 的 LevelDB 塊索引文件(儲存在 中
blocks/index
)來查找文件(例如blk00029.dat
)和特定塊的字節位置。感謝提問數據庫是乾什麼用的?以及區塊鏈 levelDB 中使用的鍵是什麼(即鍵:值對是什麼)?我知道在哪裡看,但是塊的數據庫鍵的內容讓我感到困惑。即使在原始碼的幫助下,我也無法弄清楚它的格式。
例如對於高度為 100,000 的塊,它位於數據庫鍵下
b\x06\xe53\xfd\x1a\xda\x869\x1f?l42\x04\xb0\xd2x\xd4\xaa\xec\x1c\x0b \xaa'\xba\x03\x00\x00\x00\x00\x00
(塊的雜湊字元串以小端順序轉換為字節),我得到以下內容,為了便於閱讀,我對這些內容進行了 hexlified:
87c628858c201d04009be99e5883d1e92c0100000050120119172a610421a6c3011dd330d9df07b63616c2cc1f1cd00200000000006657a9252aacd5c0b2940996ecff952228c3067cc38d4885efb5a4ac4247e9f337221b4d4c86041b0f2b5710
對於我從數據庫中獲取的每個塊,前 3 個字節 (
87c628
) 似乎都是相同的。我猜它是一些版本標識符?最後 80 個字節(或 160 個十六進製字元)是塊頭:
010000005 ... f2b5710
. 它們與您通過執行獲得的結果相匹配bitcoin-cli getblock 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506 false
。其餘的對我來說是個謎。我知道塊 100,000 有 4 筆交易,但保存該值的字節
4
具有129
塊 #1,它只有一個交易。我在哪裡可以找到有關 LevelDB 中塊鍵的格式的資訊?
難道每個密鑰的格式取決於序列化內容的 bitcoind 版本嗎?如果是這樣,我如何確定使用哪種格式?
這是 Bitcoin Core v0.15.1 原始碼片段,它定義了
CDiskBlockIndex
. 各個領域是:
- 編寫記錄的客戶端的 varint 版本號(用於將來的可擴展性)。這是
87c628
你看到的。- varint 塊高度。
- 帶有各種標誌的 varint 狀態。
- 確定塊中事務數的變數。
- 如果狀態欄位設置了第 8 位或第 16 位,則 varint 確定塊儲存在哪個文件(blk*.dat 和 rev*.dat)中。
- 如果狀態欄位設置了第 8 位,則 varint 確定塊開始所在的 blk*.dat 文件的偏移量。
- 如果狀態欄位設置了第 16 位,則 varint 確定塊的撤消數據開始所在的 rev*.dat 文件中的偏移量。
- 區塊頭