丸の内で働くブロックチェーンエンジニアのブログ

ブロックチェーンエンジニアとして働いています。勉強している技術情報やニュースを紹介します。

Bitcoin Cashの環境構築をDockerで行う

この記事では、Mac OS Sierra 10.12.6を使っています。

Bitcoinのsegwit2xの取りやめ、ビッグブロックの再評価などでBitcoin Cashが非常に盛り上がっていますね。Bitcoin Cashのマイニングをしたい方向けにBitcoin Cashのノード構築をdockerで行います。

Dockerによる仮想通貨のノード構築シリーズはこちらです。

qiita.com

www.blockchainengineer.tokyo

Dockerfileの作成(ダウンロード)

Bitcoin CashのDockerfileですが、最新バージョンにピタリと合うものがなかったので、先人のDockerfileをフォークして改造させていただきました。 作成したDockerfileの中身と解説はこちらです。 こちらgithubを参考にさせていただきました。

#ubuntu:17.10をベースにする
FROM ubuntu:17.10

#apt-add-repositoryコマンドをインストールするためにsoftware-properties-commonをインストールする
RUN apt-get update && \
    apt-get install -y software-properties-common

#bitcoincashのリポジトリを追加
#libstdc7のリポジトリを追加
RUN add-apt-repository ppa:bitcoin-abc/ppa && \ 
    add-apt-repository -y ppa:ubuntu-toolchain-r/test
#bitcoincashのdeamon,libstdc7を追加
RUN apt-get update && \
    apt-get install -y libstdc++-7-dev bitcoind

#デフォルトのVOLUMEマウント先
VOLUME ["/opt/bitcoinabc"] 

#デフォルトのポートエクスポート先
EXPOSE 8332 8333 18332 18333

#コンテナの実行コマンド
CMD ["/usr/bin/bitcoind", "--conf=/opt/bitcoinabc/bitcoind.conf", "--printtoconsole"]

今回作成したDockerfileはこちらのgithubリポジトリに公開しています。 手っ取り早くダウンロードするには、以下cloneコマンドを実行してください。

git clone https://github.com/naomasabit/bitcoincash-docker

Dockerのイメージをビルド

Dockerfileを配置したディレクトリで、以下コマンドを実行してdockerイメージをビルドします。

docker build -t bch-node . #bch-nodeという名前でdockerイメージを作成

うまくできていれば、docker imagesコマンドで存在を確認できます。

docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
bch-node             latest              67369fb84fa9        25 minutes ago      312MB

ビルドしたイメージのコンテナを作成

docker run コマンドでイメージのコンテナを作成します。

各オプションの説明

  • --name引数:コンテナの名称をつける。「--name=bitcoincash-docker」はbitcoincash-dockerという名称をつける。

  • -dオプション:バックグラウンドで動かす

  • -vオプション:ホスト上にvolumeをマウント(ダウンロードする大量のトランザクションなどをコンテナ外に出しておくことができまう) 「-v $HOME/bitcoincash-docker/bch-data:/opt/bitcoincash」はホストの「$HOME/bitcoincash-docker/bch-data」にコンテナ内の「/opt/bitcoincash」をマウントします。

  • -pオプション:エクスポートするポート番号を設定します。 「-p 127.0.0.1:18332:18332」は18332ポートをエクスポートします。
docker run --name=bitcoincash-docker \
 -v $HOME/bitcoincash-docker/bch-data:/opt/bitcoincash \
  -p 127.0.0.1:18332:18332 bch-node

docker psでコンテナができていることを確認します。

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
01e8c2eb01e2        bch-node            "/usr/bin/bitcoind..."   30 seconds ago      Up 29 seconds       8332-8333/tcp, 18333/tcp, 127.0.0.1:18332->18332/tcp   bitcoincash-docker

docker logsでビットコインキャッシュのダウンロードも進んでいることを確認します。

docker logs bitcoincash-docker
2017-11-14 13:03:47 Bitcoin ABC version v0.16.1.0-unk
2017-11-14 13:03:47 InitParameterInteraction: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1
2017-11-14 13:03:47 Assuming ancestors of block 00000000000000000553279251628c470a5b51de3bbbf336b20853025ffbf270 have valid signatures.
2017-11-14 13:03:47 Default data directory /root/.bitcoin
2017-11-14 13:03:47 Using data directory /root/.bitcoin
2017-11-14 13:03:47 Using config file /opt/bitcoinabc/bitcoind.conf
2017-11-14 13:03:47 Using at most 125 automatic connections (1048576 file descriptors available)
2017-11-14 13:03:47 Using 32 MiB out of 32 requested for signature cache, able to store 1048576 elements
2017-11-14 13:03:47 Using 32 MiB out of 32 requested for script execution cache, able to store 1048576 elements
2017-11-14 13:03:47 Using 2 threads for script verification
2017-11-14 13:03:47 scheduler thread start
....
2017-11-14 13:03:56 peer 0 uses CASH magic in its headers
2017-11-14 13:03:56 Pre-allocating up to position 0x100000 in rev00000.dat
2017-11-14 13:03:56 UpdateTip: new best=00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 height=1 version=0x00000001 log2_work=33.000022 tx=2 date='2009-01-09 02:54:25' progress=0.000000 cache=0.0MiB(1txo)
2017-11-14 13:03:56 UpdateTip: new best=000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd height=2 version=0x00000001 log2_work=33.584985 tx=3 date='2009-01-09 02:55:44' progress=0.000000 cache=0.0MiB(2txo)
2017-11-14 13:03:56 UpdateTip: new best=0000000082b5015589a3fdf2d4baff403e6f0be035a5d9742c1cae6295464449 height=3 version=0x00000001 log2_work=34.000022 tx=4 date='2009-01-09 03:02

これでノード構築ができました!

bitcoin-cliの動作確認

bitcoinと同じようにbashでコンテナの中に入って、bitcoin-cliのコマンドを叩いてみます。

bashでコンテナに入ります。

docker exec -i -t bitcoincash-docker bash

bitcoin-cliのコマンドを叩いて動作確認

bitcoin-cli getbestblockhash
000000000000015d7cc1a6e2098d9a3b35999d3d29547ff09955fef1f9451411

ダウンロードしてきている最新のブロックのハッシュ値が取れることを確認できました。

bitcoin-cliのコマンドはhelpで確認できます。

参考にしたサイト

bitcoinABC(bitcoincashの開発チームのパッケージ公開箇所

https://launchpad.net/~bitcoin-abc/+archive/ubuntu/ppa

bitcoincashのver0.15用Dockerfile

https://github.com/kp666/bitcoincash-docker