您当前的位置:首页 > 互联网百科 > 区块链

区块链数据分析框架BlockSci简明教程

时间:2019-11-26 14:27:04  来源:  作者:

像比特币、以太坊这样的区块链中包含了大量的数据,可以帮助 我们洞察区块链生态系统中用户、企业和矿工的行为模式等重要信息。 BlockSci是一个C++开发的高性能的区块链数据分析框架,可以帮助 我们快速进行对比特币等区块链的数据分析工作。本教程将介绍 BlockSci区块链数据分析框架的安装方法,并讲解如何利用BlockSci 框架进行区块链数据分析。

1、安装BlockSci框架

BlockSci的主要开发语言是C++,本地编译需要GCC 7.2+和CLang 5+。 官方文档仅提供了Ubuntu 16.04和mac OS10.13下的本地安装方法, 其他系统可以尝试本地安装或使用官方提供的AWS EC2镜像。

2、BlockSci框架概述

BlockSci包含两个主要的组件:解析器和分析库。解析器用来解析 区块链数据并转换为便于执行分析任务的BlockSci数据格式。分析库 则用来编写数据分析任务。

区块链数据分析框架BlockSci简明教程

 

BlockSci的运行需要大量内存,推荐使用64GB内存,32GB虽然也可以用 但性能下降非常明显。

3、BlockSci解析器 / Parser

BlockSci的解析器支持两种处理原始区块链数据的机制:磁盘模式和RPC模式。

磁盘模式是处理比特币 区块数据的推荐模式,它可以直接读取并解析磁盘上的 比特币区块数据文件,因此速度要快得多。但是这也意味着磁盘模式不能 支持更多的区块链,因为不同的区块链的磁盘数据文件格式不同。

使用以下命令以磁盘模式解析比特币区块数据:

blocksci_parser --output-directory bitcoin-data update disk --coin-directory .bitcoin

参数说明:

  • –output-directory:解析结果输出目录
  • –coin-directory:bitcoin core数据目录

RPC模式使用数据加密货币区块链节点的RPC接口来提取数据,而RPC接口是 大多数(山寨币)区块链都支持的与比特币类似的二次开发接口(虽然优势也有一些差异), 因此在比特币之外的区块链数据解析,BlockSci通常采用RPC模式, 例如对于Zcash和Namecoin。

要使用RPC模式的BlockSci解析器,需要一个区块链全节点并且启用txindex选项。 命令格式如下:

blocksci_parser --output-directory bitcoin-data update rpc --username [user] --password [pass] --address [ip] --port [port]

参数说明:

  • –output-directory:解析结果输出目录
  • –username:RPC API用户名
  • –password:RPC API用户密码
  • –address:RPC API监听地址
  • –port:RPC API监听端口

4、BlockSci分析库 / Analysis Library

一旦利用解析器提取了区块链数据,就可以利用BlockSci的分析库来执行数据分析 任务了。BlockSci目前支持两种语言来开发区块链数据分析应用:C++和Python

要使用C++版本的BlockSci分析库,需要添加必要的BlockSci头文件并链接BlockSci 动态库。然后就可以利用解析器输出目录里的数据进行分析了,例如下面的代码:

#include <blocksci/blocksci.hpp>

int main(int argc, const char * argv[]) {
 blocksci::Blockchain chain{"file_path_to_output-directory"};
}

BlockSci目前仅支持Python 3,使用方法很简单:导入BlockSci库,然后利用 解析器输出目录的数据构建Blockchain对象:

import blocksci
chain = blocksci.Blockchain("file_path_to_parser_output-directory")

5、BlockSci区块链数据分析示例

这一部分我们使用Python版本的BlockSci来介绍如何进行比特币区块链的数据 分析。

首先导入必要的库并利用解析器输出数据构建BlockSci的Blockchain对象:

import blocksci
import matplotlib.pyplot as plt
import matplotlib.ticker
import collections
import pandas as pd
import numpy as np

chain = blocksci.Blockchain('your_parser_data_directory')

5.1 比特币地址类型使用情况分类统计

使用BlockSci的区块链对象的map_blocks()方法统计不同类型的地址 在每年的使用量:

net_coins_per_block = chain.map_blocks(lambda block: block.net_address_type_value())

df = pd.DataFrame(net_coins_per_block).fillna(0).cumsum()/1e8
df = chain.heights_to_dates(df)
df = df.rename(columns={t:str(t) for t in df.columns})
ax = df.resample("W").mean().plot()
ax.set_ylim(ymin=0)

显示结果如下:

区块链数据分析框架BlockSci简明教程

 

可以看到P2PKH地址的使用从2017年中开始减少,而P2SH地址的 使用同期则开始增加 —— 这应该对应着各种钱包对隔离见证地址支持 的增加。

5.2 比特币单区块交易手续费率可视化分析

下面的代码使用BlockSci的区块链对象的[]操作符提取 比特币465100#区块内各交易的手续费率并进行可视化分析:

example_block_height = 465100
df = pd.DataFrame(chain[example_block_height].txes.fee_per_byte(), columns=["Satoshis per byte"])
ax = df.reset_index().plot.scatter(x="index", y="Satoshis per byte")
ax.set_ylim(0)
ax.set_xlim(0)
plt.show()

显示结果如下:

区块链数据分析框架BlockSci简明教程

 

可以看到该区块内绝大多数交易的手续费率设置在500SAT/BYTE以内。

5.3 比特币二层协议使用情况可视化分析

在比特币交易内可以嵌入二层协议以实现对其他应用的支持,例如omni layer 的usdt代币就是最常见的一种比特币二层协议应用。下面的代码 使用BlockSci的区块链对象的blocks.txes属性提取在交易输出中 包含OP_RETURN脚本的交易,并显示二层协议的使用情况,可以非常清楚的看到, Omni layer到目前已经是二层协议的最大用户:

txes = chain.blocks.txes.including_output_of_type(blocksci.address_type.nulldata).all
labels = [(tx.block.time, blocksci.label_Application(tx)) for tx in txes]

df = pd.DataFrame(labels, columns=["date", "label"])
df = df.reset_index().groupby(["date", "label"]).count().unstack(level=-1).fillna(0)
df.columns = df.columns.droplevel()
important_columns = list(df[df.index > pd.to_datetime("1-1-2016")].sum().sort_values()[-10:].index)
important_columns = [x for x in important_columns if "Address" not in x]
ax = df[df.index > pd.to_datetime("1-1-2016")].cumsum().resample("w").mean()[important_columns].plot()
ax.set_ylim(0)
plt.tight_layout()

显示结果如下:

区块链数据分析框架BlockSci简明教程

 

5.4 比特币2017年各月平均交易手续费可视化分析

下面的代码统计年度平均手续费并将手续费换算为美元,注意 其中利用了BlockSci分析库中的CurrencyConverter进行汇率换算:

converter = blocksci.CurrencyConverter()
blocks = chain.range('2017')
times = blocks.time

df = pd.DataFrame({"Fee":fees}, index=times)
df = converter.satoshi_to_currency_df(df, chain)
ax = df.resample("d").mean().plot(legend=False)
ax.set_ylim(ymin=0)
plt.tight_layout()

显示结果如下:

区块链数据分析框架BlockSci简明教程

 

可以看到在2017年底比特币手续费激增。

5.5 比特币大额手续费交易可视化分析

下面的代码分析并可视化历年来手续费超过1000美元的比特币交易:

high_fee_txes = chain.cpp.filter_tx("fee(tx) > 10000000", 0, len(chain))
converter = blocksci.CurrencyConverter()

df = pd.DataFrame([(tx.block.height, tx.fee) for tx in high_fee_txes], columns=["height", "fee"])
df.index = df["height"]
df["fee"] = df.apply(lambda x: converter.satoshi_to_currency(x["fee"], chain[x["height"]].time), axis=1)
df = df[df["fee"] > 1000]
df = chain.heights_to_dates(df)
fig, ax = plt.subplots()
ax.plot_date(df.index, df["fee"], fmt="x")
ax.set_yscale("log")
formatter = matplotlib.ticker.ScalarFormatter(useoffset=False)
formatter.set_scientific(False)
ax.yaxis.set_major_formatter(formatter)
plt.tight_layout()

显示结果如下:

区块链数据分析框架BlockSci简明教程

 

2017年超过1000美元手续费的交易激增,从一个侧面说明了这一年 涌入了大量数字加密货币的新手。


汇智网原创,转载请标明出处:http://blog.hubwiz.com/2019/11/25/blocksci-tutorial/



Tags:区块链   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作为一个不断增长的行业,区块链对其专业人员有着巨大的需求。Upwork的报告显示,仅在过去连续三个季度,与区块链技术相关的工作岗位就增加了2000%。大公司和初创企业都希望雇佣...【详细内容】
2021-10-20  Tags: 区块链  点击:(33)  评论:(0)  加入收藏
区块链经济是基于区块链技术而产生的一种新经济现象。区块链是一个去中心化的分布式数据库,该数据库由一串使用密码学方法产生的数据区块有序连接而成,区块中包含有一定时间内...【详细内容】
2021-09-18  Tags: 区块链  点击:(28)  评论:(0)  加入收藏
我们来回顾一下,传统的合同签约步骤是这样的:执行传统合同需要人工验证,以检查条款和条件,并根据书面协议决定下一步。1、费时 - 检查合同条款,审核批准,再进行后续等步骤2、资源...【详细内容】
2021-07-14  Tags: 区块链  点击:(60)  评论:(0)  加入收藏
区块链技术带来了互联网的变革,将互联网从“信息互联网”带向“价值互联网”,我们也渐渐发现,最初被形象地称为“信息高速公路”的互联网处理的是“信息”,而区块链处理的是“价...【详细内容】
2021-07-13  Tags: 区块链  点击:(61)  评论:(0)  加入收藏
图片来源@视觉中国文丨夏玩醇社交平台和资讯网站上,众多未知来源的图片引来人们的猜测,好奇者会花费大量时间在评论区争吵。这也许是平台和内容创作者乐于看到的情况。更多的...【详细内容】
2021-06-04  Tags: 区块链  点击:(61)  评论:(0)  加入收藏
我们日常通用货币是人民币 (CNY),美国通用货币是美元 (USD),俄罗斯通用货币是卢布 (RUB)。那么,区块链中的通用货币是什么呢? 是泰达币 (USDT)。乍一看,USDT 与 USD 很像,那它们...【详细内容】
2021-06-04  Tags: 区块链  点击:(132)  评论:(0)  加入收藏
欧科链讯:本文为读者了解区块链这项前沿技术提供基础支持。作者对区块链特征、优势、应用等层面进行讲解,言简意赅,通俗易懂。我相信你们最近应该听到过“区块链”一词,也许是在...【详细内容】
2021-05-18  Tags: 区块链  点击:(104)  评论:(0)  加入收藏
前几期我们提到了,关于区块链的基本概念、安全性等。本期从八个点为大家解读区块链的优势。 一、链条的准确性区块链网络上的交易由数以千计的计算机网络批准。这消除了几乎...【详细内容】
2021-05-14  Tags: 区块链  点击:(87)  评论:(0)  加入收藏
今天动荡的市场,从研究性的思维模式向克服恐惧和不信任的思维模式转变,对“价值的数字化”至关重要。要想根除遗留系统中隐藏的价值,或因为低效流程而留下的资金,就意味着要转向...【详细内容】
2021-04-21  Tags: 区块链  点击:(147)  评论:(0)  加入收藏
区块链起源于技术创新,但更重要的是,技术创新带来的模式创新和思维创新。回顾一下互联网+的历程,初始只是将传统企业互联网化、移动化,发展到现在,许多传统企业已经运用“互联网...【详细内容】
2021-04-21  Tags: 区块链  点击:(210)  评论:(0)  加入收藏
▌简易百科推荐
作为一个不断增长的行业,区块链对其专业人员有着巨大的需求。Upwork的报告显示,仅在过去连续三个季度,与区块链技术相关的工作岗位就增加了2000%。大公司和初创企业都希望雇佣...【详细内容】
2021-10-20  知识小纸条  搜狐号  Tags:区块链   点击:(33)  评论:(0)  加入收藏
以太坊是目前第二大公链,它和比特币不一样,以太坊上的可以实现的功能更多,如果比特币是一个可以进行加减乘除的计算器,那么以太坊就是一台功能完备的计算机。以太坊系统的复杂度...【详细内容】
2021-10-18  Rayjun的区块链笔记    Tags:Gas 机制   点击:(22)  评论:(0)  加入收藏
区块链经济是基于区块链技术而产生的一种新经济现象。区块链是一个去中心化的分布式数据库,该数据库由一串使用密码学方法产生的数据区块有序连接而成,区块中包含有一定时间内...【详细内容】
2021-09-18  UTON在线    Tags:区块链经济   点击:(28)  评论:(0)  加入收藏
我们来回顾一下,传统的合同签约步骤是这样的:执行传统合同需要人工验证,以检查条款和条件,并根据书面协议决定下一步。1、费时 - 检查合同条款,审核批准,再进行后续等步骤2、资源...【详细内容】
2021-07-14  深圳都市微生活   企鹅号  Tags:智能合约   点击:(60)  评论:(0)  加入收藏
众所周知区块链是一个分布式账本,每条公链都是一个独立的账本,不同链之间是没有直接关系的,尤其是现在各个国家和地方,都在大力发展区块链技术,未来势必会是个区块链技术百花齐放...【详细内容】
2021-07-14  Life去中心化预言机协议    Tags:跨链   点击:(76)  评论:(0)  加入收藏
区块链技术带来了互联网的变革,将互联网从“信息互联网”带向“价值互联网”,我们也渐渐发现,最初被形象地称为“信息高速公路”的互联网处理的是“信息”,而区块链处理的是“价...【详细内容】
2021-07-13  MICA链盟    Tags:智能合约   点击:(61)  评论:(0)  加入收藏
图片来源@视觉中国文丨夏玩醇社交平台和资讯网站上,众多未知来源的图片引来人们的猜测,好奇者会花费大量时间在评论区争吵。这也许是平台和内容创作者乐于看到的情况。更多的...【详细内容】
2021-06-04  钛媒体APP  今日头条  Tags:区块链   点击:(61)  评论:(0)  加入收藏
我们日常通用货币是人民币 (CNY),美国通用货币是美元 (USD),俄罗斯通用货币是卢布 (RUB)。那么,区块链中的通用货币是什么呢? 是泰达币 (USDT)。乍一看,USDT 与 USD 很像,那它们...【详细内容】
2021-06-04  wei1guang  今日头条  Tags:USDT   点击:(132)  评论:(0)  加入收藏
欧科链讯:本文为读者了解区块链这项前沿技术提供基础支持。作者对区块链特征、优势、应用等层面进行讲解,言简意赅,通俗易懂。我相信你们最近应该听到过“区块链”一词,也许是在...【详细内容】
2021-05-18  欧科链讯    Tags:区块链   点击:(104)  评论:(0)  加入收藏
前几期我们提到了,关于区块链的基本概念、安全性等。本期从八个点为大家解读区块链的优势。 一、链条的准确性区块链网络上的交易由数以千计的计算机网络批准。这消除了几乎...【详细内容】
2021-05-14  无限之声    Tags:区块链   点击:(87)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条