在近期的研发中 , 需要用到比特币测试节点 . 本来想找个类似以太坊 infura 这样的三方节点 , 最终只找到 BLOCKCYPHER . 其提供了 testnet 和 mainnet 的环境 , 不过 API 是包装过一层的 , 出于严谨 , 还是决定自行搭建节点.

本篇将说明在 Linux 下搭建 Bitcoin 测试节点. 为了良好的阅读体验 , 请点击阅读原文

搭建环境

选型

比特币节点有很多实现

  • bitcoin core : 官方节点 , c/c++ 实现, 正式网络大多数是用这个运行全节点
  • btcd : golang的实现版本 , 如果用golang来写一些功能 ,可以参考这个代码
  • libbitcoin : c/c++实现 , 特点是它有较好的工具链
  • parity-bitcoin : rust实现 , 是以太坊创始人之一Gavin Wood的新公司Parity Technologies下的一个产品 ,它同样也实现了以太坊rust版本

还有很多其他实现 , 如java版本和js版本 . 若用作商业用途 , 那bitcoin core必然是最稳妥的选择.

服务器配置

  • 硬盘: 500G .
  • 内存: 16G . 一般来说4G就够 , 但如果要查历史记录 ,需要加载完整的交易索引表-tindex , 这就需要8G+的内存
  • CPU: 4核
  • 带宽: 一般
  • 系统: CenterOS 7

节点搭建

1. 进入 bitcoin 选择 Choose your wallet

2. 选择 Bitcoin Core for Linux 下载

bitcoin-0.17.0.1-x86_64-linux-gnu.tar.gz

__3. __上传服务器,解压

这里笔者使用的路径统一为 /opt/btc/...

解压

1
2
cd /opt/btc
tar -xzvf bitcoin-0.17.0.1-x86_64-linux-gnu.tar.gz

4. bitcoin 配置

bitcoin的默认配置文件目录为 ~/.bitcoin/bitcoin.conf , 若没有指定, 默认则会在该目录下创建个新的.

同步数据比较占硬盘空间,建议自定义存储路径,避免后期空间不足的尴尬.

此处笔者在 /opt/btc/bitcoin-data/ 下新建了 bitcoin.conf 文件

bitcoin.conf :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 数据存储目录
datadir=/opt/btc/bitcoin-data
# 使用测试网络
testnet=1
# 告知 Bitcoin-Qt 和 bitcoind 接受JSON-RPC命令
server=1
# 设置 gen=1 以尝试比特币挖矿
gen=1
# 后台执行
daemon=1
# 监听 RPC 链接,正式默认端口8333 测试默认18333
#rpcport=18333
#rpcuser=123456
#rpcpassword=abcdef
#rpcallowip=0.0.0.0/0
#rpcconnect=127.0.0.1

这里只做一些简单的配置 , 更多的配置请参考 Bitcoin Core配置文件解读

配置设置好 , 开始同步

1
2
cd /opt/btc/bitcoin-0.17.0/bin
./bitcoind -conf=/opt/btc/bitcoin-data/bitcoin.conf

如无意外 , 同步则开始 . 测试网络节点数据大概几十G , 耐心等待即可 . 笔者大概花了1~2个小时

以上这个 progress 代表同步进度 , 1.0 则为 100% .

相关命令

bitcoind

启动 bitcoin (自己视实际情况修改)

1
2
cd /opt/btc/bitcoin-0.17.0/bin
./bitcoind -conf=/opt/btc/bitcoin-data/bitcoin.conf

命令中用 bitcoin.conf 文件包裹了一系列配置,如果不用此文件则需要指明各个参数.比如 ./bitcoind -datadir=xxx -rpcuser=xxx .....

如若不确定 bitcoin 是否已经启用过 , 可先用命令查询 netstat --ip -lpan | grep bitcoin

1
2
# 帮助
./bitcoind -h

更多 bitcoind 命令

bitcoin-cli

关闭 bitcoin

1
./bitcoin-cli stop

其他命令

1
2
3
4
5
6
7
8
# 查看网络状态:
bitcoin-cli getnetworkinfo
# 查看网络节点:
bitcoin-cli getpeerinfo
# 查看区块链信息:如同步进度、
bitcoin-cli getblockchaininfo
# 查看所有命令
bitcoin-cli help

更多 bitcoin-cli 命令

bitcoin-cli RPC 命令总结

Bitcoin API

1
2
3
4
./bitcoin-cli -conf=/opt/btc/bitcoin-data/bitcoin.conf listaccounts
error code: -32
error message:
listaccounts is deprecated and will be removed in V0.18. To use this command, start bitcoind with -deprecatedrpc=accounts.

有些命令即将过期 , 会报错 . 此时最好用 bitcoin-cli help 查询下替换的命令

交易测试

创建账户及地址

1
./bitcoin-cli -conf=/opt/btc/bitcoin-data/bitcoin.conf getnewaddress "halcyon"

此处 “halcyon” 为自定义账户名 , 默认创建的地址类型是隔离见证的 , 即在测试网络下是 2 开头的.

获取测试币

在以下测试币水龙头网页中申请测试比特币 , 注意科学上网 .

然后查询余额 .

1
2
3
./bitcoin-cli -conf=/opt/btc/bitcoin-data/bitcoin.conf getbalance
或者
./bitcoin-cli -conf=/opt/btc/bitcoin-data/bitcoin.conf listaddressgroupings

然后转账给 myVftRaBb8Vy3upWaL8TueAhDE2QAsQy1h

1
./bitcoin-cli -conf=/opt/btc/bitcoin-data/bitcoin.conf sendtoaddress "myVftRaBb8Vy3upWaL8TueAhDE2QAsQy1h" 0.001

返回的是一串字符串 txhash , 可以去比特币浏览器 上查找

Linux 常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看磁盘空间
df -hl
# 递归删除
rm -rf [目录]
# 查看所有网络端口
netstat -an
# 查看端口具体被哪个进程占用
lsof -i :[端口号]
# 查看进程详细信息
ps -aux | grep [进程号]
# 杀掉进程
kill -9 [进程号]
# 查看关键字进程
netstat --ip -lpan | grep [关键字]

参考资料:

  1. https://blog.csdn.net/littlesmallless/article/details/83825784

  2. https://www.jianshu.com/p/1891a083e4fe