这是我正在写的一个电子书《比特币应用开发指南》,这是第一章的搭建测试环境的一小节。
搭建比特币节点
本书使用 BitcoinCore 0.16.3 和 Ubuntu 16.04 作为示例。
下载
运行下列命令下载 BitcoinCore 0.16.3 压缩包
1 2 3 4 5 6 7 8 9 10 11
| $ wget https://bitcoincore.org/bin/bitcoin-core-0.16.3/bitcoin-0.16.3-x86_64-linux-gnu.tar.gz --2019-02-22 22:12:13-- https://bitcoincore.org/bin/bitcoin-core-0.16.3/bitcoin-0.16.3-x86_64-linux-gnu.tar.gz Resolving bitcoincore.org (bitcoincore.org)... 107.191.99.5, 198.251.83.116 Connecting to bitcoincore.org (bitcoincore.org)|107.191.99.5|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 26154766 (25M) [application/octet-stream] Saving to: ‘bitcoin-0.16.3-x86_64-linux-gnu.tar.gz’
bitcoin-0.16.3-x86_64-linux-gnu.tar 100%[==============================================>] 24.94M 75.7KB/s in 10m 0s
--2019-02-22 22:22:13 (46.5 KB/s) - ‘bitcoin-0.16.3-x86_64-linux-gnu.tar.gz’ saved [26154766/26154766]
|
检验下载
下载校验和文件
1 2 3 4 5 6 7 8 9 10 11
| $ wget https://bitcoincore.org/bin/bitcoin-core-0.16.3/SHA256SUMS.asc --2019-02-22 22:13:13-- https://bitcoincore.org/bin/bitcoin-core-0.16.3/SHA256SUMS.asc Resolving bitcoincore.org (bitcoincore.org)... 198.251.83.116, 107.191.99.5 Connecting to bitcoincore.org (bitcoincore.org)|198.251.83.116|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1957 (1.9K) [application/octet-stream] Saving to: ‘SHA256SUMS.asc’
SHA256SUMS.asc 100%[=================================================>] 1.91K --.-KB/s in 0s
2019-02-22 22:13:16 (81.0 MB/s) - ‘SHA256SUMS.asc’ saved [1957/1957]
|
下载完成后使用以下命令验证 SHA256SUMS.asc
文件中是否列出了发布文件的校验和:
1 2 3
| $ sha256sum --ignore-missing --check SHA256SUMS.asc bitcoin-0.16.3-x86_64-linux-gnu.tar.gz: OK sha256sum: WARNING: 20 lines are improperly formatted
|
在上述命令生成的输出中,必须确保输出内容中包含“OK”。
通过运行以下命令拉取发布签名密钥的副本:
1 2 3 4 5 6 7
| $ gpg --recv-keys 01EA5486DE18A882D4C2684590C8019E36C2E964 gpg: requesting key 36C2E964 from hkp server keys.gnupg.net gpg: /home/lishude/.gnupg/trustdb.gpg: trustdb created gpg: key 36C2E964: public key "Wladimir J. van der Laan (Bitcoin Core binary release signing key) <laanwj@gmail.com>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
|
laanwj 是当前 BitcoinCore 的维护者和版本发布者,上面命令就是导入他的公钥。
然后就可以验证校验和文件是否签名正确:
1 2 3 4 5 6
| $ gpg --verify SHA256SUMS.asc gpg: Signature made Wed 19 Sep 2018 04:23:24 AM CST using RSA key ID 36C2E964 gpg: Good signature from "Wladimir J. van der Laan (Bitcoin Core binary release signing key) <laanwj@gmail.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964
|
检查输出中必须包含 gpg: Good signature
以及完整的一行 Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964
全局安装
移动文件到 /usr/local
目录,这样就可以全局运行 bitcoin 客户端,这里你可能需要管理员权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $ sudo tar zxvf bitcoin-0.16.3-x86_64-linux-gnu.tar.gz --strip-components=1 -C /usr/local bitcoin-0.16.3/bin/ bitcoin-0.16.3/bin/bitcoin-cli bitcoin-0.16.3/bin/bitcoind bitcoin-0.16.3/bin/bitcoin-qt bitcoin-0.16.3/bin/bitcoin-tx bitcoin-0.16.3/bin/test_bitcoin bitcoin-0.16.3/include/ bitcoin-0.16.3/include/bitcoinconsensus.h bitcoin-0.16.3/lib/ bitcoin-0.16.3/lib/libbitcoinconsensus.so bitcoin-0.16.3/lib/libbitcoinconsensus.so.0 bitcoin-0.16.3/lib/libbitcoinconsensus.so.0.0.0 bitcoin-0.16.3/share/ bitcoin-0.16.3/share/man/ bitcoin-0.16.3/share/man/man1/ bitcoin-0.16.3/share/man/man1/bitcoin-cli.1 bitcoin-0.16.3/share/man/man1/bitcoind.1 bitcoin-0.16.3/share/man/man1/bitcoin-qt.1 bitcoin-0.16.3/share/man/man1/bitcoin-tx.1
|
可以看到可执行文件有下面 4 个,其中前两个是本书介绍和讲解的内容。
bitcoind
守护进程,包含 RPC 服务和钱包
bitcoin-cli
客户端,用于与守护进程进行交互
bitcoin-qt
可视化界面钱包
bitcoin-tx
交易构建测试的辅助工具
通过打印版本号来查看是否正确安装:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $ bitcoin-cli --version Bitcoin Core RPC client version v0.16.3 $ bitcoind --version Bitcoin Core Daemon version v0.16.3 Copyright (C) 2009-2018 The Bitcoin Core developers
Please contribute if you find Bitcoin Core useful. Visit <https://bitcoincore.org> for further information about the software. The source code is available from <https://github.com/bitcoin/bitcoin>.
This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING or <https://opensource.org/licenses/MIT>
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.
|
如果有以上类似的输出,则证明全局安装完成。
配置
主网节点
现在可以直接运行 bitcoind
直接启动守护进程,当然默认不是以守护态启动的,需要加上 bitcoind -daemon
.
1 2
| $ bitcoind -daemon Bitcoind server starting
|
这样我们就以主网节点的方式启动,先看一下检查节点运行状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ bitcoin-cli getblockchaininfo { "chain": "main", "blocks": 0, "headers": 311998, "bestblockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "difficulty": 1, "mediantime": 1231006505, "verificationprogress": 2.411095771117041e-09, "initialblockdownload": true, "chainwork": "0000000000000000000000000000000000000000000000000000000100010001", "size_on_disk": 293, "pruned": false, "softforks": [] }
|
如果出现类型输出则说明运行正常,这个时候我们检查家目录会自动生成一个文件夹 .bitcoin
。这个文件是配置文件、本地钱包、区块数据的所在目录。
1 2 3 4 5 6 7 8 9 10 11 12 13
| $ ls -al .bitcoin total 800 drwxrwxr-x 5 lishude lishude 4096 Feb 22 22:45 . drwxr-xr-x 6 lishude lishude 4096 Feb 22 22:43 .. -rw------- 1 lishude lishude 37 Feb 22 22:43 banlist.dat drwx------ 3 lishude lishude 4096 Feb 22 22:44 blocks drwx------ 2 lishude lishude 4096 Feb 22 22:45 chainstate -rw------- 1 lishude lishude 13806 Feb 22 22:45 debug.log -rw------- 1 lishude lishude 247985 Feb 22 22:45 fee_estimates.dat -rw------- 1 lishude lishude 0 Feb 22 22:43 .lock -rw------- 1 lishude lishude 17 Feb 22 22:45 mempool.dat -rw------- 1 lishude lishude 522270 Feb 22 22:45 peers.dat drwxrwxr-x 2 lishude lishude 4096 Feb 22 22:45 wallets
|
如果不想每次启动时候加 -daemon
参数,那么可以创建一个配置文件,配置文件默认路径为 ~/.bitcoin/bitcoin.conf
。
1 2 3 4 5
| daemon=1
server=1 rpcuser=test rpcpassword=test
|
除了 -daemon
配置了守护态启动之外,我们还加入了其它配置:
server
字段设置是否开启 HTTP-JOSONRPC 功能。
rpcuser
和 rpcpassword
设置 JSONRPC 用户名和密码。
这样子我们就还启动了 HTTP-JOSNRPC 功能,可以使用 HTTP Request 的形式和比特币节点进行交互。默认监听端口号是 8332,这个可以通过 rpcport
来修改。
现在就使用了配置文件的内容,不用在跟 -daemon
等命令行参数了,直接就可以运行 bitcoind
。运行成功,现在以上面获取区块状态为例,我们使用 cURL 测试下 HTTP-JSONRPC 功能。
1 2 3 4 5 6
| curl --request POST \ --user test:test \ --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockchaininfo", "params": [] }' \ -H 'content-type: applicaiton/json;' \ http://127.0.0.1:8332/
|
内容除了没有格式化外,和使用 bitcoin-cli 一致。另外 JSONRPC 和其它命令的内容会在后续章节继续说明。
测试节点
我们通过配置成功运行了主网节点,为了开发方便一般我们还会配置“回归测试节点”,也就是 regtest 网络模式。
修改配置文件添加下列配置:
regtest
字段说明我们将使用 regtest
私有网络。
txindex
字段是否对所有的交易进行索引,默认只对本地钱包地址的交易进行索引,开启后相对的会增加磁盘使用。
discover
字段说明是否进行寻找 P2P 对等节点,开发测试我们关闭就行。
rpcallowip
设置允许的 RPC 访问 IP,一般都是在虚拟机运行节点,本机进行编码,设置成 0.0.0.0/0 即允许所有 IP 访问 RPC。
rpcport
配置 RPC 端口号,由于测试网端口号为 18443,为了编码方便,这里和主网 RPC 配置端口设置一致。
空行后为新增配置,完整配置如下:
1 2 3 4 5 6 7 8 9 10
| daemon=1 server=1 rpcuser=test rpcpassword=test
regtest=1 txindex=1 rpcallowip=0.0.0.0/0 rpcport=8332 discover=0
|
继续运行 bitcoind
,这个时候会发现 .bitcoin
文件夹比之前多了一个 regtest
的文件夹,这个文件是本地测试时所有的数据,内容基本和上一层主网下的一样。另外删除这个文件夹之后就相当于还原测试环境,这个相当友好。