5 #ifndef BITCOIN_INDEX_BLOCKFILTERINDEX_H 6 #define BITCOIN_INDEX_BLOCKFILTERINDEX_H 21 #include <unordered_map> 28 static const char* const DEFAULT_BLOCKFILTERINDEX = "0";
31 static constexpr int CFCHECKPT_INTERVAL = 1000;
44 std::unique_ptr<BaseIndex::DB>
m_db;
54 std::unordered_map<uint256, uint256, BlockHasher> m_headers_cache
GUARDED_BY(m_cs_headers_cache);
66 bool CustomInit(
const std::optional<interfaces::BlockRef>& block)
override;
79 size_t n_cache_size,
bool f_memory =
false,
bool f_wipe =
false);
93 std::vector<BlockFilter>& filters_out)
const;
97 std::vector<uint256>& hashes_out)
const;
114 size_t n_cache_size,
bool f_memory =
false,
bool f_wipe =
false);
126 #endif // BITCOIN_INDEX_BLOCKFILTERINDEX_H bool LookupFilter(const CBlockIndex *block_index, BlockFilter &filter_out) const
Get a single filter by block.
Interval between compact filter checkpoints.
virtual interfaces::Chain::NotifyOptions CustomOptions()
Return custom notification options for index.
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.
virtual bool CustomAppend(const interfaces::BlockInfo &block)
Write update index entries for a newly connected block.
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)
std::optional< uint256 > ReadFilterHeader(int height, const uint256 &expected_block_hash)
bool Write(const BlockFilter &filter, uint32_t block_height, const uint256 &filter_header)
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.
Options specifying which chain notifications are required.
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 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. ...
virtual bool CustomInit(const std::optional< interfaces::BlockRef > &block)
Initialize internal state from the database and block index.
BlockFilterType m_filter_type
virtual bool CustomRemove(const interfaces::BlockInfo &block)
Rewind index by one block during a chain reorg.
virtual bool CustomCommit(CDBBatch &batch)
Virtual method called internally by Commit that can be overridden to atomically commit more index sta...
#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
std::unique_ptr< FlatFileSeq > m_filter_fileseq
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.