BDK CLI を regtest でつかう

2 min read読了の目安(約2400字

BDK CLI とは

BDK CLIBitcoin Dev Kit(BDK) をベースにした CLI。
esplora や electrum をバックエンドにして Wallet の機能を提供している。

環境

bdk-cli - v0.1.0
Bitcoin Core - v0.21.0
electrs - v0.8.7

Regtest で使いたい

基本的にはドキュメントに従う。
一部ドキュメント通りではうまく行かない部分があったのでここに残す。
Regtest :: Bitcoin Dev Kit

BDK CLI

cargo でとってくるなら

$ cargo install bdk-cli

必要なセットアップ

今回は Bitcoin Core と electrs の組み合わせで行う。

Bitcoin Core

ビルドしておく。
Linux の場合 - build-unix.md
electrs は txindex オプションなしでも機能する。

electrs

こちらもビルドしておく。
usage.md

バックエンドを起動

Bitcoin Core

Bitcoin Core を regtest で起動

$ bitcoind --regtest

electrs

electrs を起動する。
ドキュメントのコマンドに追加して、--txid-limit 0 を指定する。
electrs が確認する tx には上限があるようで、regtest で bitcoin を発行するために、まとめてマイニングした場合エラーになるようなので、上限を外すオプションを指定している。

electrs -vv --timestamp --db-dir /tmp/electrs-db --electrum-rpc-addr="127.0.0.1:50001" --network=regtest --cookie-file=$HOME/.bitcoin/regtest/.cookie --txid-limit 0

Wallet に bitcoin を送金

bdk-cli の wallet にマイニング報酬としての bitcoin を送金する

$ bdk-cli --descriptor "wpkh(tprv8ZgxMBicQKsPexGYyaFwnAsCXCjmz2FaTm6LtesyyihjbQE3gRMfXqQBXKM43DvC1UgRVv1qom1qFxNMSqVAs88qx9PhgFnfGVUdiiDf6j4/0/*)" get_newaddress

>>
{
  "address": "tb1q33mxseh9w52m7upqnmpmqz0cghf5u00a79qvu5"
}
$ bitcoin-cli generatetoaddress 101 tb1q33mxseh9w52m7upqnmpmqz0cghf5u00a79qvu5

残高を確認

electrs を通じて Core regtest へ残高を参照する。
ドキュメントと違うところは、server オプションに localhost ではなく 127.0.0.1 を指定する。
localhost ではパースに失敗してエラーがでる。

エラー
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Electrum(WrongAddrsNumberWithTimeout)', src/bdk_cli.rs:117:45
残高を取得
$ bdk-cli --descriptor "wpkh(tprv8ZgxMBicQKsPexGYyaFwnAsCXCjmz2FaTm6LtesyyihjbQE3gRMfXqQBXKM43DvC1UgRVv1qom1qFxNMSqVAs88qx9PhgFnfGVUdiiDf6j4/0/*)" --network regtest --server 127.0.0.1:50001 sync

$ bdk-cli --descriptor "wpkh(tprv8ZgxMBicQKsPexGYyaFwnAsCXCjmz2FaTm6LtesyyihjbQE3gRMfXqQBXKM43DvC1UgRVv1qom1qFxNMSqVAs88qx9PhgFnfGVUdiiDf6j4/0/*)" --network regtest --server 127.0.0.1:50001 get_balance