本記事では、Docker Compose 上に Bitcoin Core(Regtest)と BTC-RPC-Explorer を立ち上げ、ローカルでビットコインの動作を確認する手順を解説しています。
- Docker Compose:
複数のDockerコンテナをまとめて定義・実行するためのツールです。 - Bitcoin Core(Regtest):
Bitcoin Coreが提供するテストネットワークモードの一つで、開発やテストのためにブロックの生成などを自由にコントロールできる環境です。
(ローカル完結型のテストチェーン。マイニング報酬やテスト送金が自由に行える。) - BTC-RPC-Explorer:
ビットコインのブロックチェーンデータ(ブロックやトランザクション)をウェブブラウザから探索・可視化するためのWeb UIツールです。
通常、Bitcoin CoreのRPCインターフェースに接続してデータを取得します。
実行環境
この記事では、Windows 11にDocker Desktopをインストールし、WSL2の環境にUbuntuをセットアップして、作業しています。
- Docker Desktopのインストール:
WindowsにDocker Desktopをインストールする方法 - WSL2:
WSL2 (Windows Subsystem for Linux 2) は、Microsoft が提供する Windows の機能で、Windows 上で Linux 環境を直接実行できるようにするものです。
Docker Desktopをインストールする過程でこれらは自動的に設定されます。 - Ubuntu(Linux):
WSL2環境にUbuntu(Linux)をセットアップし、Windows Terminalのターミナル画面から操作します。
WSL を使用して Windows に Linux をインストールする方法
Windows ターミナル の基本
ファイル作成とコンテナ起動
作業ディレクトリの作成
作業ディレクトリを作成し移動する。
$ mkdir bitcoin
$ cd bitcoin
docker-compose.yaml の作成
docker-compose.yaml設定内容
services:
bitcoind:
image: ruimarinho/bitcoin-core:latest
command:
- -regtest
- -printtoconsole
- -rpcallowip=0.0.0.0/0
- -rpcbind=0.0.0.0
- -rpcuser=bitcoinrpc
- -rpcpassword=your_rpc_password
- -fallbackfee=0.0002
ports:
- "18443:18443"
- "18444:18444"
volumes:
- ./data:/home/bitcoin/.bitcoin
explorer:
image: tyzbit/btc-rpc-explorer:latest
env_file:
- .env
ports:
- "3002:3002"
depends_on:
- bitcoind
ファイル内容の解説
services セクション
Compose では複数のコンテナを「サービス」として定義します。
このファイルでは、bitcoind(Bitcoin ノード)とexplorer(Web UI)の2つを立ち上げます。
● bitcoind(Bitcoin ノード)
image
ruimarinho/bitcoin-core:latest を使い、Bitcoin Core の公式バイナリをコンテナ化して提供するイメージを指定。
command
起動時に bitcoind に渡すオプションのリストです。
-regtest:ローカル学習用のテストチェーンを使う
-printtoconsole:ログをコンソール出力
-rpcallowip=0.0.0.0/0:すべての IP から RPC 接続を許可
-rpcbind=0.0.0.0:RPC サーバーを全インターフェースで待受
-rpcuser/-rpcpassword:RPC 認証に使うユーザー名・パスワード
-fallbackfee=0.0002:送金時の手数料(BTC/KB)のデフォルト値
ports
"18443:18443":コンテナの RPC ポートをホストの同ポートへマッピング
"18444:18444":コンテナの P2P(ネットワーク)ポートをマッピング
volumes
ホスト側の ./data ディレクトリをコンテナ内の ~/.bitcoin(データ保存場所)へマウント。
ブロック情報やウォレットデータがここに永続化されます。
● explorer(Web UI)
image
tyzbit/btc-rpc-explorer:latest:Bitcoin Core ノードのブロック/トランザクションを可視化する Web アプリケーション。
env_file
.env ファイルから環境変数を読み込み。
ここに "BTCEXP_BITCOIND_USER", "BTCEXP_BITCOIND_PASS", "BTCEXP_NETWORK=regtest" などを記述しておくと、エクスプローラーがノードに接続できます。
ports
"3002:3002":Web UI が listen するポート 3002 をホストへ公開。<br>
ブラウザで http://localhost:3002 にアクセス可能に。
depends_on
bitcoind コンテナが先に起動するよう依存関係を指定。
ターミナル操作
#nanoエディタ起動
~/bitcoin$ nano docker-compose.yaml
#ファイル確認
~/bitcoin$ ls
docker-compose.yaml
#ファイル内容確認
~/bitcoin$ cat docker-compose.yaml
services:
bitcoind:
image: ruimarinho/bitcoin-core:latest
command:
- -regtest
- -printtoconsole
- -rpcallowip=0.0.0.0/0
- -rpcbind=0.0.0.0
- -rpcuser=bitcoinrpc
- -rpcpassword=your_rpc_password
- -fallbackfee=0.0002
ports:
- "18443:18443"
- "18444:18444"
volumes:
- ./data:/home/bitcoin/.bitcoin
explorer:
image: tyzbit/btc-rpc-explorer:latest
env_file:
- .env
ports:
- "3002:3002"
depends_on:
- bitcoind
~/bitcoin$
.envファイルの作成
.envファイル設定内容
# Bitcoin Core ノード接続情報
BTCEXP_BITCOIND_HOST=bitcoind
BTCEXP_BITCOIND_PORT=18443
BTCEXP_BITCOIND_USER=bitcoinrpc
BTCEXP_BITCOIND_PASS=your_rpc_password
# ネットワーク種別(regtest / testnet / mainnet)
BTCEXP_NETWORK=regtest
# Explorer のホスト/ポート設定(任意・デフォルトで動作可)
BTCEXP_HOST=0.0.0.0
BTCEXP_PORT=3002
# ログレベル(任意)
# BTCEXP_LOG_LEVEL=info
ファイル内容の解説
BTCEXP_BITCOIND_HOST:Docker Compose のサービス名 (bitcoind)
BTCEXP_BITCOIND_PORT:Regtest 用 RPC ポート(-regtest モードでは 18443)
BTCEXP_BITCOIND_USER/BTCEXP_BITCOIND_PASS:bitcoind 起動時の -rpcuser/-rpcpassword と合わせる
BTCEXP_NETWORK:regtest に指定することで Regtest チェーンとして動作
BTCEXP_HOST/BTCEXP_PORT:Explorer サーバーのバインド先(ブラウザアクセス用)
BTCEXP_LOG_LEVE:ログの「詳細度(verbosity)」を制御する環境変数
| レベル | 説明 |
| :-----: | :------------------------------------ |
| `error` | 重大なエラーのみを出力。通常は運用環境で最低限のログを残したいときに使用。 |
| `warn` | エラーに加え、警告レベルのメッセージも出力。 |
| `info` | 通常の稼働状況(リクエスト受信、起動完了など)を出力。デフォルト値。 |
| `debug` | 開発時に便利な詳細情報を大量に出力。 |
| `trace` | 最も詳細なトレース情報を出力。プロトコルレイヤーまで追跡可能。 |
ターミナル操作
#nanoエディタ起動
$ nano .env
#ファイル確認
~/bitcoin$ ls -la
total 16
drwxr-xr-x 2 ***** ***** 4096 Jun 11 04:32 .
drwxr-x--- 12 ***** ***** 4096 Jun 11 04:03 ..
-rw-r--r-- 1 ***** ***** 371 Jun 11 04:32 .env
-rw-r--r-- 1 ***** ***** 520 Jun 11 04:09 docker-compose.yaml
#ファイル内容確認
~/bitcoin$ cat .env
# Bitcoin Core ノード接続情報
BTCEXP_BITCOIND_HOST=bitcoind
BTCEXP_BITCOIND_PORT=18443
BTCEXP_BITCOIND_USER=bitcoinrpc
BTCEXP_BITCOIND_PASS=your_rpc_password
# ネットワーク種別(regtest / testnet / mainnet)
BTCEXP_NETWORK=regtest
# Explorer のホスト/ポート設定(任意・デフォルトで動作可)
BTCEXP_HOST=0.0.0.0
BTCEXP_PORT=3002
~/bitcoin$
コンテナの起動
docker compose up -d
bitcoind が Regtest モードで起動し、RPC ポート(18443)を待受ける。explorer が 3002 ポートで可視化 UI を提供する。
ターミナル操作
$ docker compose up -d
[+] Running 14/14
✔ bitcoind Pulled 8.2s
✔ 4f4fb700ef54 Pull complete 0.0s
✔ 369e78ef44b1 Pull complete 0.6s
✔ 6344b6b51e02 Pull complete 3.7s
✔ 3f9582a2cbe7 Pull complete 3.3s
✔ 16f5485ba270 Pull complete 3.4s
✔ explorer Pulled 9.0s
✔ 9adc6a96d0b7 Pull complete 6.1s
✔ f18232174bc9 Pull complete 1.1s
✔ db39a8f02309 Pull complete 0.8s
✔ f709efe76971 Pull complete 6.1s
✔ 2a055f0c83be Pull complete 0.9s
✔ 905fb610ce71 Pull complete 3.1s
✔ 0416551166ae Pull complete 0.8s
[+] Running 3/3
✔ Network bitcoin_default Created 0.0s
✔ Container bitcoin-bitcoind-1 Started 2.5s
✔ Container bitcoin-explorer-1 Started 0.5s
:~/bitcoin$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab024101f339 tyzbit/btc-rpc-explorer:latest "docker-entrypoint.s…" 13 seconds ago Up 12 seconds 0.0.0.0:3002->3002/tcp bitcoin-explorer-1
80a836081854 ruimarinho/bitcoin-core:latest "/entrypoint.sh -reg…" 15 seconds ago Up 13 seconds 8332-8333/tcp, 18332-18333/tcp, 38332-38333/tcp, 0.0.0.0:18443-18444->18443-18444/tcp bitcoin-bitcoind-1
~/bitcoin$
ウォレットの作成
ターミナル操作
#ウォレットの作成
$ docker compose exec bitcoind \
bitcoin-cli -regtest \
-rpcuser=bitcoinrpc \
-rpcpassword=your_rpc_password \
createwallet "testwallet"
{
"name": "testwallet",
"warning": ""
}
#作成したウォレットの確認
$ docker compose exec bitcoind \
bitcoin-cli \
-regtest \
-rpcuser=bitcoinrpc \
-rpcpassword=your_rpc_password \
listwalletdir
{
"wallets": [
{
"name": "testwallet"
}
]
}
docker compose exec bitcoind
Docker Compose で定義した bitcoind サービスのコンテナ内で、以降のコマンドを実行する指定です。
bitcoin-cli -regtest
bitcoin-cli は Bitcoin Core の JSON-RPC クライアント。
-regtest オプションにより、「ローカル学習用のテストチェーン(Regtest)」を対象に操作します。
-rpcuser=bitcoinrpc -rpcpassword=your_rpc_password
RPC 認証情報を明示的に渡すオプションです。
docker-compose.yamlで設定したUSERとpasswordを指定。
以上に内容は、コンテナ内でコマンドを実行する際のターミナル操作も同様。
listwalletdir
ウォレットの一覧を取得するコマンド。
あくまでファイルとして存在するウォレット名の一覧を返すだけで、メモリ上にロードはしません
(ロードするには別途 loadwallet が必要)。
listwallets(現在ロード中のウォレット一覧)とは異なり、未ロードのものも含めてディスク上の全ウォレットが対象。
ブロック生成と報酬の確定
新規アドレス取得
ターミナル操作
コンテナ内で、新しいビットコインアドレスを発行し、その結果をシェル変数に格納してから表示する。
#新規アドレスを取得しADDR変数に格納
$ ADDR=$(
docker compose exec bitcoind \
bitcoin-cli -regtest \
-rpcuser=bitcoinrpc \
-rpcpassword=your_rpc_password \
-rpcwallet=testwallet \
getnewaddress
)
#新規アドレスの確認
$ echo "Wallet address: $ADDR"
Wallet address: bcrt1qwtwgpm6zgkcrt5j3ykjkgaf3u7ptl295s9ygey
101ブロック生成
ターミナル操作
Regtest 環境の Bitcoin Core ノードに対して「指定したアドレスにコインベース報酬を送りながら 101 ブロックを採掘する」操作を行います。
#指定したアドレスにコインベース報酬を送りながら 101 ブロックを採掘する
$ docker compose exec bitcoind \
bitcoin-cli -regtest \
-rpcuser=bitcoinrpc \
-rpcpassword=your_rpc_password \
generatetoaddress 101 "$ADDR"
#結果出力
[
"62a0bc5009a733ffcef00e10eae4231a97cb2efd058344304372e27b97e631ff",
"1627b1b760760b5c31cf967b97615c8aebb3727c21e5c0e8f6994478ecea0c0f",
"392419cf948a6d9297dc87689a8d075112908db5bf9c0d4bbe4dbd187bd9be62",
"411343b2b10d9c3c7f005f999db8301a9e836f9e6157ca0ef8e7708653c4fac8",
"5eea5afd28f76098116f47c6730e28ce14f9d84b7192caa15366a21e3c6bbc8d",
"077c280d1866d31b744fb73ad8c7d7a84718fe3737d92cfd16fff9a477273e80",
"3d7011c0fc9b3ab122721455a0166a0cd65ed49985db7d3a750fbb213fab42ca",
"4bd2cd01a26a407cd116d262d2fa583590d79531955a5045f66a29caa4cd4a22",
"4e66677ca5428f17a38d02005877fb44a4e9af3d6893725fd073c6bfff28a708",
"61032ef1ec71255239a399151175854690470c0a79b230e913257be488fc3b12",
"15d318afca32bc33e1734131379176557be65b54b3f054beced5001480d1fba3",
"49b8f8f6f7ab3f7cb4d4d828d9c7250fa72b32cec77b76a43ec447636ae76325",
"32dee09a8064cfb01a2e96f244ddaa4be72e84f08f703610f8aae196dd339d00",
"4d854feca8bed16a5258d348f6c941d5e332857e6b1fff45738ee8cb450c4a8c",
"138860e2d9b801b94a56d62fbc71c8d702ec041ce0bcb0263334680ea181d2b6",
"480233d3fed7fc1c078c3d277630246d09bc398be419c99e7b39134e24ced548",
"1d0dc77bb75990b8a8eec0385877e44ba73368f5a9f54e4c2568897c20e17d66",
"12f2937bc287c2d8ef95fdfe25c261e10fdc72cda6f34840ff21a3a2e6f6a129",
"1173205a166c8a1f05ae1ca24732e7621bba8fea18f8f39e2867bf987d80ae9a",
"72deaa8f4d88b4d4a1ca70f208add8acc3e5f83f5e4dd8da0b7f6f14e03ed4a4",
"0e87dcc71a5623642cbaf0060ebccd88e92668ba254335cc7e0ed4aae4168096",
"6005554a9e844dc7ce99c0604efdb7ce82059164230b35dfe041857f6b44faca",
"425ec5673ff4b6a9afca1fa60b3f753e3b2fb4f27c65f35929a1ca121b620a96",
"317bf09caebef080dc1e701c6ae9257e4e046707f1b092d45ab799073e5b93c3",
"194acd5618cefbd145888add52eeba880e210b7f3a187f9a1b6591a926b6e1d8",
"1fbf58c37daac98075c58be3387949528375c4912f32a849ef4aa0889f61843b",
"32d653cfa24efb205765f76d838ff7c28ba9f24cb709325b628365098302da6c",
"194274552aa21e61db0c3d2ab19c4449b1e948a6c1b57d1e3e7e615aa2b3247c",
"6d8e00b2334767bef89180cea4995e12422dbd805916c7557a907cb4a24f0b2f",
"662be7f8b921ed8baa90c6ab324ccc8f4bbc6cc334ec2f3dbda649ee192e53cd",
"396d350b18690603c610eb5a4683f4425e8b9c8c2e50db5ab97c817960a985b7",
"7f70b35de7cb1e1e1bb0cdcf6d0aa288b4095523a6c0a46803a77bd70381e8ff",
"46c1251c500510865ad7c1e4f358c174f31d9924ed95d1d967f528ec5874a612",
"474388d8571732169f4a9327296f732defb98993b7c0d10073ccd727c4c22e3f",
"57115ba879df9e25f9d442bc0f3a3d40a147fa61b9c11410a2eb889c0c64b241",
"2ea2d18f9c018e484461f6ea6774a8982074d1459222b4a1054877af47d09008",
"6087e913affd38e80e6d7c4c09d9ccb2685960bd6d59e6ab857e3fa96b26eb79",
"72c06678a88cfcb3ee3f0f2a648da9c4202c002af4e8d1a92acc4a3429b29e78",
"70c7a1fed26e9aa746dd5143088b1e00f0e9c8fa804e9b3a8370f08a35a65ffd",
"265db8baa447e14a144e0c5009a1c62190e0ee65d2594e544ee93f0062124dd8",
"4eedd0fbc73491d3037f050b0c8e1988bf1fc052ccf336ad1a7438ab3250732a",
"1d08597be649af3b66ce0c1579a9b14e581e0fe5b7caab45614ef64268085f73",
"7305fb5b497e80d39b17a4ae7b2189140633be49cf9b3ff65a3b16e04cd35de3",
"74826f5e35fc5046283e7e1a0589137ef2369df2686fe6fb7f89640061fe779a",
"0a11b7b9d60ed00ed1307d935be4895393954d5e00480b3327e2c28ab55c571d",
"47234a5143033ad6196d251a29b4c20cb9589a013169a0397cb9a458817b1382",
"55dfceb0ecb25131d053282deb388fa956c5de30f6ff078886a99c47306a6759",
"639e7b868db6e47d8fcd6c4c00a988e3b41be8b484b8371f5d825c704f70011c",
"627a589c71c31d725b59b9c27cdbfd9d79d9900fc4dd383ae9541897a81f40ea",
"50f364acb0d98f302f08173f18f42c091b001b2841bf3b3ebf03b2608cb5a871",
"41b220c5ade80e786737b4109c1dbb31a77210c069d3c44c06e55e3e0b06e0b7",
"510412862b2e1e07b8ad72160d27c768da507af923a1c3b5c0332fb61bbbc512",
"5ff242fc1ab719777b66b4e783de5ed225a8550fd20ce166993561a3d430db45",
"6044b65924083ee3407694774d408d4ba0dbeab0b634f602e0d7fb23227f3892",
"1be6372e61ddf8d30033f4e0c37d17fdf4b6d21333b939395bca9dcc99e97824",
"7a57cd8b709fed2374180d38f0376d5dd3be4eaf8c2b260e50294338108a6fa7",
"1bf70bb169726cd5a49a8d504cbb1388415fa81f0ce65ed9e05c76438840eefe",
"1968711213a758c67a3e8d8432b4206b0c4324ce54b6ff86ce41b08d956759d8",
"2b40c1689afb2200b38055c0b9bae1d5c104d656c7640666c3320ca266c8b6dd",
"743a1d725453bf6dfa9544bbc61b64fdf1e1d318a7b73357155334fe32092da4",
"0fdd1cd151e062210ccc0a104d135070d58b3e85ecb00a445587ab1c33aeacd0",
"38e7ed96c46d129e61eb0a0687314aa589bb3b7be37a05d7b4fde07a423cf49e",
"08da2dbcb6a2380321bb39e934eb63dc3aa58e303a1c4f6e130c1c7be294a6c2",
"16b83f3a65ddd24d09ae099f16e73846036cf69ce2c14a11074caf90bc7a2369",
"125d0372f9ffb640459df87d2290d2096c2cf939f1cd4b9afc023d2054100257",
"4703a840400596b8e3f5faee189d2fbbb6c2d81f59c7e850aece3750a7c0693c",
"74ad4c973675fe07215d4f14fa0e323e85de1b462362215ba14c3aeb861ae8f8",
"1b441ffb313ec611475b321f5f8195791183a07e558626c13a453d311b9fded7",
"5ebd08b8b6de7f510ee92759258a7f7512476e3d991db8145bbe4cb4bac2dd3c",
"47258cd01459c3b173c55df0a67b0f12f6b758e538d3c578d18943bba24b72b2",
"41dacd573bb5f5289a719564f96efec15dbd5047fff0054c510ff8712cfdd706",
"454c3c0c481a06585c59f4c83a37ef26b22a72fada04be4135bc46ea3d3deca2",
"749d1a16ee6f83816b897d53903fa4b9d5e7f0bd36f9cff6fe8e9ed540b12512",
"169c27aee058bc48292ff03daa5561418c5fd00ad22399b796cf6ba107c3b4ff",
"7cd432d8bc14ed795e445756c42554204cae33d97e98339ece9e1fb570b2734b",
"3ac899d06daefb4a6174847799a6502d21cb26dae0882b8789e811bf49d32b5a",
"58dcde3cf061d61c21424cef5f56f382f246c71c05fb7dd8a69015d64891b376",
"39505c306a7d11c11301245220ece3613fe9057e0b4e26bd8949a7428cdea601",
"4be8f02f5c7de30055bd2d41206c7389eebe0e2d741bce2255d32fca9b71705e",
"43608fecad4edeaa61ab4985765a7c4481bd5ff87a9ec3b1b27af35c13a4890d",
"583db01dcb2a9da750ae70eb78658f60545eac19809e0c18207be704dc878b5c",
"357856d2d156101dbc34a59eb30636e1a109415b5f8125563301a761669848cd",
"5f6594cde231a9dd1914e5d1865d672a299889ccca85af5030fec5b9c33c2e14",
"2fb00bcba45dc7ca65c618c1b7e6c6862db2f0d154ae728135fc5f7e1f4bf5df",
"4987b5161302d5e9a7c262407a8e64c2d22b6c06c31ba6ff86d4ea7d5d131bf5",
"7b0ae00cf9d62ab41b6e15e08bcb6e9af4f7e3e6ee8f9bf9d22cc5167ac2f1fd",
"2af5a1cf2e9fe70bd4e912d55cd26eb040269dd0e56a6672670c816a32c968b1",
"65d7999d01f2ab88c590e69c89270fac5847b522ecdbafceae7f32013bee7465",
"1a949c32aabb1bffa8f2a9cff3e39e51c9effc78371ecc2393d4c3e1a9091bf3",
"24282926c70a189fea2b8bb365d9afd4524c46094db1b1a7b2c98d55061aadd0",
"6bc6e22df095939d78cec6510c1daee448c1eb56616c44271cf24cf5fee754ae",
"4afb07a3fe899cefb36943b3c1a9bd35a8756f2c0630926d1fc6392e964db269",
"06e82265b5046c14e52b5c78a225c09cca7cdc9e83dbdccccd55c70ab9cae984",
"675cc003daff63436b313b5f3f7e486c2e3a51f8abd15f5b2615b10cf556ae22",
"7a491abf6d3ba6e7130d0fc6099fb0fdd5fbdf82a001862c4fce2a25c9eaa9c9",
"5f19f2ba3707140a0f929c11293b42ae0b1ea2d544da4656a7dc14e52eebc23b",
"2ba6c909dddde0ad239598e7109772baf6899ae0a7e7330d63c8b21cebdd0dc6",
"6efc114d1be157a7e2cc5027b88fa7773f1ebf080a13f6280f7efbb3cc539632",
"74d8588be04e5e15e5fb4f55b36619d6adf2b399e29cce6f2961ae052fa21341",
"39451c96b08e239a3d4352511d5f1d363150f76c35aef031658ee3e518169d63",
"50577b220b13ec745d112d44b20a5b0c0470844f3a78438d5ada7d0705757234"
]
generatetoaddress
Bitcoin Core の RPC メソッドのひとつで、「ブロックを採掘し、そのコインベース報酬を指定アドレスに送る」機能を持ちます。
101
採掘するブロック数を指定。ここでは 101 ブロックを一度に生成します。
"$ADDR"
先ほどシェル変数 ADDR に格納したビットコインアドレス。
各ブロックのコインベース報酬(Regtest 固定で 50 BTC)がこのアドレスへ入金されます。
generatetoaddress を実行すると、生成されたブロックそれぞれのハッシュを 以下のようにJSON 配列として返します。
#生成されたブロックのハッシュ。(実際のハッシュは環境によって異なります)
[
"2fd5aaf5141a41017b3a88f53ea89949d8daf2d7e1991629d73faa2d915cf689",
"072b6a51676eecd9db9d488c3a51331ff0c902619c4e6de1bb0b9e1722c4c1ba",
"1f0e384ba79ff7bbc7c6d09f38ec195add37d884f1f35c137e65daa3125f3490",
"08c28aca3bee83311ceacaab0995b0595a6a307b5419475f2f8025a337a664f0",
… (以下 合計101個のブロックハッシュ) …
]
なぜ「101 ブロック」なのか?
- コインベース報酬の成熟(Maturity):
マイニング報酬は、ブロック生成直後はimmature(未成熟)扱いとなり、100 ブロック確認を経て初めてspendable(使用可能)になります。 - 合計 101 ブロック採掘:
最初の 1 ブロックで報酬を得て、さらに 100 ブロック分を掘ることで、最初の報酬が成熟し、ウォレット残高に反映されます。
このコマンドを実行すると、Regtest ノードは 101 ブロック分の Proof-of-Work を完了し、すぐにテスト用のBTC をウォレットに供給してくれます。
100ブロック生成の条件
マイニングに成功して報酬を得るには100ブロック生成が必要です。
この100ブロック生成の条件は、Bitcoin Coreのソースコード中にハードコーディングされています。
src/consensus/consensus.h 内
/** Coinbase transaction outputs can only be spent after this many new blocks (network rule) */
static const int COINBASE_MATURITY = 100;
残高・トランザクション確認
残高確認
ターミナル操作
#testwalletの残高確認
$ docker compose exec bitcoind \
bitcoin-cli -regtest \
-rpcuser=bitcoinrpc \
-rpcpassword=your_rpc_password \
-rpcwallet=testwallet \
getbalance
#出力内容
50.00000000
-rpcwallet=testwallet
操作対象のウォレット名(testwallet)を指定。
getbalance
RPC メソッド名。
指定したウォレット内で「成熟(mature)・使用可能」になっているコインベース報酬や送金受取分の合計額を BTC 単位で返す。
#出力内容
50.00000000
testwallet に 50 BTC の使用可能残高があることを示している。
ウォレットの残高全体を把握する場合
getwalletinfoメソッドを使うことで、balance・unconfirmed_balance・immature_balance 状態を含めてウォレットの残高全体を一度に確認でます。
ターミナル操作
#testwalletの残高全体を確認
$ docker compose exec bitcoind \
bitcoin-cli -regtest \
-rpcuser=bitcoinrpc \
-rpcpassword=your_rpc_password \
-rpcwallet=testwallet \
getwalletinfo
#出力内容
{
"walletname": "testwallet",
"walletversion": 169900,
"format": "sqlite",
"balance": 50.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 5000.00000000,
"txcount": 101,
"keypoolsize": 4000,
"keypoolsize_hd_internal": 4000,
"paytxfee": 0.00000000,
"private_keys_enabled": true,
"avoid_reuse": false,
"scanning": false,
"descriptors": true,
"external_signer": false
}
walletname:"testwallet"
操作対象のウォレット名
walletversion:169900
ウォレットデータのフォーマットバージョン(内部バージョン)
format:"sqlite"
ウォレットデータベース形式(SQLite を使用)
balance:50.00000000
成熟済み(spendable)残高。コインベース報酬のうち1ブロック分(50 BTC)が成熟して使用可能になっている。
「最初に生成した 1 ブロック分」の報酬だけが成熟し、送金に使える状態。
unconfirmed_balance:0.00000000
未承認トランザクションによる残高(現在はゼロ)
immature_balance:5000.00000000
未成熟なコインベース報酬の合計(100 ブロック分×50 BTC = 5000 BTC)。
まだ 100 確認を経ていないため送金には使えない。
txcount:101
ウォレットが保持するトランザクション数(ここではマイニングした 101 件)
マイニングした 101 ブロックそれぞれのコインベーストランザクションがカウントされている。
keypoolsize:4000
外部向け(受信用)にプールされている鍵ペアの数
keypoolsize_hd_internal:4000
内部向け(おつり用)にプールされている鍵ペアの数
paytxfee:0.00000000
デフォルトの手数料設定(BTC/KB)
private_keys_enabled:true
ウォレット内に秘密鍵が保持されており、自分で署名できる状態
avoid_reuse:false
既使用アドレスの再利用を回避しない設定
scanning:false
過去ブロックの再スキャン中かどうか(現在はスキャン完了)
descriptors:true
記述子ウォレット(descriptor)モードで管理されている
external_signer:false
外部署名デバイス(HSMなど)を使っていない
ブラウザでブロックチェーンを確認
Regtest Explorerを開く
ブラウザを開き、http://localhost:3002 にアクセスしRegtest Explorer(下記画面)を表示する。

Regtest Explorerでできること
- どんなブロックが生成されたか(高さ・時間・Tx数)
- 直近の送受金トランザクションの内容(ID・確認数・金額)
を直感的に把握でき、さらに詳細リンクから深掘りできます。
まとめ
Docker Compose と Regtest を組み合わせることで、外部ネットワークに影響を与えずに以下の操作を繰り返し学べます。
- フルノード起動
- ウォレット管理
- マイニング(ブロック生成)
- 残高・取引履歴確認
- エクスプローラーでの可視化
参考
参考URL
【4分アニメ解説】ブロックチェーン原理だけ〜web3すっきり理解〜
ブロックとトランザクション
トランザクション(Transaction)
定義:ビットコインの「送金指示書」です。
役割:
- あるアドレス(口座)から別のアドレスへコインを移動する命令。
- 入力(UTXO)と出力(新たな UTXO)を指定し、署名付きで送信される。
主な構成要素:
- Inputs(入力):
- 以前のトランザクションの出力(UTXO)を参照
- そこに紐づく秘密鍵で署名して「このコインを使います」と証明
- Outputs(出力):
- 受取側アドレスと金額
- 新たに生まれる UTXO
- 署名(ScriptSig):
- 秘密鍵所有を証明するデジタル署名
ライフサイクル:
作成 → 2. ネットワークへブロードキャスト → 3. ノードが検証 → 4. マイナーがブロックに取り込む
ブロック(Block)
- 定義:複数のトランザクションをまとめた「箱」です。
- 役割:
- 取引履歴(トランザクション)を一定数まとめて承認・記録する単位。
- 前のブロックとハッシュでつながり、改ざんを防止する。
- 主な構成要素:
- ヘッダー(Block Header)
- 前のブロックハッシュ(連結ポイント)
- マークルルート(そのブロック内のトランザクション一覧を要約したハッシュ)
- タイムスタンプ
- 難易度ターゲット
- ナンス(Proof-of-Work 用の可変値)
- トランザクションリスト
- そのブロックに含まれるすべてのトランザクション
- ヘッダー(Block Header)
- ライフサイクル:
- マイナーが複数の未承認トランザクションを集める
- ヘッダー情報をもとにハッシュ計算(PoW)を行い、正しいハッシュが見つかるまで繰り返す
- 正しいハッシュが見つかると「ブロック完成→ネットワークへブロードキャスト」
- 他ノードが検証してチェーンに接続
トランザクションとブロックの関係
[TX A]
[TX B]
[TX C] ←───これら複数の「トランザクション」をまとめて
[TX D]
↓
┌───────────────────────────┐
│ Block #1000 │ ←───「ブロック」として確定
│ Header: │
│ - prev_hash = ... │
│ - merkle_root = H(TXs) │
│ - timestamp, nonce, … │
│ Txns: [A, B, C, D, …] │
└───────────────────────────┘
↓
次の Block #1001 が「prev_hash=ハッシュ(Block #1000)」でつながる

