add chain interface methods for using BIP 157 block filters

This is useful for speeding up wallet rescans and is based on an
earlier version from PR #15845 ("wallet: Fast rescan with BIP157 block
filters"), which was never merged.

Co-authored-by: MacroFake <falke.marco@gmail.com>
This commit is contained in:
Sebastian Falbesoner
2022-08-23 16:10:59 +02:00
parent e7a0e96271
commit 088e38d3bb
2 changed files with 24 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
#ifndef BITCOIN_INTERFACES_CHAIN_H
#define BITCOIN_INTERFACES_CHAIN_H
#include <blockfilter.h>
#include <primitives/transaction.h> // For CTransactionRef
#include <util/settings.h> // For util::SettingsValue
@@ -143,6 +144,13 @@ public:
//! or one of its ancestors.
virtual std::optional<int> findLocatorFork(const CBlockLocator& locator) = 0;
//! Returns whether a block filter index is available.
virtual bool hasBlockFilterIndex(BlockFilterType filter_type) = 0;
//! Returns whether any of the elements match the block via a BIP 157 block filter
//! or std::nullopt if the block filter for this block couldn't be found.
virtual std::optional<bool> blockFilterMatchesAny(BlockFilterType filter_type, const uint256& block_hash, const GCSFilter::ElementSet& filter_set) = 0;
//! Return whether node has the block and optionally return block metadata
//! or contents.
virtual bool findBlock(const uint256& hash, const FoundBlock& block={}) = 0;