Crate bitcoin_block_parser

Crate bitcoin_block_parser 

Source
Expand description

§Bitcoin Block Parser

Crates.io Docs MIT licensed

Blazing fast parser for bitcoin blocks data with input amount and output spend tracking.

⚠️ The API is still evolving and should not be considered stable until release 1.0.0

§Features

  • Parses blocks into the Rust bitcoin Block format for easier manipulation
  • Can track if any TxOut is spent or unspent for calculations on the UTXO set
  • Can track the TxOut of every TxIn for calculating metrics such as fee rates
  • Multithreaded in-memory parsing provides fast block parsing performance

§Requirements / Benchmarks

  • You must be running a non-pruning bitcoin node (this is the default configuration)
  • We recommend using fast storage (e.g. NVMe) and a multithreaded CPU for best performance
  • See benchmarks below to understand how much RAM you may need:
FunctionTimeMemory
BlockParser::parse()
Parses blocks
2m 55s0.9 GB
UtxoParser::create_filter()
Create a new filter
15m 12s2.6 GB
UtxoParser::parse()
Parse with existing filter
18m 30s12.1 GB

Our benchmarks were run on NVMe storage with a 32-thread processor on 800,000 blocks.

§Quick Usage

See BlockParser for details on how to parse blocks:

use bitcoin_block_parser::*;

// Initialize a logger (if you want to monitor parsing progress)
env_logger::builder().filter_level(log::LevelFilter::Info).init();

// Parse all blocks in the directory and map them to total_size
let parser = BlockParser::new("/home/user/.bitcoin/blocks/").unwrap();
for size in parser.parse(|block| block.total_size()) {
  // Do something with the block sizes
}

See UtxoParser for details on how to track inputs and outputs:

use bitcoin_block_parser::*;

// Load a filter file or create a new one for tracking output status
let parser = UtxoParser::new("/home/user/.bitcoin/blocks/", "filter.bin");
for txdata in parser.parse(|block| block.txdata).unwrap() {
  for tx in txdata {
    for (output, status) in tx.output() {
      // Do something with the output status
    }
    for (input, output) in tx.input() {
      // Do something with TxOut that are used in the inputs
    }
  }
}

Re-exports§

pub use blocks::BlockParser;
pub use headers::HeaderParser;
pub use utxos::UtxoParser;

Modules§

blocks
Contains BlockParser for parsing bitcoin Block from the blocks directory.
headers
Used to parse the bitcoin::block::Header from the blocks directory to order and locate every block for later parsing.
utxos
Contains UtxoParser for tracking input amounts and output statuses in UtxoBlock.
xor
Handles XOR’d Bitcoin-core block data.