From a6756ecdb2f1ac960433412807aa377d1ee80d05 Mon Sep 17 00:00:00 2001 From: furszy Date: Mon, 30 Jan 2023 17:51:16 -0300 Subject: [PATCH] index: blockfilter, decouple header lookup into its own function --- src/index/blockfilterindex.cpp | 32 +++++++++++++++++++------------- src/index/blockfilterindex.h | 2 ++ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/index/blockfilterindex.cpp b/src/index/blockfilterindex.cpp index 1085b4da77d..204e5d7e18b 100644 --- a/src/index/blockfilterindex.cpp +++ b/src/index/blockfilterindex.cpp @@ -222,6 +222,22 @@ size_t BlockFilterIndex::WriteFilterToDisk(FlatFilePos& pos, const BlockFilter& return data_size; } +std::optional BlockFilterIndex::ReadFilterHeader(int height, const uint256& expected_block_hash) +{ + std::pair read_out; + if (!m_db->Read(DBHeightKey(height), read_out)) { + return std::nullopt; + } + + if (read_out.first != expected_block_hash) { + LogError("%s: previous block header belongs to unexpected block %s; expected %s\n", + __func__, read_out.first.ToString(), expected_block_hash.ToString()); + return std::nullopt; + } + + return read_out.second.header; +} + bool BlockFilterIndex::CustomAppend(const interfaces::BlockInfo& block) { CBlockUndo block_undo; @@ -235,19 +251,9 @@ bool BlockFilterIndex::CustomAppend(const interfaces::BlockInfo& block) return false; } - std::pair read_out; - if (!m_db->Read(DBHeightKey(block.height - 1), read_out)) { - return false; - } - - uint256 expected_block_hash = *Assert(block.prev_hash); - if (read_out.first != expected_block_hash) { - LogError("%s: previous block header belongs to unexpected block %s; expected %s\n", - __func__, read_out.first.ToString(), expected_block_hash.ToString()); - return false; - } - - prev_header = read_out.second.header; + auto op_prev_header = ReadFilterHeader(block.height - 1, *Assert(block.prev_hash)); + if (!op_prev_header) return false; + prev_header = *op_prev_header; } BlockFilter filter(m_filter_type, *Assert(block.data), block_undo); diff --git a/src/index/blockfilterindex.h b/src/index/blockfilterindex.h index 1cfc21d00f4..01ba1025c87 100644 --- a/src/index/blockfilterindex.h +++ b/src/index/blockfilterindex.h @@ -46,6 +46,8 @@ private: bool Write(const BlockFilter& filter, uint32_t block_height, const uint256& filter_header); + std::optional ReadFilterHeader(int height, const uint256& expected_block_hash); + protected: bool CustomInit(const std::optional& block) override;