這篇是 BitSharesAPI 伺服器架設指南 文章系列中的第一篇,個人篇。後面還會 公共API伺服器 的搭建指南。
作者:@boombastic
受 @abit 的交易所對接指南啟發,也寫一篇關於API伺服器搭建的指南。希望可以幫助到有需要的人。以下示例均在 linux 或者 mac 作業系統上測試執行透過,但沒有在 windows 下進行過測試,但是原理是相同的,至多是具體路徑寫法略有差別,請 windows 使用者自行調整。
我們這裡談到的 API 伺服器,實際上有以下幾種用法,不同的用法,硬體要求及配置上有很大不同:
1. 個人使用 2. 公共 API 伺服器
提供一個公共的API伺服器,向公眾開放服務。一般需要是託管在IDC的伺服器或者從雲服務提供商那裡租賃的VPS,對配置頻寬都有一定要求。
寫著寫著發現篇幅很長,所以分成 2 篇獨立的文章,一篇講個人設定,一篇講公共API伺服器的搭建。
配置供個人使用的API伺服器
在自己的本地伺服器上執行一個witness_node節點,並偵聽本地埠。該節點僅供使用者個人使用,所以速度飛快。
一、硬體要求
8G 記憶體(越多越好) 二、安裝相關依賴並下載BitShares原始碼編譯 Mac OSX上的方法 # Mac OSX 作業系統上 # 來源: https://github.com/bitshares/bitshares-core/wiki/Building-on-OS-X # 安裝 brew /usr/bin/ruby -e "$(curl-fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew doctor brew update # 安裝編譯需要的依賴 brew install boost cmake gitopenssl autoconf automake brew link --force openssl # 下載 BitShares 原始碼並編譯 # 這裡,我們假設將目的地目錄設定在 /path/to/bts_source,可根據需要修改 cd /path/to/bts_source # 獲取原始碼 git clonehttps://github.com/bitshares/bitshares-core cd bitshares-core # 獲取依賴的子模組程式碼 git submodule update --init--recursive cmake . # 編譯witness_node程式,如果make後面不加引數,則編譯所有預設程式,也包括了cli_wallet, delayed_node 等程式,這現在場景下不需要 make witness_node
編譯完成後witness_node程式在programs/witness_node/目錄下可以找到。這個程式可以複製到其他目錄也可以獨立執行。
關於Mac下的安裝詳細說明,https://github.com/bitshares/bitshares-core/wiki/Building-on-OS-X
關於Windows下的安裝說明,https://github.com/bitshares/bitshares-core/wiki/BUILD_WIN32
關於Ubuntu下的安裝說明,https://github.com/bitshares/bitshares-core/wiki/BUILD_UBUNTU 三、啟動witness_node節點 時間校準 witness_node節點的執行要求當前的機器校準時間,如果是桌面作業系統,無論是 mac 或是 windows,請確認系統時間已自動同步,linux 系統安裝ntp服務實現。
sudo apt-get install ntp 配置並啟動
我們先來看一下witness_node啟動時需要配置哪些引數
# 注意我們的下載和編譯路徑 cd /path/to/bts_source/programs/witness_node # -h 引數返回witness_node程式啟動時支援的執行引數 ./witness_node -h # 其中這幾條是我們關心的 -d [ --data-dir ] arg (="witness_node_data_dir") 指定資料及配置檔案儲存的目錄,預設witness_node_data_dir. --replay-blockchain 重發所有已下載的區塊並重建索引,非常耗時。當意外中斷後重啟會強制進行,所以儘量不要強制中斷,按了Ctrl+C之後稍等一會兒等程式完成收尾工作後優雅退出。 --resync-blockchain 刪除所有已下載資料,重新同步區塊鏈。 --rpc-endpoint [=arg(=127.0.0.1:8090)] RPC偵聽地址及埠 Options for plugin account_history: --track-account arg 追蹤指定AccountID的交易歷史(可多次設定) -d引數設定資料及配置儲存的目錄。 --track-account引數的意思是我們只關心特別指定的賬戶的歷史交易資訊,其他賬戶的歷史交易資訊我不需要。這樣就可以大大節省記憶體開支。
既然是本地API只為我一個人服務,那隻需要追蹤我自己的賬戶就好了。因為我有2個賬戶,所以設定了2遍,如果你只有一個或者更多,則可以相應調整該引數。那麼這個ID從哪裡來呢,你可以從網頁錢包中快速找到,比如我的賬戶名叫mr.agsexplorer,訪問網頁錢包https://bitshares.dacplay.org/account/mr.agsexplorer/overview在賬戶下面有個#ID。
主要是個人使用者在使用輕錢包或者網頁錢包時,使用執行在本地,獨佔使用的API伺服器。現代的個人電腦配置基本就足夠了。
50G 硬碟
在前面加上固定的1.2.,mr.agsexplorer的完整的Account ID就有了1.2.10285。後面的另一個ID也是同樣的道理,是屬於mrs.agsexplorer。你可以試一試,看看她的ID是不是10286。
--partial-operations這個引數是最近在程式碼庫中的增加的,-h裡還沒有顯示。這個引數指示只需要部分的資料,配合track-account引數一起使用可以大大降低本機記憶體負荷。如果不加這兩個引數,目前情況下記憶體需求大約在24G左右,實際上如果記憶體不足,無法執行;如果使用了這2個引數,內容負荷最少可達到1.4G。
track-account可以重複多次以追蹤多個賬戶。
--rpc-endpoint這個引數設定我們的本地API伺服器為客戶端提供資料的地址和設定,預設的設定是127.0.0.1:8090也就是隻在本地的8090埠提供服務,我們就採用這個預設設定。
--rpc-endpoint後面不填內容,就使用預設值;但是--rpc-endpoint必須要寫,否則節點啟動後就不開放Websocket RPC服務了。 所以,我們最終的啟動命令看上去是這樣的 # 進入工作目錄 cd /path/to/bts_source/witness_node # 啟動命令及引數 ./witness_node -d ./node_data --partial-operations true --track-account '"1.2.10285"'--track-account '"1.2.10286"' --rpc-endpoint
綜合上面的說明,這段啟動命令的大意就是:把資料和配置檔案放在當前目錄下的node_data子目錄中,啟動節點後只追蹤1.1.10285和1.2.10286這2個賬戶,其他的不關心,並用預設設定開放WebsocketRPC服務。
節點啟動後,就需要耐心等待區塊同步。在未完成同步之前,如果嘗試使用客戶端進行連線,也能連,但是會出現“區塊資料陳舊或時鐘不準”的錯誤提示。
為了每次啟動時不需要輸入這麼多命令,我喜歡建立一個指令碼run.sh,把具體命令寫在裡面,以後只需要執行該指令碼就可以了。
#!/usr/bin/env bash ./witness_node -d ./node_data --partial-operations true --track-account'"1.2.10285"' --track-account '"1.2.10286"' --rpc-endpoint
上面是run.sh指令碼檔案的內容,把run.sh檔案放置在 witness_node同一個目錄就可以了,注意要給run.sh可執行許可權。
chmod +x run.sh
以後每次要啟動時,我就這樣
cd /path/to/bts_source/programs/witness_node ./run.sh
節點啟動後,我們可以嘗試透過命令列來測試連線
# 使用curl命令來測試,向localhost:8090發出請求,獲取#1號block摘要 curl http://localhost:8090 -d '{"jsonrpc": "2.0","method": "get_block", "params": [1],"id": 1}' # 應該返回一個JSON結構體 {"id":1,"jsonrpc":"2.0","result":{"previous":"0000000000000000000000000000000000000000","timestamp":"2015-10-13T14:12:24","witness":"1.6.8","transaction_merkle_root":"0000000000000000000000000000000000000000","extensions":[],"witness_signature":"1f53542bb60f1f7a653bac70d6b1613e73b9adc952031e30e591e601dd60d493ba5c9a832e155ff0c40ea1dd53512e9f93bf65a8191497ea67d701bc2502f93af7","transactions":[]}} # 這就表示我們的節點能夠正常提供資料服務了 四、客戶端的連線
這裡的客戶端泛指資料消費端,表現形式不一,但是都包含一個資料來源指向的設定,即從哪裡獲得資料,在我們的例子裡,資料來源的設定就是ws://localhost:8090, ws開頭表示使用websocket協議。
客戶端的形態包括:提供網頁錢包的網站,如
官方錢包:https://bitshares.org/wallet
Transwiser支援錢包:https://bts.transwiser.com
DACPLAY支援錢包:https://bitshares.dacplay.org
位元帝國支援錢包:https://bit.btsabc.org
OpenLedger支援錢包:https://bitshares.openledger.info
請注意選擇第二行的Locally hosted(ws://127.0.0.1:8090),這裡需要說明一下 127.0.0.1就是localhost兩者是等價的。選擇完畢後,介面會重新重新整理下,就可以享受本地獨佔API服務了,速度又快又好。(選擇資料來源)
輕錢包
可以下載後獨立執行的錢包UI程式,https://github.com/bitshares/bitshares-core/releases/tag/2.0.170606
設定方法同上
命令列錢包 cli_wallet: ./cli_wallet -s localhost:8090 其他各種程式 curl: curl -d '{"jsonrpc": "2.0", "method": "info", "params": [], "id": 1}' http://localhost:8090 http://127.0.0.1:8093/rpc
比如alt的btsbot 總結
在本機執行個人API服務,為自己的客戶端提供本地的(網路延遲幾乎可忽略)、獨佔的(不和其他使用者分享)的API資料來源,會讓你對錢包的體驗更進一層。但是每次使用客戶端前,需要手動啟動witness_node並等待它和網路同步資料,如果使用頻率比較高,那麼同步很快完成,如果距上次同步有段時間了,比如幾個月,那需要等個幾分鐘到幾十分鐘也能迅速同步完畢。
這篇是 BitSharesAPI 伺服器架設指南 文章系列中的第一篇,個人篇。後面還會公共API伺服器 的搭建指南。
如果你喜歡這篇教程,請為我的見證人投票,在 BitShares 網路上,我的見證人叫 mr.agsexplorer。
我同時維護著一個公共網頁錢包 https://bitshares.dacplay.org 以及一組公共 API 伺服器 wss://bitshares.dacplay.org/ws
未完待續.......