新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > 互联网百科 > 区块链

区块链数据分析框架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:区块链   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
要从架构和管理决策来看正如同我们在“区块链技术是什么(什么是区块链技术?)”一文中所述,区块链与传统数据库,从架构开始就是不同的,或者说其技术如何部署便是不同的。万维网(万维...【详细内容】
2019-11-24   区块链  点击:(0)  评论:(0)  加入收藏
像比特币、以太坊这样的区块链中包含了大量的数据,可以帮助 我们洞察区块链生态系统中用户、企业和矿工的行为模式等重要信息。 BlockSci是一个C++开发的高性能的区块链数据...【详细内容】
2019-11-26   区块链  点击:(1)  评论:(0)  加入收藏
科技日报记者 刘园园 实习记者 代小佩10月下旬以来,区块链成为众人瞩目的焦点,引发大量关注与讨论。科技日报记者采访了解到,区块链已开始在我国金融、食品、公益等多个垂直行...【详细内容】
2019-11-19   区块链  点击:(2)  评论:(0)  加入收藏
摘 要 共识算法是区块链技术的核心要素, 也是近年来分布式系统研究的热点. 本文系统性地梳理和讨论了区块链发展过程中的 32 种重要共识算法, 介绍了传统分布式一致性算法...【详细内容】
2019-11-14   区块链  点击:(7)  评论:(0)  加入收藏
最近区块链火了,那么很多人一头雾水,随处可听的 挖矿,哈希值到底是什么呢?今天做个分享挖矿:这里的挖矿不是用锄头下井挖矿,之前我们了解了区块链,他是一个分布式,去中心化的账本,每...【详细内容】
2019-11-11   区块链  点击:(5)  评论:(0)  加入收藏
大部分材料都会提到区块中保存了merkle根,并且利用它作交易真实性验证。但是具体如何作这个真实性验证,没有一篇文章可以通俗的讲出来。本文假设你已经知道区块链中merkle tre...【详细内容】
2019-11-12   区块链  点击:(8)  评论:(0)  加入收藏
存储并不是个新词,随着互联网技术的快速发展,企业级存储、云存储等已成为人们工作生活的标配。与此同时,伴随区块链技术的发展与成熟,区块链存储的优势和特点开始受到多方关注...【详细内容】
2019-11-14   区块链  点击:(9)  评论:(0)  加入收藏
如果你从事编程,或者对区块链感兴趣,那么哈希这个词肯定经常听到,那么哈希到底是什么,今天就简单聊一聊。首先我有一个算法,有一个输入和一个输出,换句话说当你输入一个数据,我返回...【详细内容】
2019-11-06   区块链  点击:(17)  评论:(0)  加入收藏
视觉中国随着中央层面明确了区块链技术的集成应用在新技术革新和产业变革中的重要作用,我国区块链行业的发展已迎来难得的历史机遇。与此同时,区块链行业正在部分重构金融法律...【详细内容】
2019-10-31   区块链  点击:(13)  评论:(0)  加入收藏
最近,区块链的概念是火爆了,就在最近,腾讯公司与中国信通院发表白皮书,将主导中国区块链发票。可以预见的是,在未来一段时间,区块链还会继续火爆下去,如果掌握了区块链的技术,不敢说...【详细内容】
2019-11-01   区块链  点击:(13)  评论:(0)  加入收藏
区块链本质论区块链被大家关注事件好事情,但非常不希望看到各种区块链项目盲目上马,造成各种社会资源的浪费。区块链技术本身尚在发展阶段,还有很多核心技术问题有待突破,对区块...【详细内容】
2019-11-01   区块链  点击:(43)  评论:(0)  加入收藏
摘要:区块链可以实现无中心、高可信的账本管理,成功支撑了比特币等金融领域应用发展。区块链的本质是在不完全可信环境中的可信数据管理,它具有去中心化、防篡改、强一致和完整性等特性。同时,区块链也存在着数据管理功能...【详细内容】
2019-10-31   区块链  点击:(14)  评论:(0)  加入收藏
10月25日,中央政治局对区块链进行了集体学习,要将区块链作为核心技术自主创新的重要突破口,将区块链与人工智能、量子信息、移动通信、物联网一道列为新一代信息技术代表。之后...【详细内容】
2019-10-29   区块链  点击:(16)  评论:(0)  加入收藏
区块链真可谓“忽如一夜春风来”,关于区块链很多投研君的粉丝还不是很了解,这里就简单说说。什么是区块链?本质是去中心化的数据库。区块链是一种按照时间顺序将数据区块以顺序...【详细内容】
2019-10-28   区块链  点击:(46)  评论:(0)  加入收藏
所谓区块链,就是字面意思,由区块组成的一个链条。在计算机领域,链表是最为基本的数据结构之一。区块链就是对链表数据结构的扩展和应用。每一个区块中都维护着自己的数据结构,...【详细内容】
2019-10-28   区块链  点击:(41)  评论:(0)  加入收藏
我们现代人已经基本上无法离开网络了,大家每天拿着手机在看。其实大家需要的不是手机而是为了上网,如果这个手机不能上网,他就不会用手机。随着这个网络世界迅速发展,就产生了一...【详细内容】
2019-10-28   区块链  点击:(18)  评论:(0)  加入收藏
要说这几年最火的是什么,小程序、共享单车、自媒体==,这些确实是个风口,但不是最火的,最近几年火遍全球的无疑是区块链,如今已经步入了2019年,百度在年前推出的莱茨狗成为万众瞩目...【详细内容】
2019-10-28   区块链  点击:(64)  评论:(0)  加入收藏
区块链行业的快速发展,衍生出很多专业名词,从币改、票改、到链改,都引起整个区块链行业的高度关注,整个生态发展也如火如荼,那么,究竟什么是链改呢?什么是链改链改是指用区块链的理...【详细内容】
2019-10-15   区块链  点击:(30)  评论:(0)  加入收藏
随着以比特币为代表的加密货币的兴起,“区块链”的概念也成了人们热衷讨论的话题。但与区块链类似的另一个概念“分布式账本技术”却没有得到同等程度的关注。当“区块链”与...【详细内容】
2019-10-11   区块链  点击:(17)  评论:(0)  加入收藏
本文主要针对想了解区块链,而且毫无专业技术跟金融背景的人,对于区块链的与数字货币的知识做了一些汇总,如果您有更好的见解,可以留言一起完善! 什么是区块链?区块链(Blockchain...【详细内容】
2019-09-26   区块链  点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条