第6章 比特币应用开发指南

6.1 以虚拟机方式搭建应用开发环境

6.1.1 下载和安装虚拟机
6.1.2 以虚拟机方式安装 Ubuntu
6.1.3 安装Node.js开发环境
6.1.4 安装Docker运行环境
6.1.5 安装和运行比特币测试网络
  • 1.下载比特币测试网络的Docker镜像。
1
$ sudo docker pull freewil/bitcoin-testnet-box
  • 2.运行Docker镜像。
1
$ sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box
  • 3.进入Docker运行环境后,输入下面的命令来启动比特币测试网络;
1
$ make start
  • 4.启动成功 查看测试节点网络状态信息,了解比特币测试网络的配置和运行状态,如:协议版本、区块链长度和挖矿计算难度等。 并初始化和测试区块链数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
$ make getinfo

bitcoin-cli -datadir=1 getinfo //第一个钱包节点的信息
{
"version": 130200, //客户端节点软件版本
"protocolversion": 70015, //比特币协议版本
"walletversion": 130000, //钱包数据格式版本
"balance": 5489.99996160, //第一个钱包节点的账户余额 初始值为0
"blocks": 210, //已经产生的区块数量,初始启动为0,可以通过进一步命令来模拟生成区块数据
"timeoffset": 0, //时间的时区偏移量
"connections": 1, //本节点接入的其他节点数量
"proxy": "", //网络代理设置
"difficulty": 4.656542373906925e-10, //当前挖矿计算难度
"testnet": false, //是否使用外部的比特币测试网络, 即只建立私有测试环境
"keypoololdest": 1522663845, //预生成的公钥和私钥池的起始时间
"keypoolsize": 100, //预生成的公钥和私钥池的包含记录数量
//用于生成钱包地址和找零地址,这样钱包备份可以对已有的交易以及未来多笔交易有效

"paytxfee": 0.00000000, //每笔交易支付给矿工的最少标准手续费
"relayfee": 0.00001000, //节点运行错误
"errors": ""
}

bitcoin-cli -datadir=2 getinfo //第二个钱包节点信息,说明同上
{
"version": 130200,
"protocolversion": 70015,
"walletversion": 130000,
"balance": 0.00000000,
"blocks": 210,
"timeoffset": 0,
"connections": 1,
"proxy": "",
"difficulty": 4.656542373906925e-10,
"testnet": false,
"keypoololdest": 1522663845,
"keypoolsize": 100,
"paytxfee": 0.00000000,
"relayfee": 0.00001000,
"errors": ""
}
  • 5.模拟新产生一个区块记录
1
make generate
  • 6.模拟新产生200个区块记录
1
make generate BLOCKS=200
  • 7.查看最新的钱包状态,包括余额信息
1
make getinfo
  • 8.给示例钱包地址转账10个BTC
1
make sendfrom1 ADDRESS= mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ AMOUNT= 10
  • 9.模拟新产生10个区块记录,让上面的转账交易得到足够有效的确认。
1
make generate BLOCKS=10
  • 10.查看最新钱包余额信息
1
make getinfo
6.1.6 运行第一个示例程序

6.2 把握比特币“交易”数据结构

本节以比特币测试网络作为开发试验环境,解析比特币交易(Transaction)的数据结构,并以Node.js为例来说明如何自行组织特定需要的交易数据,并在签名后广播,最终被矿工节点确认生效。

6.2.1 了解比特币的“交易”数据结构
6.2.2 交易记录的实例解析
6.2.3 运行实例程序

6.3 实战:多重签名交易

6.3.1 将ODIN标识注册到区块链的实例解析
6.3.2 运行实例程序