btc: Output Descriptors (4)
2025/03/02
はじめに
BDK の quick start にあるサンプルコードを libwally-core を使った C言語で置き換えようとする筆者だったが・・・?
C言語だとネットワークが面倒
昨日の段階で、descriptor wallet の構築で提供された文字列でアドレスが生成できるところは確認できた。
descriptors という点ではそのくらいで終わらせようと思ったのだが、元のサンプルコード は API を使って wallet に紐付く残高の集計までやっている。
サンプルコードでは Esplora API という Bitcoin のブロックチェーンデータを DB にしているサイトが提供している API を使っている。
同じような API に Electrum(X) server もある。
時系列としては Electrum Server がその走りで、
その一般的な実装モデルになったのは後継(fork)の ElectrumX Server だと思っている。
私が Bitcoin に携わりだした 2016年くらいで既に ElectrumX Server の方が一般的になりつつあったのと、
“そもそも Electrum は Bitcoin のエコシステムとしてありなのか?” みたいな話もあって、私の記憶はあんまり定かではないのだ。
なんで「ありなのか」みたいな話になるかというと、Bitcoin は P2P ネットワークで相手を信用するのではなく自分で検証するのをよしとしていたからだ。
HTTPS などで一方的に取得するとなると、それは相手を信用しているんじゃないのか、という感じだったように思う。
どういう論調だったかは知らないが、API で取得する場合も 1つのサイトではなく複数のサイトに接続してチェックすることで一箇所への依存を減らしたのだったと思う。
サーバー・クライアントモデルとはこの辺の考え方が違う(良いとか悪いとかではなく、考え方の違い)。
この辺の、Bitcoin 文化的なところをわかっておかないと、サービスを作ってもコミュニティとの間に軋轢を生みやすい。
使い勝手がよいからこれがよいだろう、が通じない部分がある。
そういうときは、コミュニティを重視するのであればサーバ・クライアントの人が提案している方が折れるのが無難だと思う。
良いとか悪いとかではなく、Bitcoin のシステムなのになんでそうなったの??、みたいなことが多いからだ。
書いている私がサーバーの実装とかやらないので、雰囲気しか伝えられず申し訳ない。
Esplora にアクセスしたい
Esplora のサーバに問い合わせるところだけ作ればサンプルコードと同じところまではやったことになる。
ただまあ、BDK のあのコードの短さでそこまでは無理なのよね。。。
Bitcoin Core や ElectrumX、Esplora を一通り触ったことがあると分かると思うが、そこまで便利な API は提供されていない。
いや、Bitcoin Core から比べると他の API はかなり便利なんだけどね。
同じ Esplora 系であるオリジナルな blockstream.info と fork した mempool.space を比べると、
mempool.space は outpoint の次へのリンクがあるということに気付くだろう。
トランザクションの INPUT からは前のトランザクションをたどることができるのだが、後ろをたどるのはトランザクションのデータだけではできない。
前から後ろをたどるには、後ろのトランザクションデータを取得して、前が後ろをリンクするしかないのだ。
おわりに
眠たくなったので、今日はここまで。