主页 > imtoken安卓版 > 比特币 .dat 文件

比特币 .dat 文件

imtoken安卓版 2023-09-01 05:07:51

Bitcoin Core 的 ~/.bitcoin/blocks/ 目录中的 blk.dat 文件包含节点接收到的原始区块数据。这些数据文件构成了比特币区块链的基础。也是区块链数据分析获取比特币区块和交易数据的最有效方式。本文将介绍比特币区块数据文件的格式、数据结构和读取方法原理,并介绍三种常用的软件工具。

1、blk.dat 工作机制

Bitcoin Core 收到的每个区块都将被写入 blk.dat 文件。出于性能原因比特币数据存在哪里比特币数据存在哪里,不是将所有块写入单个巨型文件,而是将节点拆分为多个 blk*.dat 文件。

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

节点首先将接收到的块写入blk00000.dat,然后如果这个文件已满(大约128MB)它会写入Enter blk00001.dat,然后是blk00002.dat…和以此类推。

2、Blk.dat 文件内容示例

blk.dat 文件中的数据以二进制格式存储,节点接收到的新块将追加到文件末尾。我们可以看一下创世块的内容。读取 blk00000.dat:

的前 293 个字节

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

3、blk 文件结构

以上数据可分为五部分:

在这里插入图片描述

数据结构如下:

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

使用size字段分析上面的数据,我们知道读取整个block需要293个字节:size的二进制码是1d010000,处理如下:

转换字节顺序,得到0000011d,再转换成十进制,得到285

所以我们添加 4 个字节的魔法字节和 4 个字节的大小来得到这个块

字节数为293。

4、注意事项4.1 块不是按顺序下载的

如果您正在解析 blk.dat 文件,请记住块不一定按顺序排列。例如,当您处理文件时,您可能会依次读取以下块:

A B C E F D

这是因为比特币节点出于性能原因并行化下载块。

4.2 个 blk.dat 文件,最大 128MB

此限制在源代码中由宏 MAX_BLOCKFILE_SIZE 控制。

5、块文件阅读器

如前所述,blk.dat 文件中的数据是二进制编码的,所以如果你在这里打开文件,可能看不到太多有价值的信息。有几种工具可以帮助您。

5.1 od - 十六进制查看器

od 是一个简单的工具,可以将文件的内容导出为您选择的格式。例如:

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

地点:

od 通常内置于各种 linux 发行版中。

5.2 hexdump - hex和ascii查看工具

类似于od,但是hexdump可以显示数据的ascii文本,这对于快速查看信息会很方便。例如:

$ 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

地点:

也可以参考显示原始十六进制数据:

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

地点:

hexdump 通常内置于各种 linux 发行版中。

5.3 BlockETL - 将区块和交易数据加载到 SQL 数据库中

与前两个简单的工具不同,BlockETL 包是针对比特币区块链数据分析中的数据提取、转换和加载,也就是说,BlockETL 是更大的区块链数据分析生态系统中的基础工具,当你阅读比特币 blk 时.dat 文件来进一步分析数据,这个工具是最有价值的。

BlockETL的主要特点如下:

BlockETL 是一个 Java 应用程序和开发工具包,支持 Windows、OSX 和 Linux 等操作系统。配置好数据目录、数据库连接等基本信息并启动后,可以看到将blk文件中的区块和交易数据加载到SQL数据库的进度:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DHjyyiHZ-1575349860287)(bitcoin-blk-file/blocketl-screenshot.png)]

BlockETL 官网:.

原文链接:比特币数据文件格式及读取方法-汇智网络