Crate blocks_iterator
source ·Expand description
Blocks Iterator
Read bitcoin blocks directory containing blocks*.dat
files, and produce a ordered stream
of BlockExtra
Blocks could be consumed in 2 different ways:
- Through the
iter()
method. - Via unix pipeline using the
PipeIterator
Re-exports
Structs
The bitcoin block and additional metadata returned by the crate::iter() method
Configuration parameters, most important the bitcoin blocks directory
Before reorder we keep only the position of the block in the file system and data relative
to the block hash, the previous hash and the following hash (populated during reorder phase)
We will need
to read the block from disk again, but by doing so we will avoid using too much
memory in the
OutOfOrderBlocks
map.Contains counter and instants to provide per period stats over transaction and blocks processed
Utility used to return true after
period
Iterator to use un Unix-style pipe composition when receiving BlockExtra from stdin and
optionally propogating those to stdout
Functions
Return an Iterator of
BlockExtra
read from blocks*.dat
contained in the config.blocks_dir
Blocks returned are iterated in order, starting from the genesis to the highest block
(minus config.max_reorg
) in the directory, unless config.stop_at_height
is specified.par_iterDeprecated
par_iter
is used when the task to be performed on the blockchain is more costly
than iterating the blocks. For example verifying the spending conditions in the blockchain.
like [crate::iter
] accepts configuration parameters via the Config
struct.
A PREPROC
closure has to be provided, this process a single block and produce a Vec of
user defined struct DATA
.
A TASK
closure accepts the DATA
struct and a shared STATE
and it is executed in a
concurrent way. The TASK
closure returns a bool which indicates if the execution should be
terminated.
Note that access to STATE
in TASK
should be done carefully otherwise the contention would
reduce the speed of execution.periodic_log_levelDeprecated
Utility method usually returning log::Level::Debug but when
i
is divisible by every
returns log::Level::Info