python-bitcoinrpc下载比特币数据Windows(完成)

本文目的

为了下载比特币区块链上的原始转账记录,搜索了几篇比特币数据分析论文里提到的一些获取数据方法,对比下来采用基于Python的bitcoinrpc相对直接解析二进制文件比较容易上手,且在GitHub上有开源脚本:
https://github.com/jgarzik/python-bitcoinrpc
但具体在Windows系统进行设置的时候踩过一些坑,最后终于摸索摸索搞定了,将过程记录于此。

环境介绍

  • Windows10
  • python3.7
  • 有一个磁盘剩余容量300G以上

操作过程

  1. 安装相关的Python包

首先,根据GitHub上的指示安装package:

pip install python-bitcoinrpc

GitHub上面有一个示例告诉我们如何使用这个服务获得区块数据:

from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException

# rpc_user and rpc_password are set in the bitcoin.conf file
rpc_connection = AuthServiceProxy("http://%s:%s@127.0.0.1:8332"%(rpc_user, rpc_password))
best_block_hash = rpc_connection.getbestblockhash()
print(rpc_connection.getblock(best_block_hash))

其中提到的关键是,需要在 bitcoin.conf 文件里面设置rpc_user, rpc_password等参数。一开始一头雾水不知道去哪找这个bitcoin.conf文件,后来才明白要开启这个rpc服务首先要在本地安装一个比特币全节点,并非通过比特币网站提供的对外API下载数据。

  1. 安装Bitcoin Core

接着上一步说的,去bitcoin.org下载了Windows版本的bitcoin-0.19.0.1-win64-setup.exe,安装后指定路径下出现名为Bitcoin的文件夹,里面有子文件夹daemon和doc,以及应用程序bitcoin-qt.exe等少数文件。

子文件夹daemon里面含有四个程序,分别是bitcoin-cli.exe, bitcoind.exe, bitcoin-tx.exe, bitcoin-wallet.exe,这些网上其他地方都有相应的介绍,我们需要知道的是,有两种方式启动bitcoin core设定参数和下载数据:

  • 方法一:在cmd里面运行daemon里的程序,并加上特定的命令
  • 方法二:直接双击打开bitcoin-qt.exe

建议在这之前,先浏览以下三个链接
https://en.bitcoin.it/wiki/Running_Bitcoin
https://en.bitcoin.it/wiki/Data_directory
https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)
这里会告诉我们比特币存数据的默认地址一般在哪。并且告诉我们bitcoin.conf是需要自己创建的,里面的内容可以参考链接中给的例子,网上也有很多例子。

我先采用了第二种方式,直接运行bitcoin-qt.exe这个应用程序,打开它之后,会有一些初始配置的对话框,我们可以指定数据保存路径,这个路径一定要有200G以上的剩余空间。另外需要注意的是,在对话框中不要勾选“将区块存储修剪至2GB”如果勾选这个,一些较早的区块就不保存了,后面调rpc接口的时候就会因找不到指定区块数据而报错。

Bitcoin Core下载数据.PNG

上图展示了开启Bitcoin Core客户端后自动开始下载区块数据的界面,从2009年开始到现在十年多的数据预计在12小时左右下完,还是比我想象的要快许多。

配置.PNG

上图是安装好之后界面中点击设置-选项跳出的界面,在这里可以进行一些参数的设定,例如我前面提到的是否选择修剪区块存储,如果原本选择了修剪,则最终存下来的数据量大概咋5~6GB左右,如果不选择修剪,数据量大约298G,并且随着时间会不断增大。

在同步完区块头,开始稳定下载数据时,会发现你指定的存数据路径下(若没有指定存储路径,则在系统默认的C:\Users\username\AppData\Roaming\Bitcoin下面)出现bitcoin.conf文件,里面初始是空的。这个文件是为了方便你更改一些设定,在下次运行bitcoin-qt.exe的时候会自动加载这个配置文件并将里面的配置参数覆盖原有参数,其它没有在配置文件里面明确的参数保持原样。

例如上面配置截图中默认的数据库缓存大小是450MB,我在配置文件中添加: dbcache=10000,再重新打开应用程序,它就将这个参数覆盖默认值了。

出于好奇,我也试了一下第一种方法,在cmd运行bitcoind就会自动在系统默认AppData路径,例如C:\Users\username\AppData\Roaming\下创建名为Bitcoin的文件夹,并在里面创建子文件夹blocks, chianstate, indexes,同时创建一个空的bitcoin.conf。如果没有找到bitcoin.conf,在该路径下新建一个即可(注意后缀名是.conf)。

  1. 配置bitcoin.conf文件

在bitcoin.conf里面输入JSON-RPC相关配置信息并保存,参考配置如下:

# Accept command line and JSON-RPC commands
server = 1   # 开启JSON-RPC服务
# Maintain a full transaction index, used by the getrawtransaction rpc call
txindex = 1   # 为存储的区块数据添加索引
#Bind to given address to listen for JSON-RPC connections.
rpcbind = 127.0.0.1:8332   # 默认端口
# On client-side, you add the normal user/password pair to send commands:
rpcuser = username   # 自定义用户名
rpcpassword = password  # 自定义密码

其它的一些参数设置可参考应用程序帮助-命令行选项里的列表。

  1. 测试是否正常运行

这时候便可用第一步中提到的示例代码测试bitcoinrpc是否能正常请求数据了。需要注意的是,在运行代码时要确保bitcoin-qt.exe或bitcoind.exe正在运行,这样服务才会打开,不然会提示127.0.0.1:8332连接不通问题。另外就是如果区块的历史数据没有下载完成时,这个工具只能请求获得已经下载的区块数据。下面截图里显示的就是用getbestblockhash函数获得的已下载数据中height最高(398661)的区块的部分数据结果。


bitcoinrpc_test.png

结语

对于仅想对比特币进行数据分析的目的而言,下载全量比特币区块原始数据再解析并不是理想的方式,但目前还没有发现可以不运行全节点而直接通过一个官方的API接口查询所需数据的方法,只能先通过这种方式了,希望后面可以找到更简单的数据收集途径。

(记于2019年12月27日)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354