Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
BlockFilterIndex Class Referencefinal

BlockFilterIndex is used to store and retrieve block filters, hashes, and headers for a range of blocks by height. More...

#include <blockfilterindex.h>

Inheritance diagram for BlockFilterIndex:
[legend]
Collaboration diagram for BlockFilterIndex:
[legend]

Public Member Functions

 BlockFilterIndex (std::unique_ptr< interfaces::Chain > chain, BlockFilterType filter_type, size_t n_cache_size, bool f_memory=false, bool f_wipe=false)
 Constructs the index, which becomes available to be queried.
interfaces::Chain::NotifyOptions CustomOptions () override
 Return custom notification options for index.
BlockFilterType GetFilterType () const
bool LookupFilter (const CBlockIndex *block_index, BlockFilter &filter_out) const
 Get a single filter by block.
bool LookupFilterHeader (const CBlockIndex *block_index, uint256 &header_out) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_headers_cache)
 Get a single filter header by block.
bool LookupFilterRange (int start_height, const CBlockIndex *stop_index, std::vector< BlockFilter > &filters_out) const
 Get a range of filters between two heights on a chain.
bool LookupFilterHashRange (int start_height, const CBlockIndex *stop_index, std::vector< uint256 > &hashes_out) const
 Get a range of filter hashes between two heights on a chain.
Public Member Functions inherited from BaseIndex
 BaseIndex (std::unique_ptr< interfaces::Chain > chain, std::string name)
virtual ~BaseIndex ()
 Destructor interrupts sync thread if running and blocks until it exits.
const std::string & GetName () const LIFETIMEBOUND
 Get the name of the index for display in logs.
bool BlockUntilSyncedToCurrentChain() const LOCKS_EXCLUDED(void Interrupt ()
 Blocks the current thread until the index is caught up to the current state of the block chain.
bool Init ()
 Initializes the sync state and registers the instance to the validation interface so that it stays in sync with blockchain updates.
bool StartBackgroundSync ()
 Starts the initial sync process on a background thread.
void Sync ()
 Sync the index with the block index starting from the current best block.
void Stop ()
 Stops the instance from staying in sync with blockchain updates.
IndexSummary GetSummary () const
 Get a summary of the index and its state.

Protected Member Functions

bool CustomInit (const std::optional< interfaces::BlockRef > &block) override
 Initialize internal state from the database and block index.
bool CustomCommit (CDBBatch &batch) override
 Virtual method called internally by Commit that can be overridden to atomically commit more index state.
bool CustomAppend (const interfaces::BlockInfo &block) override
 Write update index entries for a newly connected block.
bool CustomRemove (const interfaces::BlockInfo &block) override
 Rewind index by one block during a chain reorg.
BaseIndex::DBGetDB () const LIFETIMEBOUND override
Protected Member Functions inherited from BaseIndex
void BlockConnected (const kernel::ChainstateRole &role, const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex) override
 Notifies listeners of a block being connected.
void ChainStateFlushed (const kernel::ChainstateRole &role, const CBlockLocator &locator) override
 Notifies listeners of the new active block chain on-disk.
void SetBestBlockIndex (const CBlockIndex *block)
 Update the internal best block index as well as the prune lock.
Protected Member Functions inherited from CValidationInterface
 ~CValidationInterface ()=default
 Protected destructor so that instances can only be deleted by derived classes.
virtual void UpdatedBlockTip (const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload)
 Notifies listeners when the block chain tip advances.
virtual void ActiveTipChange (const CBlockIndex &new_tip, bool is_ibd)
 Notifies listeners any time the block chain tip changes, synchronously.
virtual void TransactionAddedToMempool (const NewMempoolTransactionInfo &tx, uint64_t mempool_sequence)
 Notifies listeners of a transaction having been added to mempool.
virtual void TransactionRemovedFromMempool (const CTransactionRef &tx, MemPoolRemovalReason reason, uint64_t mempool_sequence)
 Notifies listeners of a transaction leaving mempool.
virtual void MempoolTransactionsRemovedForBlock (const std::vector< RemovedMempoolTransactionInfo > &txs_removed_for_block, unsigned int nBlockHeight)
virtual void BlockDisconnected (const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
 Notifies listeners of a block being disconnected Provides the block that was disconnected.
virtual void BlockChecked (const std::shared_ptr< const CBlock > &, const BlockValidationState &)
 Notifies listeners of a block validation result.
virtual void NewPoWValidBlock (const CBlockIndex *pindex, const std::shared_ptr< const CBlock > &block)
 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.

Private Member Functions

bool ReadFilterFromDisk (const FlatFilePos &pos, const uint256 &hash, BlockFilter &filter) const
size_t WriteFilterToDisk (FlatFilePos &pos, const BlockFilter &filter)
std::unordered_map< uint256, uint256, BlockHasher > m_headers_cache GUARDED_BY (m_cs_headers_cache)
 cache of block hash to filter header, to avoid disk access when responding to getcfcheckpt.
bool AllowPrune () const override
bool Write (const BlockFilter &filter, uint32_t block_height, const uint256 &filter_header)
std::optional< uint256ReadFilterHeader (int height, const uint256 &expected_block_hash)

Private Attributes

BlockFilterType m_filter_type
std::unique_ptr< BaseIndex::DBm_db
FlatFilePos m_next_filter_pos
std::unique_ptr< FlatFileSeqm_filter_fileseq
Mutex m_cs_headers_cache
uint256 m_last_header {}

Additional Inherited Members

Protected Attributes inherited from BaseIndex
std::unique_ptr< interfaces::Chainm_chain
Chainstatem_chainstate {nullptr}
const std::string m_name

Detailed Description

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).

This index is used to serve BIP 157 net requests.

Definition at line 40 of file blockfilterindex.h.

Constructor & Destructor Documentation

◆ BlockFilterIndex()

BlockFilterIndex::BlockFilterIndex ( std::unique_ptr< interfaces::Chain > chain,
BlockFilterType filter_type,
size_t n_cache_size,
bool f_memory = false,
bool f_wipe = false )
explicit

Constructs the index, which becomes available to be queried.

Definition at line 77 of file blockfilterindex.cpp.

Here is the call graph for this function:

Member Function Documentation

◆ AllowPrune()

bool BlockFilterIndex::AllowPrune ( ) const
inlineoverrideprivatevirtual

Implements BaseIndex.

Definition at line 59 of file blockfilterindex.h.

◆ CustomAppend()

bool BlockFilterIndex::CustomAppend ( const interfaces::BlockInfo & block)
overrideprotectedvirtual

Write update index entries for a newly connected block.

Reimplemented from BaseIndex.

Definition at line 251 of file blockfilterindex.cpp.

Here is the call graph for this function:

◆ CustomCommit()

bool BlockFilterIndex::CustomCommit ( CDBBatch & batch)
overrideprotectedvirtual

Virtual method called internally by Commit that can be overridden to atomically commit more index state.

Reimplemented from BaseIndex.

Definition at line 128 of file blockfilterindex.cpp.

Here is the call graph for this function:

◆ CustomInit()

bool BlockFilterIndex::CustomInit ( const std::optional< interfaces::BlockRef > & block)
overrideprotectedvirtual

Initialize internal state from the database and block index.

Reimplemented from BaseIndex.

Definition at line 99 of file blockfilterindex.cpp.

Here is the call graph for this function:

◆ CustomOptions()

interfaces::Chain::NotifyOptions BlockFilterIndex::CustomOptions ( )
overridevirtual

Return custom notification options for index.

Reimplemented from BaseIndex.

Definition at line 92 of file blockfilterindex.cpp.

◆ CustomRemove()

bool BlockFilterIndex::CustomRemove ( const interfaces::BlockInfo & block)
overrideprotectedvirtual

Rewind index by one block during a chain reorg.

Reimplemented from BaseIndex.

Definition at line 277 of file blockfilterindex.cpp.

Here is the call graph for this function:

◆ GetDB()

BaseIndex::DB & BlockFilterIndex::GetDB ( ) const
inlineoverrideprotectedvirtual

Implements BaseIndex.

Definition at line 74 of file blockfilterindex.h.

◆ GetFilterType()

BlockFilterType BlockFilterIndex::GetFilterType ( ) const
inline

Definition at line 83 of file blockfilterindex.h.

Here is the caller graph for this function:

◆ GUARDED_BY()

std::unordered_map< uint256, uint256, BlockHasher > m_headers_cache BlockFilterIndex::GUARDED_BY ( m_cs_headers_cache )
private

cache of block hash to filter header, to avoid disk access when responding to getcfcheckpt.

◆ LookupFilter()

bool BlockFilterIndex::LookupFilter ( const CBlockIndex * block_index,
BlockFilter & filter_out ) const

Get a single filter by block.

Definition at line 359 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LookupFilterHashRange()

bool BlockFilterIndex::LookupFilterHashRange ( int start_height,
const CBlockIndex * stop_index,
std::vector< uint256 > & hashes_out ) const

Get a range of filter hashes between two heights on a chain.

Definition at line 419 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LookupFilterHeader()

bool BlockFilterIndex::LookupFilterHeader ( const CBlockIndex * block_index,
uint256 & header_out )

Get a single filter header by block.

Definition at line 369 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LookupFilterRange()

bool BlockFilterIndex::LookupFilterRange ( int start_height,
const CBlockIndex * stop_index,
std::vector< BlockFilter > & filters_out ) const

Get a range of filters between two heights on a chain.

Definition at line 399 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReadFilterFromDisk()

bool BlockFilterIndex::ReadFilterFromDisk ( const FlatFilePos & pos,
const uint256 & hash,
BlockFilter & filter ) const
private

Definition at line 152 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReadFilterHeader()

std::optional< uint256 > BlockFilterIndex::ReadFilterHeader ( int height,
const uint256 & expected_block_hash )
private

Definition at line 235 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Write()

bool BlockFilterIndex::Write ( const BlockFilter & filter,
uint32_t block_height,
const uint256 & filter_header )
private

Definition at line 260 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteFilterToDisk()

size_t BlockFilterIndex::WriteFilterToDisk ( FlatFilePos & pos,
const BlockFilter & filter )
private

Definition at line 178 of file blockfilterindex.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_cs_headers_cache

Mutex BlockFilterIndex::m_cs_headers_cache
private

Definition at line 52 of file blockfilterindex.h.

◆ m_db

std::unique_ptr<BaseIndex::DB> BlockFilterIndex::m_db
private

Definition at line 44 of file blockfilterindex.h.

◆ m_filter_fileseq

std::unique_ptr<FlatFileSeq> BlockFilterIndex::m_filter_fileseq
private

Definition at line 47 of file blockfilterindex.h.

◆ m_filter_type

BlockFilterType BlockFilterIndex::m_filter_type
private

Definition at line 43 of file blockfilterindex.h.

◆ m_last_header

uint256 BlockFilterIndex::m_last_header {}
private

Definition at line 57 of file blockfilterindex.h.

◆ m_next_filter_pos

FlatFilePos BlockFilterIndex::m_next_filter_pos
private

Definition at line 46 of file blockfilterindex.h.


The documentation for this class was generated from the following files: