本文在常用的Ubuntu14.04操作系统上,采用Docker容器来快速安装和配置私有节点的比特币测试网络(bitcoin-testnet)作为开发试验环境,结合Node.js为例来说明如何调用比特币钱包节点提供的RPC接口服务来实现一些具体的比特币相关账户和交易操作。
RPC(Remote Procedure Call)即远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
在Bitcoin的wiki网页上面( https://en.bitcoin.it/wiki/API_reference_(JSON-RPC) ),可以看到除了Node.js外还有很多种语言都可以调用Bitcoin的RPC,大家可以参考本文内容选择适合自己的语言具体试验。
在上面的网页里,还可以延伸阅读和了解Bitcoin RPC可以调用的命令列表(https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list)。
关于如何安装Ubuntu14.04操作系统和Node.js, 如有需要可以参考上一篇《比特币区块链开发由浅入深指南一》里面的说明进行安装( http://www.8btc.com/blockchain_develope_lesson_1 )。
一、安装Docker运行环境
1.使用apt-get命令安装Docker容器支持软件:
$sudo apt-get install docker.io
2.创建软连接
$sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
3.查看Docker版本
$docker –version
如看到提示信息类似“Docker version 1.6.2, build 7c8fca2”则说明你已经在Ubuntu14.04上面快速安装Docker成功了。
如需了解更多关于Docker安装和运行的入门说明可以网络搜索更多资料,也可以看看这个网页: “Docker初试”( http://my.oschina.net/lamciuloeng/blog/226107 )
二、安装和运行比特币测试网络(bitcoin-testnet)
1.下载比特币测试网络(bitcoin-testnet)的Docker镜像
$sudo docker pull freewil/bitcoin-testnet-box
2.运行Docker镜像
$sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box
注:上述命令中的19001和19011是配置给两个节点提供RPC服务的端口。
3.进入Docker运行环境后,输入下面的命令来启动比特币测试网络:
$ make start
启动成功后,将在本机模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。
输入下面的命令可以查看测试网络节点状态信息:
$ make getinfo
显示的提示信息如下,中文为对其中若干关键信息的说明:
bitcoin-cli -datadir=1 getinfo //第一个钱包节点的信息
{
“version”: 120100,
“protocolversion”: 70012,
“walletversion”: 60000,
“balance”: 0.00000000, //第一个钱包节点的账户余额,初始为0
“blocks”: 0, //已经产生的区块数量,初始启动为0,可以通过进一步的命令来模拟生成区块数据
“timeoffset”: 0,
“connections”: 1,
“proxy”: “”,
“difficulty”: 4.656542373906925e-10,
“testnet”: false,
“keypoololdest”: 1467253951,
“keypoolsize”: 101,
“paytxfee”: 0.00000000,
“relayfee”: 0.00001000,
“errors”: “”
}
bitcoin-cli -datadir=2 getinfo //第二个钱包节点的信息
{
“version”: 120100,
“protocolversion”: 70012,
“walletversion”: 60000,
“balance”: 0.00000000,
“blocks”: 0,
“timeoffset”: 0,
“connections”: 1,
“proxy”: “”,
“difficulty”: 4.656542373906925e-10,
“testnet”: false,
“keypoololdest”: 1467253951,
“keypoolsize”: 101,
“paytxfee”: 0.00000000,
“relayfee”: 0.00001000,
“errors”: “”
}
4.初始化和测试区块链数据
在Docker运行窗口里依次输入下面的命令来初始化创建基本的区块链数据,供进一步的程序示例来使用。
注意:在正式的比特币网络环境下,平均是10分钟左右才能产生一个新的区块。但在这里的测试网络(testnet)特殊设定的环境下,区块是通过简单的命令控制就可以即时和批量产生的,方便程序开发测试。
make generate
//说明:模拟新产生1个区块记录
make generate BLOCKS=200
//说明:模拟新产生200个区块记录
make getinfo
//说明:查看最新的钱包状态包括余额信息,这时可以留意看到第一个钱包节点的账户余额变为了 5050.00000000 BTC,即通过模拟区块挖矿产生的测试比特币。
make sendfrom1 ADDRESS=mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ AMOUNT=10
//说明:给指定测试钱包地址转账10个BTC。注意命令中的测试转账地址“mkiytxYA6kxUC8iTnzLPgMfCphnz91zRfZ”对应后续测试程序示例所需要使用的测试钱包地址。
make generate BLOCKS=10
//说明:模拟新产生10个区块记录,让上面的转账交易得到足够有效的确认
make getinfo
//说明:查看最新的钱包状态包括余额信息, 这时可以留意看到第一个钱包节点的账户余额变为了 5539.99996160 BTC ,即已经交易转账支出了10个BTC加上少许的矿工费用。
三、安装Node.js的RPC支持库
常用的Node.js的RPC支持库有多个,我们这里选用开源项目kapitalize。
在Ubuntu桌面新起一个终端命令行界面,输入以下命令进行安装:
$npm install kapitalize
关于kapitalize开源项目的更多说明可以参考: https://github.com/shamoons/Kapitalize
四、运行示例程序
将下述示例代码复制保存到测试环境下(保存文件名为RpcTestnet.js),在命令行下输入以下命令即可运行并看到运行结果:
node RpcTestnet.js
注意:每运行一次测试代码后,都需要到Docker运行环境的命令行下输入”make generate BLOCKS=10″, 模拟产生新的区块记录,让测试代码产生的交易记录得到有效的确认。
示例程序RpcTestnet.js源码如下(源码文件可以从这里下载):
/********************* 示例代码起始 **********************/
/********************* 示例代码结束 **********************/
在此程序的基础上,经过对Bitcoin协议的进一步了解,我们可以调用RPC接口进一步开发出更复杂功能,如自行构建特定交易数据包(比如多重签名数据)来满足特定业务需求,后续我们PPkPub将深入介绍。
稿源:巴比特资讯(http://www.8btc.com/ppkpub_blockchain_develope_lesson_2) 版权声明: 作者保留权利。文章为作者独立观点,不代表巴比特立场。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。