Files
brk/crates/brk_indexer
2025-12-18 17:10:23 +01:00
..
2025-12-18 09:35:26 +01:00
2025-12-18 13:01:31 +01:00
2025-11-09 22:57:06 +01:00
2025-08-07 21:22:38 +02:00
2025-12-17 14:22:31 +01:00
2025-12-18 17:10:23 +01:00

brk_indexer

Full Bitcoin blockchain indexer for fast analytics queries.

What It Enables

Transform raw Bitcoin blockchain data into indexed vectors and key-value stores optimized for analytics. Query any block, transaction, address, or UTXO without scanning the chain.

Key Features

  • Multi-phase block processing: Parallel TXID computation, input/output processing, sequential finalization
  • Address indexing: Maps addresses to their transaction history and UTXOs per address type
  • UTXO tracking: Live outpoint→value lookups, address→unspent outputs
  • Reorg handling: Automatic rollback to valid chain state on reorganization
  • Collision detection: Validates rapidhash-based prefix lookups against known duplicate TXIDs
  • Incremental snapshots: Periodic checkpoints for crash recovery

Core API

let mut indexer = Indexer::forced_import(&outputs_dir)?;

// Index new blocks
let starting_indexes = indexer.index(&blocks, &client, &exit)?;

// Access indexed data
let height = indexer.stores.txidprefix_to_txindex.get(&txid_prefix)?;
let blockhash = indexer.vecs.block.height_to_blockhash.get(height)?;

Data Structures

Vecs (append-only vectors):

  • Block: height_to_blockhash, height_to_timestamp, height_to_difficulty
  • Transaction: txindex_to_txid, txindex_to_height, txindex_to_base_size
  • Input/Output: txinindex_to_outpoint, txoutindex_to_value, txoutindex_to_outputtype
  • Address: Per-type typeindex_to_addressbytes

Stores (key-value lookups):

  • txidprefix_to_txindex - TXID lookup via 10-byte prefix
  • blockhashprefix_to_height - Block lookup via 4-byte prefix
  • addresshash_to_addressindex - Address lookup per type
  • addressindex_to_unspent_outpoints - Live UTXO set per address

Processing Pipeline

  1. Block metadata: Store blockhash, difficulty, timestamp
  2. Compute TXIDs: Parallel SHA256d across transactions
  3. Process inputs: Lookup spent outpoints, resolve address info
  4. Process outputs: Extract addresses, assign type indexes
  5. Finalize: Sequential store updates, UTXO set mutations
  6. Commit: Periodic flush to disk

Built On

  • brk_iterator for block iteration
  • brk_store for key-value storage
  • brk_grouper for address type handling
  • brk_types for domain types