blocks_iterator 0.8.0

Iterates Bitcoin blocks
Documentation

MIT license Crates

Blocks iterator

Iterates over Bitcoin blocks, decoding data inside Bitcoin Core's blocks directory.

Features:

  • Blocks are returned in height order, it avoids following reorgs (see max_reorg parameter)
  • Blocks come with metadata like all block's previous outputs, it allows computing transactions fee or verifying scripts in the blockchain.

Memory requirements and performance

Running iterate example on threadripper 1950X, Testnet @ 2090k, Mainnet @ 709k. Spinning disk.

Network --skip--prevout --max-reorg utxo-db Memory Time
Mainnet false 6 no TODO TODO
Mainnet true 6 no TODO TODO
Mainnet false 6 1 run TODO TODO
Mainnet false 6 2 run TODO TODO

| Testnet | false | 40 | no | 123MB | 3m:03s | | Testnet | true | 40 | no | 1.4GB | 9m:07s | | Testnet | false | 40 | 1 run | 247MB | 16m:12s | | Testnet | false | 40 | 2 run | 221MB | 8m:32s |

Examples

Run examples with:

cargo run --release --example iterate
  • iterate iterate over blocks and print block fee
  • heaviest find the transaction with greatest weight
  • most_output find the transaction with most output
  • verify verify transactions

Similar projects

  • bitcoin-iterate this project inspired blocks_iterator, the differences are:
    • bitcoin-iterate is C-based
    • bitcoin-iterate it's more suited for shell piping, while blocks_itearator is intended to use as a rust library
    • bitcoin-iterate doesn't give previous outputs information
    • bitcoin-iterate is making two passage over blocks*.dat while blocks_iterator is doing one pass keeping out-order-blocks in memory (the latter is faster at the expense of higher memory usage)
  • rust-bitcoin-indexer this project requires longer setup times (about 9 hours indexing) and a postgre database, once the indexing is finished it allows fast queries on relational database.
  • electrs specifically intended for the Electrum protocol