BitShares API 伺服器架設指南(一)

買賣虛擬貨幣

這篇是 BitSharesAPI 伺服器架設指南 文章系列中的第一篇,個人篇。後面還會 公共API伺服器 的搭建指南。



作者:@boombastic

受 @abit 的交易所對接指南啟發,也寫一篇關於API伺服器搭建的指南。希望可以幫助到有需要的人。以下示例均在 linux 或者 mac 作業系統上測試執行透過,但沒有在 windows 下進行過測試,但是原理是相同的,至多是具體路徑寫法略有差別,請 windows 使用者自行調整。

        我們這裡談到的 API 伺服器,實際上有以下幾種用法,不同的用法,硬體要求及配置上有很大不同:

       1.    個人使用
       主要是個人使用者在使用輕錢包或者網頁錢包時,使用執行在本地,獨佔使用的API伺服器。現代的個人電腦配置基本就足夠了。


       2.    公共 API 伺服器

       提供一個公共的API伺服器,向公眾開放服務。一般需要是託管在IDC的伺服器或者從雲服務提供商那裡租賃的VPS,對配置頻寬都有一定要求。


       寫著寫著發現篇幅很長,所以分成 2 篇獨立的文章,一篇講個人設定,一篇講公共API伺服器的搭建。


配置供個人使用的API伺服器

       在自己的本地伺服器上執行一個witness_node節點,並偵聽本地埠。該節點僅供使用者個人使用,所以速度飛快。


一、硬體要求

8G 記憶體(越多越好)
50G 硬碟


二、安裝相關依賴並下載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

在前面加上固定的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.102851.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發出請求,獲取#1block摘要

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

  • 比如altbtsbot


總結

        在本機執行個人API服務,為自己的客戶端提供本地的(網路延遲幾乎可忽略)、獨佔的(不和其他使用者分享)的API資料來源,會讓你對錢包的體驗更進一層。但是每次使用客戶端前,需要手動啟動witness_node並等待它和網路同步資料,如果使用頻率比較高,那麼同步很快完成,如果距上次同步有段時間了,比如幾個月,那需要等個幾分鐘到幾十分鐘也能迅速同步完畢。

        這篇是 BitSharesAPI 伺服器架設指南 文章系列中的第一篇,個人篇。後面還會公共API伺服器 的搭建指南。

        如果你喜歡這篇教程,請為我的見證人投票,在 BitShares 網路上,我的見證人叫 mr.agsexplorer

我同時維護著一個公共網頁錢包 https://bitshares.dacplay.org

以及一組公共 API 伺服器 wss://bitshares.dacplay.org/ws


未完待續.......

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;