千家信息网

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

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,这篇文章主要讲解了"比特币blk.dat文件格式及读取工具是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"比特币blk.dat文件格式及读取工具是
千家信息网最后更新 2024年09月23日比特币blk.dat文件格式及读取工具是什么

这篇文章主要讲解了"比特币blk.dat文件格式及读取工具是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"比特币blk.dat文件格式及读取工具是什么"吧!

比特币节点(Bitcoin Core)的~/.bitcoin/blocks/目录中的blk.dat 文件中包含了节点接收到的原始区块数据,这些数据文件构成了比特币区块链的基础,同时也是区块链数据分析获取比特币区块和交易数据的最高效的途径。

1、blk.dat工作机制

比特币节点(Bitcoin Core)接收到的每个区块都会写入一个blk.dat文件。出于性能考虑,节点不会把所有区块写入单一巨型文件,而是拆分为多个blk*.dat文件。

~/.bitcoin/blocksblk00000.datblk00001.datblk00002.dat…

节点首先将收到的区块写入blk00000.dat,然后如果这个文件满了(大约128MB)就会写入blk00001.dat,然后是blk00002.dat...,依次类推。

2、blk.dat文件内容示例

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

f9beb4d91d01000001000000000000000000000000000000000000000000000000 00000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

3、blk文件结构

上面的数据可以分为五个部分:

  • magic bytes(魔术字节)和size(数据尺寸)可以用来找出来每个区块的起止位置

  • block header(区块头)包含了区块的头部信息

  • tx count 表示区块中的交易数量,后面的transaction data部分就是逐条交易的数据

数据结构如下:

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

利用size字段分析上面的数据,我们就知道要读取整个区块需要293个字节:size的二进制编码为1d010000,按如下步骤进行处理:

  1. 转换字节顺序,得到0000011d

  2. 转换为10进制,得到285

因此我们再加上magic bytes的4个字节和size的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 - 16进制查看工具

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

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

其中:

  • -x: 显示为16进制

  • --endian=big: 按big endian顺序显示字节

  • -N 293 : 声明要读取的字节数

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

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

5.2 hexdump - 16进制及ascii查看工具

类似于od,不过hexdump可以显示数据的ascii文本,这对于快速查看交易中包含的信息会很方便。例如:

$ hexdump -C -s 8 -n 285 blk00000.dat00000008  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:显示字节及ascii文本

  • -s:声明要显示数据的偏移位置

  • -n:声明要读取的字节数

也可以指显示原始的16进制数据:

$ 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通常内置于各种linux发行版中。

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

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

BlockETL的主要特性如下:

  • 直接读取原始区块文件,抽取速度快

  • 将原始区块和交易数据加载至SQL数据库,便于后续的区块链数据分析

  • 支持多流水线并行处理,可自己控制并发流水线数量

  • 结构设计清晰,代码便于扩展

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

感谢各位的阅读,以上就是"比特币blk.dat文件格式及读取工具是什么"的内容了,经过本文的学习后,相信大家对比特币blk.dat文件格式及读取工具是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

数据 文件 区块 工具 字节 节点 交易 格式 分析 内容 进制 顺序 原始 信息 数据分析 数据库 二进制 文本 结构 处理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库系统管理员简称 莱芜智慧城管软件开发电话 网络技术与教育专业好吗 数据库生成的备份文件变小 事务跟数据库事务有什么区别 网络安全机遇与挑战 电信网络安全与现场管理试题 定点医疗机构代码数据库审核 数据库求李小波所在系 it软件开发 培训学费 专利之星数据库的资源 软件开发税率一般多少 北京市网络安全信息中心电话 网络安全法和自我防护区别 sa服务器管理限制数量登录 青浦区人工智能应用软件开发优点 海光服务器怎么配置多个ip 内蒙古科怡软件开发 数据库能否存储一大段文字 以前的网络安全 硬件网络技术工程师 软件开发过程分几个阶段 服务器远程过程调用占内存 能管理服务器集群的软件 小森生活怎么会默认服务器 手机游戏服务器价格 平度直播软件开发哪家好 企业网络安全与规划 时序数据库公司推荐 类似于神经网络技术
0