比特币是一个公有的区块链,对所有人开放,任何人都可以参与。比特币除了开发公有链节点之外,还开发了测试节点,我们这里通过创建测试节点来了解区块链节点的配置和运行状态,比如协议版本、区块链长度和挖矿计算难度等内容,简单来说,就是了解一个区块链节点包含哪些内容,也让我们对区块链有一个直观的认识。
该实例所需运行环境:
1、安装docker运行环境
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器镜像中,然后发布到支持容器的linux机器上,可用同样的环境运行应用。
docker就是一个可以在linux操作系统上独立运行的虚拟盒子,该盒子里运行着一个应用及该应用所需要的所有环境,完全和系统其它环境隔离,并且可以将盒子里的东西发布成一个镜像,直接移植到另一台linux操作系统上的docker上。
1)打开ubuntu终端,输入如下命令完成docker的安装:
$ sudo apt-get install docker.io
2)创建软连接
$ sudo ln -s /usr/bin/docker.io /usr/local/bin/docker
3)查看docker版本
$docker –version
如果出现版本信息,则说明docker安装成功
接下来我们用docker下载并运行比特币测试网络的docker镜像
$sudo docker pull freewil/bitcoin-testnet-box
默认使用的是国外的镜像,由于被墙的原因,导致无法下载或者下载缓慢,所以这里通过配置国内镜像的方式重新下载,过程如下:
首先查看docker目录是否存在daemon.json的配置文件,如果没有,则创建:
创建目录:
sudo mkdir -p /etc/docker
创建daemon.json并写入国内镜像地址:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
成功后,重新加载daemon:
sudo systemctl daemon-reload
重新启动docker:
sudo systemctl restart docker
这时候再重新下载比特币测试节点:
sudo docker pull freewil/bitcoin-testnet-box
运行docker镜像并配置RPC:
sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box
tester@647e5bee8412:~/bitcoin-testnet-box$
上述命令中的19001、19011是配置给两个节点提供RPC(远程过程调用)服务的端口。
启动比特币测试网络:
$make start
启动成功后,将在本地模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。
查看钱包信息:
make getinfo
钱包内容:
version://此客户端节点软件版本
protocolversion://比特币协议版本
walletversion://钱包数据格式版本
balance://该节点钱包的账户余额,默认0
blocks://已经产生的区块数量,初始启动为0
timeoffset://时间的时区偏移量
connections://本节点接入的其他节点数量
proxy://网络代理设置
difficulty://当前挖矿计算难度
testnet://是否使用外部的比特币测试网络
keypoololdest://预生成的公钥和私钥池的起始时间
keypoolsize://预生成的公钥和私钥池的包含记录数量,用于生成钱包地址和找零地址,这样钱包备份可以对已有的交易有效
paytxfee://每次发送比特币选择支付的手续费
relayfee://每笔交易直飞给旷工的最少标准手续费
errors://节点运行错误提示
目前为止我们已经模拟运行了两个比特币测试钱包节点,并能够成功获取钱包信息,通过这两个节点组成了一个私有范围的比特币测试网络。
下面我们来模拟区块的产生,数量为105:
make generate BLOCKS=105
再次查看钱包信息
这时候blocks数量为105,账户余额为250,也就是通过模拟挖矿行为,产生了250个比特币。
继续创建200个区块,发现所有的区块都由第一个钱包创建,所以第一个钱包的比特币数量为8850,第二个还是为0,区块数量是同步的。
现在我们尝试给将第一个钱包地址转出10个比特币,如下:
make sendfrom1 ADDRESS=mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ AMOUNT=10
第一个钱包余额已经从8850变为8839,扣除了支付额和少许旷工费用。