From 664a14ba7ccb40aa82d35a59831acd35db1897a6 Mon Sep 17 00:00:00 2001 From: Carl Dong Date: Thu, 17 Feb 2022 17:07:48 -0500 Subject: coinstats: Move GetUTXOStats to rpc/blockchain rpc/blockchain.cpp is now the only user of the vestigial GetUTXOStats(...). And since GetUTXOStats(...)'s special fallback logic was only really relevant/meant for rpc/blockchain.cpp, we can just move it there. --- src/Makefile.am | 2 -- src/node/coinstats.cpp | 34 ---------------------------------- src/node/coinstats.h | 38 -------------------------------------- src/rpc/blockchain.cpp | 33 +++++++++++++++++++++++++++++++-- 4 files changed, 31 insertions(+), 76 deletions(-) delete mode 100644 src/node/coinstats.cpp delete mode 100644 src/node/coinstats.h (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 9b06199676..7f82d188f0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -192,7 +192,6 @@ BITCOIN_CORE_H = \ node/caches.h \ node/chainstate.h \ node/coin.h \ - node/coinstats.h \ node/context.h \ node/miner.h \ node/minisketchwrapper.h \ @@ -367,7 +366,6 @@ libbitcoin_node_a_SOURCES = \ node/caches.cpp \ node/chainstate.cpp \ node/coin.cpp \ - node/coinstats.cpp \ node/context.cpp \ node/interfaces.cpp \ node/miner.cpp \ diff --git a/src/node/coinstats.cpp b/src/node/coinstats.cpp deleted file mode 100644 index 784d33d698..0000000000 --- a/src/node/coinstats.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2021 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include - -#include -#include -#include -#include - -namespace node { -std::optional GetUTXOStats(CCoinsView* view, BlockManager& blockman, kernel::CoinStatsHashType hash_type, const std::function& interruption_point, const CBlockIndex* pindex, bool index_requested) -{ - // Use CoinStatsIndex if it is requested and available and a hash_type of Muhash or None was requested - if ((hash_type == kernel::CoinStatsHashType::MUHASH || hash_type == kernel::CoinStatsHashType::NONE) && g_coin_stats_index && index_requested) { - if (pindex) { - return g_coin_stats_index->LookUpStats(pindex); - } else { - CBlockIndex* block_index = WITH_LOCK(::cs_main, return blockman.LookupBlockIndex(view->GetBestBlock())); - return g_coin_stats_index->LookUpStats(block_index); - } - } - - // If the coinstats index isn't requested or is otherwise not usable, the - // pindex should either be null or equal to the view's best block. This is - // because without the coinstats index we can only get coinstats about the - // best block. - assert(!pindex || pindex->GetBlockHash() == view->GetBestBlock()); - - return kernel::ComputeUTXOStats(hash_type, view, blockman, interruption_point); -} -} // namespace node diff --git a/src/node/coinstats.h b/src/node/coinstats.h deleted file mode 100644 index b1d1384bb3..0000000000 --- a/src/node/coinstats.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2021 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef BITCOIN_NODE_COINSTATS_H -#define BITCOIN_NODE_COINSTATS_H - -#include - -#include -#include -#include -#include -#include - -#include -#include - -class CCoinsView; -namespace node { -class BlockManager; -} // namespace node - -namespace node { -/** - * Calculate statistics about the unspent transaction output set - * - * @param[in] index_requested Signals if the coinstatsindex should be used (when available). - */ -std::optional GetUTXOStats(CCoinsView* view, node::BlockManager& blockman, - kernel::CoinStatsHashType hash_type, - const std::function& interruption_point = {}, - const CBlockIndex* pindex = nullptr, - bool index_requested = true); -} // namespace node - -#endif // BITCOIN_NODE_COINSTATS_H diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 968485661f..03354f39f6 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -19,11 +19,11 @@ #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -55,7 +55,6 @@ using kernel::CCoinsStats; using kernel::CoinStatsHashType; using node::BlockManager; -using node::GetUTXOStats; using node::NodeContext; using node::ReadBlockFromDisk; using node::SnapshotMetadata; @@ -809,6 +808,36 @@ CoinStatsHashType ParseHashType(const std::string& hash_type_input) } } +/** + * Calculate statistics about the unspent transaction output set + * + * @param[in] index_requested Signals if the coinstatsindex should be used (when available). + */ +static std::optional GetUTXOStats(CCoinsView* view, node::BlockManager& blockman, + kernel::CoinStatsHashType hash_type, + const std::function& interruption_point = {}, + const CBlockIndex* pindex = nullptr, + bool index_requested = true) +{ + // Use CoinStatsIndex if it is requested and available and a hash_type of Muhash or None was requested + if ((hash_type == kernel::CoinStatsHashType::MUHASH || hash_type == kernel::CoinStatsHashType::NONE) && g_coin_stats_index && index_requested) { + if (pindex) { + return g_coin_stats_index->LookUpStats(pindex); + } else { + CBlockIndex* block_index = WITH_LOCK(::cs_main, return blockman.LookupBlockIndex(view->GetBestBlock())); + return g_coin_stats_index->LookUpStats(block_index); + } + } + + // If the coinstats index isn't requested or is otherwise not usable, the + // pindex should either be null or equal to the view's best block. This is + // because without the coinstats index we can only get coinstats about the + // best block. + CHECK_NONFATAL(!pindex || pindex->GetBlockHash() == view->GetBestBlock()); + + return kernel::ComputeUTXOStats(hash_type, view, blockman, interruption_point); +} + static RPCHelpMan gettxoutsetinfo() { return RPCHelpMan{"gettxoutsetinfo", -- cgit v1.2.3