溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

比特幣blk.dat文件格式及讀取工具是什么

發(fā)布時(shí)間:2021-12-29 14:37:15 來(lái)源:億速云 閱讀:542 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要講解了“比特幣blk.dat文件格式及讀取工具是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“比特幣blk.dat文件格式及讀取工具是什么”吧!

比特幣節(jié)點(diǎn)(Bitcoin Core)的~/.bitcoin/blocks/目錄中的blk.dat 文件中包含了節(jié)點(diǎn)接收到的原始區(qū)塊數(shù)據(jù),這些數(shù)據(jù)文件構(gòu)成了比特幣區(qū)塊鏈的基礎(chǔ),同時(shí)也是區(qū)塊鏈數(shù)據(jù)分析獲取比特幣區(qū)塊和交易數(shù)據(jù)的最高效的途徑。

1、blk.dat工作機(jī)制

比特幣節(jié)點(diǎn)(Bitcoin Core)接收到的每個(gè)區(qū)塊都會(huì)寫(xiě)入一個(gè)blk.dat文件。出于性能考慮,節(jié)點(diǎn)不會(huì)把所有區(qū)塊寫(xiě)入單一巨型文件,而是拆分為多個(gè)blk*.dat文件。

~/.bitcoin/blocks
blk00000.dat
blk00001.dat
blk00002.dat
…

節(jié)點(diǎn)首先將收到的區(qū)塊寫(xiě)入blk00000.dat,然后如果這個(gè)文件滿了(大約128MB)就會(huì)寫(xiě)入blk00001.dat,然后是blk00002.dat...,依次類推。

2、blk.dat文件內(nèi)容示例

在blk.dat文件中的數(shù)據(jù)以二進(jìn)制格式存儲(chǔ),節(jié)點(diǎn)收到的新區(qū)塊會(huì)追加到文件末尾。我們可以看一下創(chuàng)世區(qū)塊的內(nèi)容。讀取blk00000.dat的開(kāi)頭293個(gè)字節(jié):

f9beb4d91d01000001000000000000000000000000000000000000000000000000 
00000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a
51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000
000000000000000000000000000000000000000000000000000000ffffffff4d04
ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e
63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f7574
20666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548
271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4
f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

3、blk文件結(jié)構(gòu)

上面的數(shù)據(jù)可以分為五個(gè)部分:

比特幣blk.dat文件格式及讀取工具是什么

  • magic bytes(魔術(shù)字節(jié))和size(數(shù)據(jù)尺寸)可以用來(lái)找出來(lái)每個(gè)區(qū)塊的起止位置

  • block header(區(qū)塊頭)包含了區(qū)塊的頭部信息

  • tx count 表示區(qū)塊中的交易數(shù)量,后面的transaction data部分就是逐條交易的數(shù)據(jù)

數(shù)據(jù)結(jié)構(gòu)如下:

[ magic bytes ][    size     ][   block header ][  tx count  ][  transaction data  ]
 <- 4 bytes ->  <- 4 bytes ->  <- 80 bytes   ->  <- varint ->  <- remainder      ->

利用size字段分析上面的數(shù)據(jù),我們就知道要讀取整個(gè)區(qū)塊需要293個(gè)字節(jié):size的二進(jìn)制編碼為1d010000,按如下步驟進(jìn)行處理:

  1. 轉(zhuǎn)換字節(jié)順序,得到0000011d

  2. 轉(zhuǎn)換為10進(jìn)制,得到285

因此我們?cè)偌由蟤agic bytes的4個(gè)字節(jié)和size的4個(gè)字節(jié),就得到了這個(gè)區(qū)塊 的字節(jié)數(shù)為293。

4、注意事項(xiàng)

4.1 區(qū)塊不是按順序下載

如果你在解析blk.dat文件,一定要記得區(qū)塊不一定是按先后順序排列的。例如在你處理文件時(shí)可能會(huì)讀到以下順序排列的區(qū)塊:

A B C E F D

這是因?yàn)槌鲇谛阅艿目紤],比特幣節(jié)點(diǎn)是并行下載區(qū)塊的。

4.2 blk.dat文件最大128MB

這個(gè)限制是在源代碼中由宏MAX_BLOCKFILE_SIZE控制的。

5、區(qū)塊文件讀取工具

正如之前所言,blk.dat文件中的數(shù)據(jù)是二進(jìn)制編碼的,因此如果你直接在文本編輯器里打開(kāi)文件,可能看不出來(lái)太多有價(jià)值的信息。有幾個(gè)工具可以幫助你。

5.1 od - 16進(jìn)制查看工具

od是一個(gè)簡(jiǎn)單的工具,它將文件內(nèi)容導(dǎo)出為你選擇的格式。例如:

od -x --endian=big -N 293 -An blk00000.dat

其中:

  • -x: 顯示為16進(jìn)制

  • --endian=big: 按big endian順序顯示字節(jié)

  • -N 293 : 聲明要讀取的字節(jié)數(shù)

  • -An:不顯示文件偏移量

od通常內(nèi)置于各種linux發(fā)行版中。

5.2 hexdump - 16進(jìn)制及ascii查看工具

類似于od,不過(guò)hexdump可以顯示數(shù)據(jù)的ascii文本,這對(duì)于快速查看交易中包含的信息會(huì)很方便。例如:

$ hexdump -C -s 8 -n 285 blk00000.dat

00000008  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000018  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000028  00 00 00 00 3b a3 ed fd  7a 7b 12 b2 7a c7 2c 3e  |....;...z{..z.,>|
00000038  67 76 8f 61 7f c8 1b c3  88 8a 51 32 3a 9f b8 aa  |gv.a......Q2:...|
00000048  4b 1e 5e 4a 29 ab 5f 49  ff ff 00 1d 1d ac 2b 7c  |K.^J}._I......+||
00000058  01 01 00 00 00 01 00 00  00 00 00 00 00 00 00 00  |................|
00000068  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000078  00 00 00 00 00 00 ff ff  ff ff 4d 04 ff ff 00 1d  |..........M.....|
00000088  01 04 45 54 68 65 20 54  69 6d 65 73 20 30 33 2f  |..EThe Times 03/|
00000098  4a 61 6e 2f 32 30 30 39  20 43 68 61 6e 63 65 6c  |Jan/2009 Chancel|
000000a8  6c 6f 72 20 6f 6e 20 62  72 69 6e 6b 20 6f 66 20  |lor on brink of |
000000b8  73 65 63 6f 6e 64 20 62  61 69 6c 6f 75 74 20 66  |second bailout f|
000000c8  6f 72 20 62 61 6e 6b 73  ff ff ff ff 01 00 f2 05  |or banks........|
000000d8  2a 01 00 00 00 43 41 04  67 8a fd b0 fe 55 48 27  |*....CA.g....UH'|
000000e8  19 67 f1 a6 71 30 b7 10  5c d6 a8 28 e0 39 09 a6  |.g..q0..\..(.9..|
000000f8  79 62 e0 ea 1f 61 de b6  49 f6 bc 3f 4c ef 38 c4  |yb...a..I..?L.8.|
00000108  f3 55 04 e5 1e c1 12 de  5c 38 4d f7 ba 0b 8d 57  |.U......\8M....W|
00000118  8a 4c 70 2b 6b f1 1d 5f  ac 00 00 00 00           |.Lp+k.._.....|)
0000125

其中:

  • -C:顯示字節(jié)及ascii文本

  • -s:聲明要顯示數(shù)據(jù)的偏移位置

  • -n:聲明要讀取的字節(jié)數(shù)

也可以指顯示原始的16進(jìn)制數(shù)據(jù):

$ hexdump -C -s 8 -n 285 blk00000.dat | cut -c 11-58 | tr '\n' ' ' | tr -d ' '

其中:

  • cut -c 11-58 :僅保留每行的11到58列

  • tr '\n' ' ' :將換行翻譯為空格

  • tr -d ' ' :刪除所有空格

hexdump通常內(nèi)置于各種linux發(fā)行版中。

5.3 BlockETL - 將區(qū)塊及交易數(shù)據(jù)加載到SQL數(shù)據(jù)庫(kù)

與前兩種簡(jiǎn)單工具不同,BlockETL軟件包用于比特幣區(qū)塊鏈數(shù)據(jù)分析中的數(shù)據(jù)抽取、轉(zhuǎn)換和加載,也就是說(shuō),BlockETL是更大的區(qū)塊鏈數(shù)據(jù)分析生態(tài)中的一個(gè)基礎(chǔ)工具,當(dāng)你讀取比特幣blk.dat文件的目的是要進(jìn)一步分析數(shù)據(jù)時(shí),這個(gè)工具最有價(jià)值。

BlockETL的主要特性如下:

  • 直接讀取原始區(qū)塊文件,抽取速度快

  • 將原始區(qū)塊和交易數(shù)據(jù)加載至SQL數(shù)據(jù)庫(kù),便于后續(xù)的區(qū)塊鏈數(shù)據(jù)分析

  • 支持多流水線并行處理,可自己控制并發(fā)流水線數(shù)量

  • 結(jié)構(gòu)設(shè)計(jì)清晰,代碼便于擴(kuò)展

BlockETL是一個(gè)Java應(yīng)用,同時(shí)也是一個(gè)開(kāi)發(fā)包,支持Windows、OSX和Linux等多種操作系統(tǒng)。配置數(shù)據(jù)目錄、數(shù)據(jù)庫(kù)連接等基本信息并啟動(dòng)后,就可以看到將blk文件中的區(qū)塊和交易數(shù)據(jù)加載到SQL數(shù)據(jù)庫(kù)的進(jìn)度了:

比特幣blk.dat文件格式及讀取工具是什么 

感謝各位的閱讀,以上就是“比特幣blk.dat文件格式及讀取工具是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)比特幣blk.dat文件格式及讀取工具是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI