本教程包含Qtum量子链的部署、运行以及RPC调用等内容。html
教程假设读者可以熟练使用Linux,Mac或Windows命令行。若您不符合此要求,或只关心Qtum qt钱包的使用方法,请参考另外一篇Qtum钱包使用教程。linux
能够经过如下四种方法之一得到Qtum节点程序:git
1. 直接下载二进制文件github
若是你并不关心Qtum的源码,部署Qtum节点最方便的方法是在Qtum release page(点击打开)下载最新的二进制文件,目前支持的平台包括Linux,Windows,OSX。建议选择最新版进行下载,本教程以撰写时的最新版v0.14.13为例。docker
(注意,你所看到最新版的版本号可能不一样,如这里是0.14.13,其余字符串保持不变)json
qtum-0.14.13-osx64.tar.gz
qtum-0.14.13-i686-pc-linux-gnu.tar.gz
(32位)或qtum-0.14.13-x86_64-linux-gnu.tar.gz
(64位)qtum-0.14.13-win32.zip
(32位)或qtum-0.14.13-win64.zip
(64位)qtum-0.14.13-arm-linux-gnueabihf.tar.gz
下载压缩包解压后,<解压路径>/bin/
下包含qtumd
和qtum-cli
,即为本教程要用到的Qtum节点可执行文件。ubuntu
2. Linux可经过apt安装api
具体教程可参见github.com/qtumproject…,目前支持的平台为Ubuntu,Debian和Mint。安全
树莓派用户也能够经过apt安装,具体教程参见github.com/qtumproject…。bash
按照教程安装完毕后,能够经过直接从命令行调用qtumd
和qtum-cli
等。
3. 经过源代码编译
若是你想从源代码直接编译Qtum,能够从Github上下载最新源码: github.com/qtumproject…。
具体编译方法请参考 github.com/qtumproject…。目前支持较好的编译平台包括Linux和OSX。其余平台的依赖环境可能有所不一样。
编译成功后,在<path>/src
路径下一样获得上文的二进制可执行文件:qtumd
,qtum-cli
。
4. 经过Docker获取qtum镜像
关于docker安装和使用方法请参照docker官方教程。这里假设docker环境已正确安装。
Qtum官方在docker hub上的镜像为qtum/qtum
,可经过如下命令获取:
docker pull qtum/qtum:latest
复制代码
经过上文方法获取qtum可执行程序,其中与节点部署及RPC调用相关的是:
qtumd
:Qtum核心程序,即真正的Qtum全节点程序qtum-cli
:Qtum命令行接口,能够和Qtum核心程序进行交互,实现本地RPC调用Docker容器的使用方法略有不一样,但原理一致。读者可参考另外一教程《如何用docker运行qtum节点》。
下面以Ubuntu为例,部署Qtum节点。Mac和Windows命令行与Linux保持一致,再也不赘述。
经过./qtumd
, 便可运行Qtum全节点:
./qtumd -daemon
复制代码
其中-daemon
表示进程后台驻留。若是用户想经过节点查看合约相关events(如查看收发QRC20代币的记录等),能够在运行qtumd
时添加-logevents
选项。
更多选项,可经过如下命令查看:
./qtumd -help
复制代码
结束运行请执行:
./qtum-cli stop
复制代码
不一样平台的默认的数据路径不一样:
~/.qtum/
~/Library/Application Support/Qtum
%APPDATA%\Qtum
首次运行若是默认路径不为空,请清空以后再运行节点(清空即删除路径下全部文件,清空前注意备份!)。读者也能够经过-datadir
选项指定数据路径。
首次运行须要同步全部区块,节点运行日志路径为~/.qtum/debug.log
。
节点正常运行后,可经过qtum-cli
进行交互,实现本地RPC调用。 例如:
oldclock@raven:~/qtum-0.14.3/bin$ ./qtum-cli getinfo
{
"version": 140300,
"protocolversion": 70016,
"walletversion": 130000,
"balance": 0.00000000,
"stake": 0.00000000,
"blocks": 12126,
"timeoffset": 0,
"connections": 8,
"proxy": "",
"difficulty": {
"proof-of-work": 1.52587890625e-05,
"proof-of-stake": 886731.5868738915
},
"testnet": false,
"moneysupply": 100028504,
"keypoololdest": 1505186997,
"keypoolsize": 100,
"paytxfee": 0.00000000,
"relayfee": 0.00400000,
"errors": ""
}
复制代码
获取全部RPC命令列表,请运行:
./qtum-cli help
复制代码
获取RPC调用的使用说明,请使用./qtum-cli help <RPCcmd>
,例如:
./qtum-cli help getinfo
复制代码
经过./qtum-cli help getinfo
咱们能够获取经过jsonrpc实现getinfo调用的使用说明:
Examples:
> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:3889/
复制代码
实例中给出了json报文的详细格式,但默认条件下没法进行调用。只有在设置rpc用户名和密码后,才可正常使用。设置方法以下:
方法一:新建配置文件~/.qtum/qtum.conf
,内容包含
rpcuser=test #rpc用户名
rpcpassword=test1234 #rpc密码
#以上两项必须设置。默认状况下,只容许本地的RPC链接,
#要实现远程调用,可经过设置rpcallowip声明全部容许访问的ip
#ipv4和ipv6均可设置,且但是设置多个ip。例如:
#rpcallowip=192.168.77.51/255.255.255.0
#rpcallowip=1.2.3.4/24
#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96
复制代码
更多配置参数能够参考:qtum.conf实例(点击打开)
设置完成后,重启节点即完成配置。
方法二:从新运行Qtum节点,并加入特定参数:
./qtumd -rpcuser=test -rpcpassword=test1234 -rpcallowip=192.168.77.51/255.255.255.0
复制代码
各参数含义与配置文件中相同,再也不赘述。
设置完成并从新运行节点后,便可进行远程RPC调用。本文中运行Qtum节点的服务器ip为192.168.77.188,默认端口为3889。例如,在macbook上对ubuntu中运行的Qtum节点进行rpc调用,将返回和本地调用相同结果:
zhongwenbins-MacBook-Pro:~ zhongwenbin$ curl --user test:test1234 --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://192.168.77.188:3889/
{"result":{"version":140300,"protocolversion":70016,"walletversion":130000,"balance":0.00000000,"stake":0.00000000,"blocks":12197,"timeoffset":0,"connections":8,"proxy":"","difficulty":{"proof-of-work":1.52587890625e-05,"proof-of-stake":650787.7561123729},"testnet":false,"moneysupply":100028788,"keypoololdest":1505186997,"keypoolsize":100,"paytxfee":0.00000000,"relayfee":0.00400000,"errors":""},"error":null,"id":"curltest"}
复制代码
用postman等工具可看到更加直观的效果:
自此Qtum节点的部署及rpc调用设置所有完成。
从上文实例能够看出,rpc命令必须包含rpc用户名,密码,并指定端口号3889。若是想部署通用API,避免输入用户密码及端口号,能够考虑用Nginx实现。这样作的好处是能够隐藏用户名和密码,当用户名密码甚至是端口号发生改变时,也不影响api,同时还能够对外部rpc调用进行适当过滤,保证安全性。关于Nginx的安装和基本使用,可自行搜索相关教程。
例如,
192.168.77.188
,节点正常运行192.168.77.51
,已安装Nginx设置步骤以下:
1.设置服务端Qtum节点的rpc配置文件(参考上文),将api代理端的ip加入rpcallowip中,并重启节点,例如:
rpcuser=test
rpcpassword=test1234
rpcallowip=192.168.77.51/255.255.255.0
复制代码
2.配置代理端Nginx:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.77.188:3889; #反代到端口3889
proxy_set_header Authorization "Basic dGVzdDp0ZXN0MTIzNA=="; #本例中为test:test1234的base64编码
}
}
复制代码
3.设置完成后,直接访问代理端便可进行RPC调用(无需输入用户名密码和端口号),如:
zhongwenbins-MacBook-Pro:~ zhongwenbin$ curl --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://192.168.77.51/
{"result":{"version":140300,"protocolversion":70016,"walletversion":130000,"balance":0.00000000,"stake":0.00000000,"blocks":12250,"timeoffset":0,"connections":8,"proxy":"","difficulty":{"proof-of-work":1.52587890625e-05,"proof-of-stake":651324.7815933984},"testnet":false,"moneysupply":100029000,"keypoololdest":1505186997,"keypoolsize":100,"paytxfee":0.00000000,"relayfee":0.00400000,"errors":""},"error":null,"id":"curltest"}
复制代码
以上设置实例仅供参考,读者可根据自身需求做更多设置,或是选择其它工具代替。
读者在部署节点或RPC调用时遇到问题,可优先参考如下实用命令或文档:
./qtumd -help
./qtum-cli help
./qtum-cli help getinfo