hiro99ma blog

何か技術的なこと

Bitcoin Core(bitcoind) を regtest で動かす

最終更新日: 2025/02/19

はじめに

よほど野心的でない限り Bitcoin のフルノードを自作しようとは思わないだろう。
ここでは最も一般的と思われる Bitcoin Core(bitcoind) のビルドとオプションについてメモを残す。
Ubuntu 22.04 (WSL2) で確認しているが、既にいろいろインストールされているのでビルドに不足しているツールがあるかもしれない。

現時点で Bitcoin Core の最新バージョンは v28.1 のためそれを使っていく。
以前のバージョン表記は v0.XX.YY(v0.21.2まで) だったが、比較的最近から vXX.YY(v22.0~) に変わった。 もし「v0.」で始まっている記事があっても、それがものすごく古いとは限らないことは覚えておいて良いだろう。 ただ記事の更新日時が新しいのに「v0.」の場合は単に日付だけ新しいだけなので気をつけよう。
基本的に、周辺アプリの互換性の都合以外で Bitcoin Core の古いバージョンを使う必要はほぼない。

リポジトリ

ビルド

前準備

$ sudo apt-get install \
  build-essential \
  libtool \
  autotools-dev \
  automake \
  pkg-config \
  bsdmainutils \
  python3 \
  libevent-dev \
  libboost-dev \
  libsqlite3-dev

ZMQ を使うなら libzmq3-dev もいるだろう。 私の環境ではインストールしていない状態でビルドしたところ、zmqpubrawblock を設定してもエラーにならずにポートが開いていなかったので無視されたようだ。

DB をどうするか悩むかもしれない。
新規環境だったりウォレットが無いのであればそのままにして、既に使っているウォレットがあるなら Berkeley DB を使うとよいだろう。 mainnet では内蔵のウォレットを使わない方がよいだろう。

Clone and Build

適当な場所に clone してリリースタグを checkout する。
master を使いたいかもしれないので、その辺りは自身の判断で。

$ git clone https://github.com/bitcoin/bitcoin.git
$ cd bitcoin
$ git checkout -b v28_1 refs/tags/v28.1

ビルドは configure のオプションを指定して make する。
オプションはいろいろあるので configure --help で確認すると良い。 GUI無しで $HOME/.local にインストールするならこういう感じだ。

./autogen.sh
./configure --prefix=$HOME/.local --without-gui
make
make install

設定と実行

ノードとして動作する bitcoind や 操作する bitcoin-cli は設定ファイル bitcoin.conf を参照する。
設定ファイルを使わず引数にしても同じことができるので、その辺りは自身の判断で。

regtest でしか使わないならこんな感じでよいだろう。

server=1
txindex=1
regtest=1
rpcuser=ほげほげ
rpcpassword=ふがふが
fallbackfee=0.00001000

rpcuserrpcpassword は JSON-RPC で通信したい場合に設定する。 代わりに rpcauth を使うこともできる。

$ ./share/rpcauth/rpcauth.py user pass
String to be appended to bitcoin.conf:
rpcauth=user:<省略>
Your password:
pass

$ ./share/rpcauth/rpcauth.py user2 pass2
String to be appended to bitcoin.conf:
rpcauth=user2:<省略>
Your password:
pass2

出力された rpcauth の行を bitcoin.conf にそれぞれ貼り付けて bitcoind を起動する。

$ curl --user user:pass --data-binary '{"jsonrpc": "2.0", "id": "curltest", "method": "getblockcount", "params": []}' -H 'content-type: application/json' http://127.0.0.1:18443/
{"jsonrpc":"2.0","result":0,"id":"curltest"}

$ curl --user user2:pass2 --data-binary '{"jsonrpc": "2.0", "id": "curltest", "method": "getblockcount", "params": []}' -H 'content-type: application/json' http://127.0.0.1:18443/
{"jsonrpc":"2.0","result":0,"id":"curltest"}

rpcauth でやったときは最初失敗していたのだが、気のせいだったのか?

おわりに

regtest で bitcoind を立ち上げる手順を説明した。

< Top page