如何部署Qtum量子鏈節點
本教程包含Qtum量子鏈的部署、執行以及RPC呼叫等內容。
教程假設讀者能夠熟練使用Linux,Mac或Windows命令列。若您不符合此要求,或只關心Qtum qt錢包的使用方法,請參考另一篇Qtum錢包使用教程。
獲取Qtum節點
可以通過以下四種方法之一獲得Qtum節點程式:
1. 直接下載二進位制檔案
如果你並不關心Qtum的原始碼,部署Qtum節點最方便的方法是在Qtum release page(點選開啟)下載最新的二進位制檔案,目前支援的平臺包括Linux,Windows,OSX。建議選擇最新版進行下載,本教程以撰寫時的最新版v0.14.13為例。
(注意,你所看到最新版的版本號可能不同,如這裡是0.14.13,其他字串保持不變)
- Mac使用者請下載:
qtum-0.14.13-osx64.tar.gz
- Linux使用者請下載:
qtum-0.14.13-i686-pc-linux-gnu.tar.gz
(32位)或qtum-0.14.13-x86_64-linux-gnu.tar.gz
(64位) - Windows使用者請下載:
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節點可執行檔案。
2. Linux可通過apt安裝
具體教程可參見github.com/qtumproject…,目前支援的平臺為Ubuntu,Debian和Mint。
樹莓派使用者也可以通過apt安裝,具體教程參見github.com/qtumproject…。
按照教程安裝完畢後,可以通過直接從命令列呼叫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呼叫
部署Qtum節點
Docker容器的使用方法略有不同,但原理一致。讀者可參考另一教程《如何用docker執行qtum節點》。
下面以Ubuntu為例,部署Qtum節點。Mac和Windows命令列與Linux保持一致,不再贅述。
通過./qtumd
, 即可執行Qtum全節點:
./qtumd -daemon
複製程式碼
其中-daemon
表示程式後臺駐留。如果使用者想通過節點檢視合約相關events(如檢視收發QRC20代幣的記錄等),可以在執行qtumd
時新增-logevents
選項。
更多選項,可通過以下命令檢視:
./qtumd -help
複製程式碼
結束執行請執行:
./qtum-cli stop
複製程式碼
不同平臺的預設的資料路徑不同:
- Linux:
~/.qtum/
- Mac OSX:
~/Library/Application Support/Qtum
- Windows:
%APPDATA%\Qtum
首次執行如果預設路徑不為空,請清空之後再執行節點(清空即刪除路徑下所有檔案,清空前注意備份!)。讀者也可以通過-datadir
選項指定資料路徑。
首次執行需要同步所有區塊,節點執行日誌路徑為~/.qtum/debug.log
。
本地RPC呼叫
節點正常執行後,可通過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
複製程式碼
RPC呼叫設定
通過./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呼叫例項
設定完成並重新執行節點後,即可進行遠端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呼叫設定全部完成。
Nginx配置例項(選讀)
從上文例項可以看出,rpc命令必須包含rpc使用者名稱,密碼,並指定埠號3889。如果想部署通用API,避免輸入使用者密碼及埠號,可以考慮用Nginx實現。這樣做的好處是可以隱藏使用者名稱和密碼,當使用者名稱密碼甚至是埠號發生改變時,也不影響api,同時還可以對外部rpc呼叫進行適當過濾,保證安全性。關於Nginx的安裝和基本使用,可自行搜尋相關教程。
例如,
- 執行Qtum節點的服務端ip為
192.168.77.188
,節點正常執行 - api代理端ip為
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呼叫時遇到問題,可優先參考以下實用命令或文件:
- 編譯問題參考文件: github.com/qtumproject…。
- 檢視qtumd的所有選項:
./qtumd -help
- 檢視所有rpc命令:
./qtum-cli help
- 檢視某rpc命令使用說明(如getinfo):
./qtum-cli help getinfo
- 配置檔案示例:qtum.conf(點選開啟)