5 #ifndef BITCOIN_INDEX_BLOCKFILTERINDEX_H 6 #define BITCOIN_INDEX_BLOCKFILTERINDEX_H 9 #include <blockfilter.h> 15 #include <unordered_map> 33 std::unique_ptr<BaseIndex::DB>
m_db;
48 bool CustomInit(
const std::optional<interfaces::BlockKey>& block)
override;
61 size_t n_cache_size,
bool f_memory =
false,
bool f_wipe =
false);
73 std::vector<BlockFilter>& filters_out)
const;
77 std::vector<uint256>& hashes_out)
const;
94 size_t n_cache_size,
bool f_memory =
false,
bool f_wipe =
false);
106 #endif // BITCOIN_INDEX_BLOCKFILTERINDEX_H bool LookupFilter(const CBlockIndex *block_index, BlockFilter &filter_out) const
Get a single filter by block.
BlockFilterIndex is used to store and retrieve block filters, hashes, and headers for a range of bloc...
Batch of changes queued to be written to a CDBWrapper.
void ForEachBlockFilterIndex(std::function< void(BlockFilterIndex &)> fn)
Iterate over all running block filter indexes, invoking fn on each.
static const char *const DEFAULT_BLOCKFILTERINDEX
bool AllowPrune() const override
std::unique_ptr< BaseIndex::DB > m_db
The database stores a block locator of the chain the database is synced to so that the index can effi...
Block data sent with blockConnected, blockDisconnected notifications.
Base class for indices of blockchain data.
size_t WriteFilterToDisk(FlatFilePos &pos, const BlockFilter &filter)
bool CustomInit(const std::optional< interfaces::BlockKey > &block) override
Initialize internal state from the database and block index.
BlockFilterIndex * GetBlockFilterIndex(BlockFilterType filter_type)
Get a block filter index by type.
bool LookupFilterHeader(const CBlockIndex *block_index, uint256 &header_out) EXCLUSIVE_LOCKS_REQUIRED(!m_cs_headers_cache)
Get a single filter header by block.
Complete block filter struct as defined in BIP 157.
BaseIndex::DB & GetDB() const LIFETIMEBOUND override
void DestroyAllBlockFilterIndexes()
Destroy all open block filter indexes.
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.
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.
bool CustomRewind(const interfaces::BlockKey ¤t_tip, const interfaces::BlockKey &new_tip) override
Rewind index to an earlier chain tip during a chain reorg.
bool InitBlockFilterIndex(std::function< std::unique_ptr< interfaces::Chain >()> make_chain, BlockFilterType filter_type, size_t n_cache_size, bool f_memory=false, bool f_wipe=false)
Initialize a block filter index for the given type if one does not already exist. ...
BlockFilterType m_filter_type
static constexpr int CFCHECKPT_INTERVAL
Interval between compact filter checkpoints.
#define EXCLUSIVE_LOCKS_REQUIRED(...)
The block chain is a tree shaped structure starting with the genesis block at the root...
FlatFilePos m_next_filter_pos
bool DestroyBlockFilterIndex(BlockFilterType filter_type)
Destroy the block filter index with the given type.
BlockFilterType GetFilterType() const
Hash/height pair to help track and identify blocks.
bool CustomCommit(CDBBatch &batch) override
Virtual method called internally by Commit that can be overridden to atomically commit more index sta...
std::unique_ptr< FlatFileSeq > m_filter_fileseq
bool CustomAppend(const interfaces::BlockInfo &block) override
Write update index entries for a newly connected block.
bool ReadFilterFromDisk(const FlatFilePos &pos, const uint256 &hash, BlockFilter &filter) const
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.
std::unordered_map< uint256, uint256, FilterHeaderHasher > m_headers_cache GUARDED_BY(m_cs_headers_cache)
cache of block hash to filter header, to avoid disk access when responding to getcfcheckpt.