Python中有300行的区块链解析器

图片

早在2015年,当加密货币没有像现在这样受到公众的广泛关注时,我想到详细了解什么是区块链,特别是加密货币和比特币。

尝试对比特币核心项目的源代码进行详细分析是失败的,因为我为自己设定了相当严格的初始条件,以便说“是的,现在我知道它是什么,它是如何工作的”以及大量的源代码行为了理解所获得的结果而需要理解的代码。

我不得不寻找其他方式。 而且,在做出此决定时,区块链已完全加载到我的本地计算机上。 今天,它的速度不如以前。

等等。 官方的比特币核心客户端将整个区块链上传到本地计算机上的文件夹中,这些文件中有一些文件,如官方文件中所述,包含所谓的比特币。 对我来说最有趣的是所谓的RAW区块链数据文件(来自Bitcoin / blocks文件夹的blk00000.dat ... blk01234.dat等),即原始形式的区块链数据库文件。

目录的其余内容是“原始”数据库的索引,用于正确核算未使用的输出,设置和个人钱包的数据。

为了获得洞察力,似乎很清楚找出源数据库存储在什么地方,在此基础上,本地系统将执行所有其他必要步骤以确保该加密货币的区块链正常工作。 本文未讨论有关联网的部分技术。 故意地,我将自己局限于本地部分和存储块的文件。

块和交易格式的规范以开源的形式提供,以对这些结构的单独描述的形式提供。 但是找不到任何东西可以完全说明如何解释这个“原始”区块链数据库(RAW区块链数据库)文件中存储的数据。

在我看来,唯一的选择是解析文件的线性结构,并以某种可读结构的形式呈现它,这应该使您完全了解比特币是哪种水果。

结果是用Python编写的约300行的脚本将本地存储的“原始”数据文件blkXXXXX.dat转换为纯文本格式,并指示其中包含的内容以及每个数据字段的含义。 生成的文本文件适合于进一步处理和从中提取,例如所有块哈希,交易哈希,地址,交易金额等。 出于分析目的,还有更多出于什么目的...

在我看来,由于通过顺序字节读取数据转换的实现,确保了解析器使用的便利性和透明性。

自然界中存在的区块链解析器具有许多功能,但没有一个可以直接与数据库本身的文件一起使用。 这就是为什么我不专注于任何利益的实现,例如获得带有余额等的地址列表,而是将自己局限于直接从内部格式到通用文本视图的文件直接转换的最明显和最简单的实现。 此外,我已经为许多项目实现了许多好处,例如形成UTXO集(一组未使用的输出)或形成带有余额的地址列表。

这项工作不可或缺的一部分是帮助利益相关者了解区块链技术。

是的,事实证明,该脚本还适用于大多数其他加密货币,例如Dash,Dogecoin,Bitcoin Cash,Litecoin和其他山寨币,尽管如此,您需要做一些技巧。 本文并不打算揭示这些技巧。

您可以从github下载区块链解析器解析器。

Source: https://habr.com/ru/post/zh-CN482978/


All Articles