Bitcoin CoreのAPIを使わずに直接データを参照できないかなーとデータディレクトリの構造を調べてみた。
bitcoindを起動するとホームディレクトリ直下に.bitcoinディレクトリが生成される。Bitcoinの設定やデータはこのディレクトリ内に格納される。
ディレクトリ内のファイルやディレクトリは↓のような構成になってる。
ファイル
- bitcoin.conf
Bitcoin Coreの設定ファイル。 - bitcoin.pid
bitcoindをdaemonで起動した際のPIDファイル。 - blkxxxx.dat
blocksディレクトリに格納されるファイルで、ブロックの生データが格納されている。 - rev*.dat
blocksディレクトリに格納されるファイルで、"undo"データが格納されている。 - db.log
ウォレットのエラーログ - debug.log
Bitcoinの詳細なログ。 - fee_estimates.dat
手数料と優先順位を予測するための統計。プログラムのシャットダウン時に保存され、起動時に読み込まれる。 - .lock
Berkelay DBのロックファイル。 - peers.dat
再接続を容易にするためのピア情報用のストレージ。Bitcoinの専用フォーマット。 - wallet.dat
鍵やトランザクション、メタデータ、オプション情報が保存されるBerkelay DBのデータベースファイル。
ディレクトリ
- blocks
ブロックチェーンのデータを格納するディレクトリ。
blk*.dat というファイルに実際のブロックチェーンのデータが保存されている。ウォレット内の欠落しているトランザクションを再スキャンする際や、同期中の他のノードにブロックデータを提供する際などに利用される。
indexサブディレクトリには、既知のブロックのメタデータやそれがディスクのどこに格納されているのかといった情報がストアされたLevelDB*1のDBが格納されている。 - database
Berkeley DBのジャーナリングファイルが格納されるディレクトリ。 - chainstate
現在未使用のトランザクション出力(UTXO)とそのトランザクションのメタデータをコンパクトにしたLevelDBのDB。このデータは受信したブロックやトランザクションを検証するために使われる。 - testnet3
testnetモードでbitcoindを起動した際のデータが格納される。 - regtest
regtestモードでbitcoindを起動したデータが格納される。
RDBとかならSQLで各トランザクション取得して〜とかお手軽に考えてたけど、データもブロックの生データやBerkeley DB、LevelDBなので、そう簡単にはいかなさそう。(LevelDBのデータが一番扱いやすいかな。)