Expand description
§Bitcoin Block Parser
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
Blockformat for easier manipulation - Can track if any
TxOutis spent or unspent for calculations on the UTXO set - Can track the
TxOutof everyTxInfor 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:
| Function | Time | Memory |
|---|---|---|
BlockParser::parse()Parses blocks | 2m 55s | 0.9 GB |
UtxoParser::create_filter()Create a new filter | 15m 12s | 2.6 GB |
UtxoParser::parse()Parse with existing filter | 18m 30s | 12.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
BlockParserfor parsing bitcoinBlockfrom theblocksdirectory. - headers
- Used to parse the
bitcoin::block::Headerfrom theblocksdirectory to order and locate every block for later parsing. - utxos
- Contains
UtxoParserfor tracking input amounts and output statuses inUtxoBlock. - xor
- Handles XOR’d Bitcoin-core block data.