@@ -174,7 +174,7 @@ bool BlockFilterIndex::ReadFilterFromDisk(const FlatFilePos& pos, const uint256&
174174 return true ;
175175}
176176
177- size_t BlockFilterIndex::WriteFilterToDisk (FlatFilePos& pos, const BlockFilter & filter)
177+ size_t BlockFilterIndex::WriteFilterToDisk (FlatFilePos& pos, const BlockFilterBase & filter)
178178{
179179 assert (filter.GetFilterType () == GetFilterType ());
180180
@@ -249,14 +249,14 @@ std::optional<uint256> BlockFilterIndex::ReadFilterHeader(int height, const uint
249249
250250bool BlockFilterIndex::CustomAppend (const interfaces::BlockInfo& block)
251251{
252- BlockFilter filter (m_filter_type, *Assert (block.data ), *Assert (block.undo_data ));
253- const uint256& header = filter. ComputeHeader (m_last_header);
254- bool res = Write (filter, block.height , header);
252+ std::unique_ptr<BlockFilterBase> filter = CreateBlockFilter (m_filter_type, *Assert (block.data ), *Assert (block.undo_data ));
253+ const uint256& header = filter-> ComputeHeader (m_last_header);
254+ bool res = Write (* filter, block.height , header);
255255 if (res) m_last_header = header; // update last header
256256 return res;
257257}
258258
259- bool BlockFilterIndex::Write (const BlockFilter & filter, uint32_t block_height, const uint256& filter_header)
259+ bool BlockFilterIndex::Write (const BlockFilterBase & filter, uint32_t block_height, const uint256& filter_header)
260260{
261261 size_t bytes_written = WriteFilterToDisk (m_next_filter_pos, filter);
262262 if (bytes_written == 0 ) return false ;
@@ -365,6 +365,21 @@ bool BlockFilterIndex::LookupFilter(const CBlockIndex* block_index, BlockFilter&
365365 return ReadFilterFromDisk (entry.pos , entry.hash , filter_out);
366366}
367367
368+ std::unique_ptr<BlockFilterBase> BlockFilterIndex::LookupFilter (const CBlockIndex* block_index) const
369+ {
370+ DBVal entry;
371+ if (!index_util::LookUpOne (*m_db, {block_index->GetBlockHash (), block_index->nHeight }, entry)) {
372+ return nullptr ;
373+ }
374+
375+ BlockFilter filter;
376+ if (!ReadFilterFromDisk (entry.pos , entry.hash , filter)) {
377+ return nullptr ;
378+ }
379+
380+ return CreateBlockFilter (filter.GetFilterType (), filter.GetBlockHash (), filter.GetEncodedFilter ());
381+ }
382+
368383bool BlockFilterIndex::LookupFilterHeader (const CBlockIndex* block_index, uint256& header_out)
369384{
370385 LOCK (m_cs_headers_cache);
0 commit comments