Docker搭建比特币测试网络

2019-05-23 15:00:38 浏览数 (1)

1 安装相关软件

1.1 安装nodejs和npm

1.2 安装RPC支持库kapitalize kapitalize的源码:https://github.com/shamoons/Kapitalize

$ npm install capitalize

【问题】 npm WARN enoent ENOENT: no such file or directory, open '/home/xx/package.json'

【解决】 切换到/usr/share/npm目录下安装,注意叫上sudo

$ sudo npm install capitalize

1.3 安装Docker 命令

$sudo apt-get install docker.io

创建软连接

$sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

2 安装运行比特币测试网络

2.1 下载比特币测试网络(bitcoin-testnet)的Docker镜像。

$sudo docker pull freewil/bitcoin-testnet-box

2.1 运行Docker镜像。

$sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box

注意:上述命令中的19001和19011是配置给两个节点提供RPC服务的端口。 2.3 进入Docker运行环境后,输入下面的命令来启动比特币测试网络:

$ make start

启动成功后,将在本机模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。

代码语言:javascript复制
tester@093cb526fe8d:~/bitcoin-testnet-box$ make start
bitcoind -datadir=1  -daemon
Bitcoin server starting
bitcoind -datadir=2  -daemon
Bitcoin server starting

输入下面的命令可以查看测试网络节点状态信息,从中可以了解到比特币测试网络的配置和运行状态,比如协议版本、区块链长度和挖矿计算难度等内容。

$ make getinfo

代码语言:javascript复制
tester@093cb526fe8d:~/bitcoin-testnet-box$ make getinfo
bitcoin-cli -datadir=1  getinfo
{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 0,
  "timeoffset": 0,
  "connections": 1,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1529489621,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}
bitcoin-cli -datadir=2  getinfo
{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 0,
  "timeoffset": 0,
  "connections": 1,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1529489621,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

3 初始化和测试区块链数据 在Docker运行窗口里依次输入下面的命令来初始化创建基本的区块链数据,供进一步的程序示例来使用。

注意:在正式的比特币网络环境下,平均是10分钟左右才能产生一个新的区块。但在这里的测试网络(testnet)特殊设定的环境下,区块是通过简单的命令控制就可以即时和批量产生的,方便程序开发测试。

3.1 模拟产生1一个区块记录

代码语言:javascript复制
tester@093cb526fe8d:~/bitcoin-testnet-box$ make generate
bitcoin-cli -datadir=1  generate 1
[
  "6ebc434b410dda5e929d1b805dbc0682f0836835d923f3c9b76cd57ef9623f23"
]

3.2 模拟新产生200个区块记录

代码语言:javascript复制
tester@093cb526fe8d:~/bitcoin-testnet-box$ make generate BLOCKS=200    
bitcoin-cli -datadir=1  generate 200
[
  "4b3904d9d4de9286976da3669386a49e450abfebd2d5b63315cf96bc645485af", 
  "1f01c311ea7afa8d35be9ac002819b60649b38cf19b124e307baa94c7a6d6427", 
.
. 
  中间共有200行  
.
.
.
  "2dfac1ddf4c4e71352f5fbd1cfc951d4750585de9c7f2f643e8cd3a3a7eb8f0d", 
  "1ff1c51635aa7477323730a59398a273351f582ab3682779068f0ea3f7e6faf2"
]

3.3 查看最新的钱包状态包括 balance 余额信息,这时可以留意看到第一个钱包节点的账户余额发生了变动,新的余额即通过模拟区块挖矿产生的测试比特币。

代码语言:javascript复制
bitcoin-cli -datadir=1  getinfo
{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 5050.00000000,
  "blocks": 201,
  "timeoffset": 0,
  "connections": 1,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1529489622,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}
bitcoin-cli -datadir=2  getinfo
{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 201,
  "timeoffset": 0,
  "connections": 1,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1529489621,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

3.4 给作为示例的测试钱包地址转账10个BTC。

代码语言:javascript复制
tester@093cb526fe8d:~/bitcoin-testnet-box$ make sendfrom1 ADDRESS=mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ AMOUNT=10
bitcoin-cli -datadir=1  sendtoaddress mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ 10
e39de1cd82dd83526d5424785174ed506f9655c13976d615e83a59561c283a6f

注意:这里的示例地址mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ是比特币测试网络下的钱包地址(以字符m起始),与比特币正式网络下的钱包地址(一般以数字1或3起始)是有区别的。

3.5 模拟新产生10个区块记录,让上面的转账交易得到足够有效的确认。

代码语言:javascript复制
$ make generate BLOCKS=10  
bitcoin-cli -datadir=1  generate 10
[
  "0e3a09f2e51d4ba6c31205db54bced6bd5930183f5a84c1bafa057cc8802493e", 
  "2e14f4cbf7698319be5de7ea5e27a4486fc2a2a6b50f824fdb1f4d22cad64041", 
  "7e2b64ec51597c45cd5ae263e9fdeab409de6d75bf81d9def527decf1c2951cc", 
  "1757540748c0a771a7dc17038f8730fb36258fa4e31c1d525939bfd40209ff53", 
  "095c6557f72b947fb2beeac8069d07b9c0867c8bc19b71c56c2e594bc6f69988", 
  "54932f2a307db0044a3a8af8c4b88c2219c8b70064c03b2a4e689eb6beb727a0", 
  "073f5daa6ab46d50600fb28150e0013e42f11dad84c21f5ee3f8acbcb4a6d66a", 
  "2c65b368a18586126b2c0cae0ab6ccc92c525eb470995437d2fe3b3ae309c215", 
  "45f2d770b0f8ed3a40d298eea056deaf6d0e619e5928bd41ded7a7f8627502bf", 
  "49603877d4cd7c26ee83d6d76cee27537bf56da37c5028ea606393d73d4f391e"
]

3.6 查看最新的钱包状态包括余额信息, 这时可以留意看到第一个钱包节点的balance 账户余额发生了改变 ,差额部分即已经交易转账支出的10个BTC加上少许的矿工费用。

代码语言:javascript复制
tester@093cb526fe8d:~/bitcoin-testnet-box$ make getinfo
bitcoin-cli -datadir=1  getinfo
{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 5539.99996180,
  "blocks": 211,
  "timeoffset": 0,
  "connections": 1,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1529489622,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}
bitcoin-cli -datadir=2  getinfo
{
  "version": 130200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 211,
  "timeoffset": 0,
  "connections": 1,
  "proxy": "",
  "difficulty": 4.656542373906925e-10,
  "testnet": false,
  "keypoololdest": 1529489621,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

         【参考资料】:《区块链技术指南》 邹均,张海宁,唐屹,李磊 著

0 人点赞