こんにちは! Androidエンジニアの 内田 @yuikijp です
今回は、自社でホスティングしたBitcoin CashのInsight APIを使いたいということで、実際にメインネットで立ち上げてみました
Insight APIとはフルノードが持つ情報をAPIとして使えるようにしたもので、例えば任意のアドレスを渡すとそれに紐づくutxoを返すなどができます
Web上にまとまった手順が無かったので、備忘録としても残しておきます*1
環境
今回はEC2(t2.medium 500GB SSD Ubuntu 16.04)上で動かします
フルノードを動作させる必要があるので、メモリやストレージを結構使います*2
また、80
(HTTP) / 443
(HTTPS) / 22
(SSH) / 8333
(Bitcoin Mainnet) ポートを解放しておきます
フルノードのセットアップ
Insight APIを立ち上げるにはフルノードを立ち上げておく必要があります
本家bitcoin-abcのフルノードにはいくつかのinsight-api用のメソッドが無いため、それらが追加されたものを利用します
下記の手順でビルド&インストールしましょう💪
$ sudo apt update
$ sudo apt upgrade
$ wget https://api.github.com/repos/bitprim/bitcoin-abc/tarball/tag0.17.1-bitcore
$ tar -zxvf tag0.17.1-bitcore
$ cd bitprim-bitcoin-abc-4e118c1
$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libzmq3-dev libminiupnpc-dev
$ ./autogen.sh
$ ./configure --disable-wallet --without-gui
$ make -j4
*3$ sudo make install
~/.bitcoin/bitcoin.conf
フルノードの設定ファイルを以下のように記述します
各項目にindexを貼るようにすることでutxo
等を算出するクエリが速く実行できるようになります
今回RPCは利用しませんが、 rpcuser
と rpcpassword
は任意のものに変更しておいてください
server=1 txindex=1 addressindex=1 timestampindex=1 spentindex=1 zmqpubrawtx=tcp://127.0.0.1:28332 zmqpubhashblock=tcp://127.0.0.1:28332 rpcuser=satoshi rpcpassword=satoshi usecashaddr=0
Insight APIのセットアップ
bitcoreをインストールすることでInsight APIを利用することができるようになります
手順としては、まず推奨されているNodeのバージョン4をnvmでインストールします
その後、npmでbitcore及びbitcore-nodeをインストールしていきます
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
$ source ~/.bashrc
$ nvm install 4
$ nvm use 4
$ sudo apt install python
$ npm install -g bitcore bitcore-node
bitcore ノード立ち上げ
まず、bitcoreのワーキングディレクトリを作ります
$ bitcore create bchfullnode
$ cd bchfullnode
$ bitcore install insight-api
bchfullnode/bitcore-node.json
bitcoreを立ち上げる前に、bitcoreの設定をしましょう
以下を参考にしてください
ここで一番重要なのがexec
の項目で、ビルドしたbitprim/bitcoin-abcのフルノードの実行ファイルを指定する必要があります
{ "network": "livenet", "port": 3001, "services": [ "bitcoind", "insight-api", "web" ], "servicesConfig": { "insight-api": { "disableRateLimiter": true, "routePrefix": "api/bch" }, "bitcoind": { "spawn": { "datadir": "/home/ubuntu/.bitcoin", "exec": "/usr/local/bin/bitcoind" } } } }
設定が終わったら、bitcore start
でInsight API及びフルノードを立ち上げます
初回はメインチェーンの同期に数日かかってしまいますが、根気よく待ちましょう💪*4
同期が終わると最新のブロックチェーンの情報が取得できるようになります
例えば直近のブロックのリストは以下のURLから取得できます
http://localhost:3001/api/bch/blocks/
他にもいろいろな情報が取得できるので、公式サイトを参考にしてみてください! github.com
追加でやったこと
外部から利用できるようにいくつか追加で作業を行いました
参考になれば…!
- 再起動時自動起動(cron)
- 独自ドメイン対応
- SSL対応(Nginx)
- 443ポートから80ポートにフォワーディング(Nginx)
- サーバエラー通知(Slack)
まとめ
Insight APIを初めて立ち上げて見ましたが、こうやってブロックチェーンの情報を利用できるのはなかなか面白いですね!
フルノードの同期に時間がかかってしまうのがそこそこ大変ではありますが…
ただこういう風に誰でもフルノードやInsight APIを立ち上げることができるところにBitcoin、ブロックチェーンの面白さがありますね!
Hiring
弊社ではビットコイン、ブロックチェーンに興味があるエンジニアを探しています!
少し話を聞いてみたいという方からのご応募もお待ちしております!
www.wantedly.com
参考
- https://github.com/bitprim/bitcoin-abc/blob/tag0.17.1-bitcore/doc/build-unix.md
- https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File
- https://bitcore.io/guides/bitcoin/
- https://github.com/creationix/nvm
- https://bitcore.io/guides/full-node/
- https://github.com/bitpay/insight-api
*1:と思っていたら、この記事を書いている間に手順(https://github.com/osagga/bch-bitcore-setup/blob/master/README.md)が上がっていました...
*2:現時点でストレージは300GB程度使用しています
*3:マシンのコア数*2を設定するといい感じにビルドが速くなります
*4:インデックスを貼っているので通常のフルノードの同期より時間がかかります