bitcoin core 使用

介绍

Bitcoin Core 是中本聪发起的最原始的bitcoin软件客户端的开源项目,开源地址:https://github.com/bitcoin

编译版下载地址 https://bitcoincore.org/en/download/

使用

Linux 安装

官网有编译的二进制文件,下载后加压添加PATH即可

1
2
3
4
wget https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
tar -xvzf bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
cd bitcoin-0.20.1/bin
export PATH=$PATH:`pwd` # 该行可以添加到 .bash_profile 中持久化

Bitcoin core

bitcoin-0.20.1/bin 目录下有

1
2
3
4
5
6
7
$ ll
-rwxr-xr-x 1 neo neo 2.0M Jul 31 20:01 bitcoin-cli 客户端
-rwxr-xr-x 1 neo neo 9.9M Jul 31 20:01 bitcoind 主程序
-rwxr-xr-x 1 neo neo 31M Jul 31 20:01 bitcoin-qt GUI 客户端
-rwxr-xr-x 1 neo neo 2.3M Jul 31 20:01 bitcoin-tx 交易
-rwxr-xr-x 1 neo neo 5.7M Jul 31 20:01 bitcoin-wallet 钱包
-rwxr-xr-x 1 neo neo 16M Jul 31 20:01 test_bitcoin 测试

==初次运行==需要同步和验证主链的数据,从创世纪块开始下载然后验证。在本地保存所有数据目前需要300多个G,也可以剪枝运行:

1
2
bitcoind -maxconnections=256 -prune=550		# 命令模式
bitcoind-qt -maxconnections=256 -prune=550 # GUI,和bitcoind不能同时运行

maxconnections是最大连接数,prune >= 550 表示自动剪枝。剪枝模式下最终只占用 4.7G 空间,数据保存在~/.bitcoin/

因为需要下载300多个G的数据并验证,所以需要很长的时间,我花了2天。这里吐槽一下,验证需要从创世纪块开始下载所有完整的block,绝对是Bitcoin设计的一个缺陷,因为将UTXO集合的hash打包到block中的话,验证过程只需要下载block hader就行了。

bitcoind 命令 https://mistydew.github.io/blog/2018/05/running-bitcoin.html

bitcoind 提供的RPC接口 https://bitcoincore.org/en/doc/0.20.0/ ,在本地可以使用 bitcoin-cli 调用

UTXO

Bitcoin Core 将 UTXO 保存在 levelDB 中,路径为 ~/.bitcoin/chainstate,格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    type                          txid (little-endian)                      index (varint)
\ | /
<><--------------------------------------------------------------><>
key: 430000155b9869d56c66d9e86e3c01de38e3892a42b99949fe109ac034fff6583900

value: 71a9e87d62de25953e189f706bcf59263f15de1bf6c893bda9b045 <- obfuscated
b12dcefd8f872536b12dcefd8f872536b12dcefd8f872536b12dce <- extended obfuscateKey
c0842680ed5900a38f35518de4487c108e3810e6794fb68b189d8b <- deobfuscated (XOR)
<----><----><><-------------------------------------->
/ | \ |
varint varint varint script <- P2PKH/P2SH hash160, P2PK public key, or complete script
| | nSize
| |
| amount (compressesed)
|
|
100000100001010100110
<------------------> \
height coinbase

它的 key 是一个三元组 <type [0], txid [1:33], vout [33:]>

然而 bitcoin core 并没有设计查询UTXO的API,只能使用一些开源的库来读取levelDB中的UTXO,但是需要将key和value格式化一下。

这里有一个遍历 UTXO levelDB 为 csv 的一个工具 https://github.com/in3rsha/bitcoin-utxo-dump 。使用之前需要先用bitcoind同步完主链的UTXO数据,使用如下参数转换
bitcoin-utxo-dump -f count,txid,vout,height,coinbase,amount,nsize,script,type,address
转换之后的csv文件为12个G


参考

https://blog.csdn.net/ztemt_sw2/article/details/81101717

RPC DOC https://bitcoincore.org/en/doc/0.20.0/

Bitcoin Core 源码结构

使用 https://blog.csdn.net/weixin_34357436/article/details/92710312