Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin Coreのデータディレクトリ

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のデータが一番扱いやすいかな。)

*1:LevelDBはGoogle謹製のkey-value型のデータストア。