BlockFilterIndex

BlockFilterIndex is used to store and retrieve block filters, hashes, and headers for a range of blocks by height. An index is constructed for each supported filter type with its own database (ie. filter data for different types are stored in separate databases).

Synopsis

Declared in <index/blockfilterindex.h>

class BlockFilterIndex final
    : public BaseIndex

Description

This index is used to serve BIP 157 net requests.

Base Classes

NameDescription
BaseIndexBase class for the node's optional block-chain indexes.

Member Functions

NameDescription
BlockFilterIndex [constructor]Constructs the index, which becomes available to be queried.
BlockUntilSyncedToCurrentChain Blocks the current thread until the index is caught up to the current state of the block chain. This only blocks if the index has gotten in sync once and only needs to process blocks in the ValidationInterface queue. If the index is catching up from far behind, this method does not block and immediately returns false.
CustomOptions [virtual]Request notifications for pruned blocks so filters can be built.
GetFilterType Get the filter type this index stores.
GetName Get the name of the index for display in logs.
GetSummary Get a summary of the index and its state.
Init Initializes the sync state and registers the instance to the validation interface so that it stays in sync with blockchain updates.
Interrupt Signal the background sync thread to stop as soon as possible.
LookupFilter Get a single filter by block.
LookupFilterHashRange Get a range of filter hashes between two heights on a chain.
LookupFilterHeader Get a single filter header by block.
LookupFilterRange Get a range of filters between two heights on a chain.
StartBackgroundSync Starts the initial sync process on a background thread.
Stop Stops the instance from staying in sync with blockchain updates.
Sync index_sync Sync the index with the block index starting from the current best block. Intended to be run in its own thread, m_thread_sync, and can be interrupted with m_interrupt. Once the index gets in sync, the m_synced flag is set and the BlockConnected ValidationInterface callback takes over and the sync thread exits.

Protected Types

NameDescription
DB The database stores a block locator of the chain the database is synced to so that the index can efficiently determine the point it last stopped at. A locator is used instead of a simple hash of the chain tip because blocks and block index entries may not be flushed to disk until after this database is updated.

Protected Member Functions

NameDescription
ActiveTipChange [virtual]Notifies listeners any time the block chain tip changes, synchronously.
BlockChecked [virtual]Notifies listeners of a block validation result. If the provided BlockValidationState IsValid, the provided block is guaranteed to be the current best block at the time the callback was generated (not necessarily now).
BlockConnected [virtual]Handle a newly connected block by appending it to the index.
BlockDisconnected [virtual]Notifies listeners of a block being disconnected Provides the block that was disconnected.
ChainStateFlushed [virtual]Handle a chainstate flush by committing the index up to the flushed point.
CustomAppend [virtual]Compute and store the filter for a newly connected block.
CustomCommit [virtual]Flush the next filter file position alongside the index commit.
CustomInit [virtual]Restore in-memory state from the database on startup.
CustomRemove [virtual]Discard the filter for a block being disconnected.
GetDB [virtual]Access the database backing this filter index.
MempoolTransactionsRemovedForBlock [virtual]Notifies listeners of transactions removed from the mempool as as a result of new block being connected. MempoolTransactionsRemovedForBlock will be fired before BlockConnected.
NewPoWValidBlock [virtual]Notifies listeners that a block which builds directly on our current tip has been received and connected to the headers tree, though not validated yet.
SetBestBlockIndex Update the internal best block index as well as the prune lock.
TransactionAddedToMempool [virtual]Notifies listeners of a transaction having been added to mempool.
TransactionRemovedFromMempool [virtual]Notifies listeners of a transaction leaving mempool.
UpdatedBlockTip [virtual]Notifies listeners when the block chain tip advances.

Protected Data Members

NameDescription
m_chain Interface used to query the blockchain the index tracks.
m_chainstate Chainstate the index reads blocks from (not owned).
m_name Human-readable name of the index.
m_thread_name Name given to the background sync thread.

Non-Member Functions

NameDescription
GetBlockFilterIndexGet a block filter index by type. Returns nullptr if index has not been initialized or was already destroyed.