From 032f3503e3fe8e144640904670867afc18a4bbbf Mon Sep 17 00:00:00 2001 From: Martin Zumsande Date: Wed, 16 Jul 2025 15:19:54 -0400 Subject: [PATCH] index, refactor: deduplicate LookUpOne LookUpOne is used by both coinstatsindex and blockfilterindex, the two implementations had already started to deviate slightly for no apparent reason. --- src/index/blockfilterindex.cpp | 22 ++-------------------- src/index/coinstatsindex.cpp | 19 ------------------- src/index/db_key.h | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 39 deletions(-) diff --git a/src/index/blockfilterindex.cpp b/src/index/blockfilterindex.cpp index 62a78016ea0..68c11e35ef7 100644 --- a/src/index/blockfilterindex.cpp +++ b/src/index/blockfilterindex.cpp @@ -297,24 +297,6 @@ bool BlockFilterIndex::CustomRemove(const interfaces::BlockInfo& block) return true; } -static bool LookupOne(const CDBWrapper& db, const CBlockIndex* block_index, DBVal& result) -{ - // First check if the result is stored under the height index and the value there matches the - // block hash. This should be the case if the block is on the active chain. - std::pair read_out; - if (!db.Read(DBHeightKey(block_index->nHeight), read_out)) { - return false; - } - if (read_out.first == block_index->GetBlockHash()) { - result = std::move(read_out.second); - return true; - } - - // If value at the height index corresponds to an different block, the result will be stored in - // the hash index. - return db.Read(DBHashKey(block_index->GetBlockHash()), result); -} - static bool LookupRange(CDBWrapper& db, const std::string& index_name, int start_height, const CBlockIndex* stop_index, std::vector& results) { @@ -377,7 +359,7 @@ static bool LookupRange(CDBWrapper& db, const std::string& index_name, int start bool BlockFilterIndex::LookupFilter(const CBlockIndex* block_index, BlockFilter& filter_out) const { DBVal entry; - if (!LookupOne(*m_db, block_index, entry)) { + if (!LookUpOne(*m_db, {block_index->GetBlockHash(), block_index->nHeight}, entry)) { return false; } @@ -400,7 +382,7 @@ bool BlockFilterIndex::LookupFilterHeader(const CBlockIndex* block_index, uint25 } DBVal entry; - if (!LookupOne(*m_db, block_index, entry)) { + if (!LookUpOne(*m_db, {block_index->GetBlockHash(), block_index->nHeight}, entry)) { return false; } diff --git a/src/index/coinstatsindex.cpp b/src/index/coinstatsindex.cpp index a12c52d0658..bb914c1ef13 100644 --- a/src/index/coinstatsindex.cpp +++ b/src/index/coinstatsindex.cpp @@ -234,25 +234,6 @@ bool CoinStatsIndex::CustomRemove(const interfaces::BlockInfo& block) return true; } -static bool LookUpOne(const CDBWrapper& db, const interfaces::BlockRef& block, DBVal& result) -{ - // First check if the result is stored under the height index and the value - // there matches the block hash. This should be the case if the block is on - // the active chain. - std::pair read_out; - if (!db.Read(DBHeightKey(block.height), read_out)) { - return false; - } - if (read_out.first == block.hash) { - result = std::move(read_out.second); - return true; - } - - // If value at the height index corresponds to an different block, the - // result will be stored in the hash index. - return db.Read(DBHashKey(block.hash), result); -} - std::optional CoinStatsIndex::LookUpStats(const CBlockIndex& block_index) const { CCoinsStats stats{block_index.nHeight, block_index.GetBlockHash()}; diff --git a/src/index/db_key.h b/src/index/db_key.h index c5369675e46..329f5643344 100644 --- a/src/index/db_key.h +++ b/src/index/db_key.h @@ -91,4 +91,24 @@ template return true; } +template +static bool LookUpOne(const CDBWrapper& db, const interfaces::BlockRef& block, DBVal& result) +{ + // First check if the result is stored under the height index and the value + // there matches the block hash. This should be the case if the block is on + // the active chain. + std::pair read_out; + if (!db.Read(DBHeightKey(block.height), read_out)) { + return false; + } + if (read_out.first == block.hash) { + result = std::move(read_out.second); + return true; + } + + // If value at the height index corresponds to an different block, the + // result will be stored in the hash index. + return db.Read(DBHashKey(block.hash), result); +} + #endif // BITCOIN_INDEX_DB_KEY_H