bitcoin: ノードを立てる (2)
2024/12/15
はじめに
前回はぐだぐだして終わったので、もう少しちゃんとやろう。
ちなみに立てるのは regtest のノードである。
regtest ?
Bitcoin には主に mainnet, testnet3, testnet4, signet, regtest というネットワークがある。
regtest は “regression test” の略らしい。
localhost で立てて、外部ネットワークとはつながず、もちろんお金的な価値もない。
ブロック生成はコマンド一発でできるので時間がかかったり計算が重たかったりしない。
気に入らなかったらデータを消してまたやり直せば良い。
そういうテストの中でもかなり閉じた動作をさせたいときに使う。
ユニットテストで使われるくらいには手軽である。
準備
お手軽に Polar
Polar というアプリがあり、GUI でぽちぽちやると regtest の Bitcoin ノードを立ち上げることができる。
元々は Lightning Network という Bitcoin ブロックチェーンを利用したネットワークの評価などに使うツールなのだが、bitcoind
だけ立ち上げることもできる。
bitcoind
は docker コンテナ上で動作しているのでポート番号やファイルの場所は素で立ち上げた bitcoind
とは違うところが注意するところか。
立ち上げるのは簡単であるが、bitcoind
を立ち上げ慣れた後に使った方がよいかもしれない。
標準的なやり方がわかっていないと応用が利かないし、そもそもなんだかよくわからないと思う。
dockerコンテナ
Polar での bitcoind
が docker コンテナなので、それを使うのもよいだろう。
探すといろいろ出てくるとは思うが、たぶん bitcoind のオリジナル が提供している docker コンテナはないはずだ。
ビルド済みのバイナリ を提供しているのがせいぜいである。
基本的には「自分でソースコードからビルドしてね」という世界である。
バイナリ
ビルド済みのバイナリ をダウンロードして実行することもできる。
自分でビルド
ソースコードをダウンロードして自分でビルドすることもできる。
ビルドの仕方はこの辺の “build” で始まるドキュメントを探すと良いだろう。
開発中のソースコードではなくリリースされた tag を使うようにする。
bitcoind
以外に btcd という実装もある。
私が知っているのはそのくらいである。
bitcoin.conf
bitcoind
をそのまま実行すると標準の設定で mainnet として起動する。
オプションを付ければ regtest として立ち上げることはできるが、
regtest を使うということは開発するのに使うことになるので
いろいろと設定するのが普通だろう。
その設定ファイルが bitcoin.conf
というファイルである。
doc/bitcoin-conf.md にフォーマットは書いてあるものの
どういうパラメータがあるかは bitcoind
の help を見ながら調べることになる。
さすがにつらいので、doc/bitcoin-conf.md の下の方に書いてあるようにスクリプトを使って吐き出してもらったり、
Bitcoin Core Config Generator のようなサイトで作るのが簡単か。
~/.bitcoin/bitcoin.conf
をこのようにしておく。
server=1
[main]
[test]
[regtest]
rpcuser=user
rpcpassword=passwd
fallbackfee=0.00001
コンソールから bitcoind
を regtest で起動。
$ bitcoind -regtest
別のコンソールで JSON-RPC API を実行して動作確認することができる。
これは getblockchaininfo
というコマンドで、コマンドラインから bitcoin-cli getblockchaininfo
とやっても取得できる。
$ curl --user user:passwd --data-binary '{"jsonrpc": "2.0", "id": "curltest", "method": "getblockchaininfo", "params": []}' -H 'content-type: application/json' http://127.0.0.1:18443
{"jsonrpc":"2.0","result":{"chain":"regtest","blocks":0,"headers":0,"bestblockhash":"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206","difficulty":4.656542373906925e-10,"time":1296688602,"mediantime":1296688602,"verificationprogress":1,"initialblockdownload":true,"chainwork":"0000000000000000000000000000000000000000000000000000000000000002","size_on_disk":293,"pruned":false,"warnings":[]},"id":"curltest"}
JSON-RPC API のコマンドも bitcoin-cli
のコマンドもほぼ同じことができると思う。
bitcoin-cli
はほぼ JSON-RPC API を実行するだけのコマンドで、JSON-RPC API が使えるならば使わなくてもよい。
ちょっとしたシェルスクリプトだったり手元で確認するときは bitcoin-cli
を使うが、プログラムで実装するときは JSON-RPC API を使うのがほとんどだろう。
ここでは rpcuser
と rpcpassword
を設定したが、rpcauth の方が
おわりに
URL は bitcoind
v0.28 にしているので、後から見た人は古くなってるかもしれない。