Skip to content

Commit 9c8a265

Browse files
committed
refactor: Pass hash_type to CoinsStats in stats object
1 parent 2e2648a commit 9c8a265

File tree

5 files changed

+17
-14
lines changed

5 files changed

+17
-14
lines changed

src/node/coinstats.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ static void ApplyStats(CCoinsStats& stats, T& hash_obj, const uint256& hash, con
8686
template <typename T>
8787
static bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, T hash_obj, const std::function<void()>& interruption_point)
8888
{
89-
stats = CCoinsStats();
9089
std::unique_ptr<CCoinsViewCursor> pcursor(view->Cursor());
9190
assert(pcursor);
9291

@@ -129,9 +128,9 @@ static bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats&
129128
return true;
130129
}
131130

132-
bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, CoinStatsHashType hash_type, const std::function<void()>& interruption_point)
131+
bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, const std::function<void()>& interruption_point)
133132
{
134-
switch (hash_type) {
133+
switch (stats.m_hash_type) {
135134
case(CoinStatsHashType::HASH_SERIALIZED): {
136135
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
137136
return GetUTXOStats(view, blockman, stats, ss, interruption_point);

src/node/coinstats.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ enum class CoinStatsHashType {
2323

2424
struct CCoinsStats
2525
{
26+
CoinStatsHashType m_hash_type;
2627
int nHeight{0};
2728
uint256 hashBlock{};
2829
uint64_t nTransactions{0};
@@ -34,9 +35,11 @@ struct CCoinsStats
3435

3536
//! The number of coins contained.
3637
uint64_t coins_count{0};
38+
39+
CCoinsStats(CoinStatsHashType hash_type) : m_hash_type(hash_type) {}
3740
};
3841

3942
//! Calculate statistics about the unspent transaction output set
40-
bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, const CoinStatsHashType hash_type, const std::function<void()>& interruption_point = {});
43+
bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats& stats, const std::function<void()>& interruption_point = {});
4144

4245
#endif // BITCOIN_NODE_COINSTATS_H

src/rpc/blockchain.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,22 +1093,23 @@ static RPCHelpMan gettxoutsetinfo()
10931093
{
10941094
UniValue ret(UniValue::VOBJ);
10951095

1096-
CCoinsStats stats;
1096+
const CoinStatsHashType hash_type{request.params[0].isNull() ? CoinStatsHashType::HASH_SERIALIZED : ParseHashType(request.params[0].get_str())};
1097+
CCoinsStats stats{hash_type};
1098+
10971099
NodeContext& node = EnsureAnyNodeContext(request.context);
10981100
ChainstateManager& chainman = EnsureChainman(node);
10991101
CChainState& active_chainstate = chainman.ActiveChainstate();
11001102
active_chainstate.ForceFlushStateToDisk();
11011103

1102-
const CoinStatsHashType hash_type{request.params[0].isNull() ? CoinStatsHashType::HASH_SERIALIZED : ParseHashType(request.params[0].get_str())};
1103-
11041104
CCoinsView* coins_view;
11051105
BlockManager* blockman;
11061106
{
11071107
LOCK(::cs_main);
11081108
coins_view = &active_chainstate.CoinsDB();
11091109
blockman = &active_chainstate.m_blockman;
11101110
}
1111-
if (GetUTXOStats(coins_view, *blockman, stats, hash_type, node.rpc_interruption_point)) {
1111+
1112+
if (GetUTXOStats(coins_view, *blockman, stats, node.rpc_interruption_point)) {
11121113
ret.pushKV("height", (int64_t)stats.nHeight);
11131114
ret.pushKV("bestblock", stats.hashBlock.GetHex());
11141115
ret.pushKV("transactions", (int64_t)stats.nTransactions);
@@ -2491,7 +2492,7 @@ static RPCHelpMan dumptxoutset()
24912492
UniValue CreateUTXOSnapshot(NodeContext& node, CChainState& chainstate, CAutoFile& afile)
24922493
{
24932494
std::unique_ptr<CCoinsViewCursor> pcursor;
2494-
CCoinsStats stats;
2495+
CCoinsStats stats{CoinStatsHashType::NONE};
24952496
CBlockIndex* tip;
24962497

24972498
{
@@ -2511,7 +2512,7 @@ UniValue CreateUTXOSnapshot(NodeContext& node, CChainState& chainstate, CAutoFil
25112512

25122513
chainstate.ForceFlushStateToDisk();
25132514

2514-
if (!GetUTXOStats(&chainstate.CoinsDB(), chainstate.m_blockman, stats, CoinStatsHashType::NONE, node.rpc_interruption_point)) {
2515+
if (!GetUTXOStats(&chainstate.CoinsDB(), chainstate.m_blockman, stats, node.rpc_interruption_point)) {
25152516
throw JSONRPCError(RPC_INTERNAL_ERROR, "Unable to read UTXO set");
25162517
}
25172518

src/test/fuzz/coins_view.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,10 @@ FUZZ_TARGET_INIT(coins_view, initialize_coins_view)
258258
(void)GetTransactionSigOpCost(transaction, coins_view_cache, flags);
259259
},
260260
[&] {
261-
CCoinsStats stats;
261+
CCoinsStats stats{CoinStatsHashType::HASH_SERIALIZED};
262262
bool expected_code_path = false;
263263
try {
264-
(void)GetUTXOStats(&coins_view_cache, WITH_LOCK(::cs_main, return std::ref(g_chainman.m_blockman)), stats, CoinStatsHashType::HASH_SERIALIZED);
264+
(void)GetUTXOStats(&coins_view_cache, WITH_LOCK(::cs_main, return std::ref(g_chainman.m_blockman)), stats);
265265
} catch (const std::logic_error&) {
266266
expected_code_path = true;
267267
}

src/validation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5285,14 +5285,14 @@ bool ChainstateManager::PopulateAndValidateSnapshot(
52855285
return false;
52865286
}
52875287

5288-
CCoinsStats stats;
5288+
CCoinsStats stats{CoinStatsHashType::HASH_SERIALIZED};
52895289
auto breakpoint_fnc = [] { /* TODO insert breakpoint here? */ };
52905290

52915291
// As above, okay to immediately release cs_main here since no other context knows
52925292
// about the snapshot_chainstate.
52935293
CCoinsViewDB* snapshot_coinsdb = WITH_LOCK(::cs_main, return &snapshot_chainstate.CoinsDB());
52945294

5295-
if (!GetUTXOStats(snapshot_coinsdb, WITH_LOCK(::cs_main, return std::ref(m_blockman)), stats, CoinStatsHashType::HASH_SERIALIZED, breakpoint_fnc)) {
5295+
if (!GetUTXOStats(snapshot_coinsdb, WITH_LOCK(::cs_main, return std::ref(m_blockman)), stats, breakpoint_fnc)) {
52965296
LogPrintf("[snapshot] failed to generate coins stats\n");
52975297
return false;
52985298
}

0 commit comments

Comments
 (0)