本文的主图是由 HackerNoon 的AI Image Generator通过提示“白板上的区块链交易哈希”生成的
在这篇文章中,我们将讨论一个无人知晓的秘密开源工具,它可以以极快的速度从区块链中查询有用的数据。
我们将提供示例查询,人们可以通过这些查询从区块链中获取有用的数据,并且我们将讨论允许以如此高的速度进行分析的工具架构。
不过在此之前,让我们先谈谈为什么您需要首先分析来自区块链的交易。
但是也
从上面,你可以推断并获得关于
以及 100 多种不同的其他分析。
如您所见,与传统市场相比,我们可以获得的有关比特币市场的数据要全面得多。最重要的是,普通人可以访问它。相比之下,只有对冲基金和银行才能访问传统市场中的此类数据。
因此,通过分析比特币区块链上的交易,可以更好地了解比特币市场,并根据这些数据做出更好的投资决策。
那么这个工具是如何工作的呢?
BlockSci旨在解决现有区块链分析工具的三个痛点:
性能不佳是 BlockSci 最擅长解决的痛点。例如,分析比特币交易的蛮力方法也行得通。您可以在您的计算机/服务器上运行一个比特币节点,并直接查询您自己的节点。但这种方法非常缓慢,可能需要数年时间才能处理完所有 10 亿比特币交易。
其他现有工具也存在性能不佳的问题,尤其是在使用通用图形数据库时,这使得它们的顺序查询速度要慢数百倍,而所有查询(包括图形遍历查询)的速度要慢得多。
BlockSci 的设计主要基于这样一个事实,即在区块链中,过去的区块无法更改,并且区块链上出现的所有新数据都是仅附加的。
这意味着事务数据库的 ACID 属性是不必要的,这使得内存分析数据库成为自然的选择。使用内存而不是磁盘存储可以显着加快数据处理速度,这正是我们所需要的。
实际上,BlockSci 是将整个区块链加载到内存中进行计算,避免了分布式处理的方式。这是因为区块链数据是图结构的,因此很难有效地划分。
它的设计者的猜想是,使用传统的分布式事务数据库进行区块链分析具有无限的 COST(优于单线程的配置),因为任何级别的并行性都无法优于优化的单线程实施。
它还应用了多种技术,例如将哈希指针转换为实际指针和删除重复地址数据,以进一步提高速度并减小数据大小。
为了从节点导入数据,BlockSci 使用自己的高性能导入器直接读取磁盘上的原始数据,而不是从内置的 JSON-RPC 接口。即便如此,通常需要 24 小时才能从节点导入和索引所有数据。不过,一旦数据被解析,实际的分析就会很快。
区块链存储在磁盘上的方式不容易分析。它们被用来做其他事情,比如检查交易和在大网络中查找数据。它们还通过在磁盘上以基本格式保存块来节省内存空间。但是我们需要更改数据以使其适合内存,因此 BlockSci 有一个解析器可以处理这一步。确保此解析器得到很好的优化。
该工具实现如此高速度的另一种方式是“布隆过滤器优化”。布隆过滤器是一种概率数据结构,允许测试集合中的成员资格。在区块链的上下文中,它存储所有可见地址并确保现有地址查找的正确性,同时最大限度地减少不存在地址的数据库查询数量。这是基于以下事实实现的:大约 88% 的输入花费了在最后 4000 个区块中创建的输出,并且只有 8.6% 的比特币地址被多次使用。
允许 BlockSci 实现高分析速度的最后一个最重要的优化是数据布局结构,它既提供高分析速度又不会对内存造成太大影响。
BlockSci 的数据布局将可用数据分为三类,并以混合方案组合。大多数分析都需要核心事务图,并且始终加载到内存中,以基于行的格式存储。仅部分分析所需的脚本和附加数据以混合(部分基于列,部分基于行)格式存储并按需加载。通过哈希查找单个交易或地址的索引存储在磁盘上的单独数据库中。
此外,它尽可能对数据字段使用固定大小的编码,优化引用位置的内存布局,将输出链接到输入以实现高效遍历,并共享内存映射和并行性。
最后,这里是在一分钟内找到费用>0.1 比特币的所有交易的查询。
chain.blocks.txes.where(lambda tx: tx.fee > 10**7).to_list()
BlockSci 是一种区块链分析工具,可以快速查询来自区块链的有用数据。通过分析比特币交易,可以更好地了解市场并做出更好的投资决策。
BlockSci的架构是基于区块链数据是图结构且难以有效分区的特点,因此将整个区块链加载到内存中进行计算。它应用了多种技术来提高速度,包括将散列指针转换为实际指针、删除重复地址数据以及使用布隆过滤器优化。数据布局结构既提供了高分析速度,又不会占用太多内存。