hiro99ma blog

何か技術的なこと

bitcoin: ノードを立てる (2)

2024/12/15

image

はじめに

前回はぐだぐだして終わったので、もう少しちゃんとやろう。
ちなみに立てるのは 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 を使うのがほとんどだろう。

ここでは rpcuserrpcpassword を設定したが、rpcauth の方が

おわりに

URL は bitcoind v0.28 にしているので、後から見た人は古くなってるかもしれない。

< Top page