百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

ccwgpt 2024-10-21 04:01 112 浏览 0 评论

像比特币、以太坊这样的区块链中包含了大量的数据,可以帮助 我们洞察区块链生态系统中用户、企业和矿工的行为模式等重要信息。 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的运行需要大量内存,推荐使用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)

显示结果如下:

可以看到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()

显示结果如下:

可以看到该区块内绝大多数交易的手续费率设置在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()

显示结果如下:

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()

显示结果如下:

可以看到在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()

显示结果如下:

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


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

相关推荐

土豪农村建个别墅不新鲜 建个车库都用框架结构?

农村建房子过去都是没车库,也没有那么多豪车,一般直接停在路边或者院子里。现在很多人都会在建房子的时候留一个车库,通过车库可以直接进入客厅,省得雨雪天气折腾。农村土豪都是有钱任性,建房子跟我们普通人不一...

自建框架结构出现裂缝怎么回事?

三层自建房梁底与墙体连接处裂缝是结构问题吗?去前帮我姑画了一份三层自建房的图纸,前天他们全部装修好了。我姑丈突然打电话给我说他发现二层的梁底与墙分离了,有裂缝。也就是图纸中前面8.3米那跨梁与墙体衔接...

钢结构三维图集-框架结构(钢柱对接)

1、实腹式钢柱对接说明1:1.上节钢柱的安装吊点设置在钢柱的上部,利用四个吊点进行吊装;2.吊装前,下节钢柱顶面和本节钢柱底面的渣土和浮锈要清除干净,保证上下节钢柱对接面接触顶紧;3.钢柱吊装到位后...

三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!

绘创意设计乡村好房子设计小编今日头条带来分享一款:三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!本案例设计亮点:这是一款三层新中式框架结构自建房,占地13×12米,户型占地面积...

Casemaker机箱框架结构3D图纸 STEP格式

农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相

回老家闲逛,竟发现个有意思的现象:村里盖新房,十家有八家都选了"半框架结构"。隔壁王叔家那栋刚封顶的二层小楼,外墙红砖还露着糙面没勾缝,里头的水泥柱子倒先支棱得笔直,这到底是啥讲究?蹲...

砖混结构与框架结构!究竟有何区别?千万别被坑!

农村自建房选结构,砖混省钱但出事真能保命吗?7月建材价格波动期,多地建房户因安全焦虑陷入选择困境——框架结构虽贵30%,却是地震区保命的关键。框架柱和梁组成的承重体系,受力分散得像一张网。砖混靠墙硬扛...

砖混结构与框架结构,究竟有何区别?千万别被坑!

农村建房选砖混结构还是框架结构?这个问题算是近期留言板里问得最多的问题了。今天咱们说说二者的区别,帮您选个合适的。01成本区别假如盖一栋砖混结构的房子需要30万,那么换成框架结构,一般要多掏30%的费...

6个小众却逆天的App神器,个个都是黑科技的代表

你的手机上有哪些好用的软件?今天我就给大家分享6个小众却逆天的App神器,个个都是黑科技的代表!01*Via浏览器推荐理由:体积极小的浏览器,没有任何广告。使用感受:它的体量真的很小,只有702KB,...

合肥App开发做一个app需要多少钱?制作周期有多久?

在移动互联网时代,开发一款APP已成为企业数字化转型与个人创业的重要途径。然而,APP的开发成本与制作周期受功能复杂度、技术架构、团队类型等多重因素影响,差异极大。好牛软件将从这两个维度展开分析,帮助...

详解应对App臃肿化的五大法则

编者注:本文转自腾讯ISUX。先来看一张图:图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的...

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

需求背景春节活动中,多个业务方都有发放优惠券的需求,且对发券的QPS量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级QPS的券系...

8种移动APP导航设计模式大对比

当我们确定了移动APP的设计需求和APP产品设计流程之后,开始着手设计APP界面UI或是APP原型图啦。这个时候我们都要面临的第一个问题就是如何将信息以最优的方式组合起来?也许我们对比和了解了其他一些...

数字资产支付 App 的技术框架

开发一款功能强大、安全可靠的数字资产支付App需要一个整合了区块链技术、后端服务、前端应用以及第三方集成的全栈技术框架。这个框架的核心在于保障数字资产的安全流通,并将其高效地桥接到传统的法币支付场...

从MyBatis到App架构:设计模式全景应用指南

从MyBatis到App架构:设计模式全景应用指南引言在企业级应用和服务端开发领域,MyBatis凭借其灵活、简洁、强大的ORM映射能力被广泛应用。而它之所以能拥有如此优秀的可扩展性和工程可维护性,正...

取消回复欢迎 发表评论: