From addb4f2af183a25ce4a6b6485b5b49575a2ba31b Mon Sep 17 00:00:00 2001 From: Ryan Ofsky Date: Mon, 17 Jan 2022 17:32:19 -0500 Subject: [PATCH] indexes, refactor: Remove CBlockIndex* uses in coinstatsindex LookUpOne function This commit does not change behavior in any way. --- src/index/coinstatsindex.cpp | 12 ++++++------ src/interfaces/chain.h | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/index/coinstatsindex.cpp b/src/index/coinstatsindex.cpp index 7373ed249d..2920c217f0 100644 --- a/src/index/coinstatsindex.cpp +++ b/src/index/coinstatsindex.cpp @@ -299,23 +299,23 @@ bool CoinStatsIndex::Rewind(const CBlockIndex* current_tip, const CBlockIndex* n return BaseIndex::Rewind(current_tip, new_tip); } -static bool LookUpOne(const CDBWrapper& db, const CBlockIndex* block_index, DBVal& result) +static bool LookUpOne(const CDBWrapper& db, const interfaces::BlockKey& 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_index->nHeight), read_out)) { + if (!db.Read(DBHeightKey(block.height), read_out)) { return false; } - if (read_out.first == block_index->GetBlockHash()) { + 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_index->GetBlockHash()), result); + return db.Read(DBHashKey(block.hash), result); } std::optional CoinStatsIndex::LookUpStats(const CBlockIndex* block_index) const @@ -324,7 +324,7 @@ std::optional CoinStatsIndex::LookUpStats(const CBlockIndex* block_ stats.index_used = true; DBVal entry; - if (!LookUpOne(*m_db, block_index, entry)) { + if (!LookUpOne(*m_db, {block_index->GetBlockHash(), block_index->nHeight}, entry)) { return std::nullopt; } @@ -363,7 +363,7 @@ bool CoinStatsIndex::Init() if (pindex) { DBVal entry; - if (!LookUpOne(*m_db, pindex, entry)) { + if (!LookUpOne(*m_db, {pindex->GetBlockHash(), pindex->nHeight}, entry)) { return error("%s: Cannot read current %s state; index may be corrupted", __func__, GetName()); } diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h index 4b192c29cc..ed8df2256c 100644 --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -38,6 +38,12 @@ namespace interfaces { class Handler; class Wallet; +//! Hash/height pair to help track and identify blocks. +struct BlockKey { + uint256 hash; + int height = -1; +}; + //! Helper for findBlock to selectively return pieces of block data. If block is //! found, data will be returned by setting specified output variables. If block //! is not found, output variables will keep their previous values.