Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14864567
D11596.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
D11596.id.diff
View Options
diff --git a/src/node/coinstats.h b/src/node/coinstats.h
--- a/src/node/coinstats.h
+++ b/src/node/coinstats.h
@@ -23,6 +23,7 @@
};
struct CCoinsStats {
+ CoinStatsHashType m_hash_type;
int nHeight{0};
BlockHash hashBlock{};
uint64_t nTransactions{0};
@@ -34,11 +35,12 @@
//! The number of coins contained.
uint64_t coins_count{0};
+
+ CCoinsStats(CoinStatsHashType hash_type) : m_hash_type(hash_type) {}
};
//! Calculate statistics about the unspent transaction output set
bool GetUTXOStats(CCoinsView *view, BlockManager &blockman, CCoinsStats &stats,
- const CoinStatsHashType hash_type,
const std::function<void()> &interruption_point = {});
#endif // BITCOIN_NODE_COINSTATS_H
diff --git a/src/node/coinstats.cpp b/src/node/coinstats.cpp
--- a/src/node/coinstats.cpp
+++ b/src/node/coinstats.cpp
@@ -88,7 +88,6 @@
static bool GetUTXOStats(CCoinsView *view, BlockManager &blockman,
CCoinsStats &stats, T hash_obj,
const std::function<void()> &interruption_point) {
- stats = CCoinsStats();
std::unique_ptr<CCoinsViewCursor> pcursor(view->Cursor());
assert(pcursor);
@@ -134,9 +133,8 @@
}
bool GetUTXOStats(CCoinsView *view, BlockManager &blockman, CCoinsStats &stats,
- CoinStatsHashType hash_type,
const std::function<void()> &interruption_point) {
- switch (hash_type) {
+ switch (stats.m_hash_type) {
case (CoinStatsHashType::HASH_SERIALIZED): {
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
return GetUTXOStats(view, blockman, stats, ss, interruption_point);
diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
--- a/src/rpc/blockchain.cpp
+++ b/src/rpc/blockchain.cpp
@@ -1285,16 +1285,16 @@
const JSONRPCRequest &request) -> UniValue {
UniValue ret(UniValue::VOBJ);
- CCoinsStats stats;
- NodeContext &node = EnsureAnyNodeContext(request.context);
- ChainstateManager &chainman = EnsureChainman(node);
- CChainState &active_chainstate = chainman.ActiveChainstate();
- active_chainstate.ForceFlushStateToDisk();
-
const CoinStatsHashType hash_type{
request.params[0].isNull()
? CoinStatsHashType::HASH_SERIALIZED
: ParseHashType(request.params[0].get_str())};
+ CCoinsStats stats{hash_type};
+
+ NodeContext &node = EnsureAnyNodeContext(request.context);
+ ChainstateManager &chainman = EnsureChainman(node);
+ CChainState &active_chainstate = chainman.ActiveChainstate();
+ active_chainstate.ForceFlushStateToDisk();
CCoinsView *coins_view;
BlockManager *blockman;
@@ -1303,7 +1303,8 @@
coins_view = &active_chainstate.CoinsDB();
blockman = &active_chainstate.m_blockman;
}
- if (GetUTXOStats(coins_view, *blockman, stats, hash_type,
+
+ if (GetUTXOStats(coins_view, *blockman, stats,
node.rpc_interruption_point)) {
ret.pushKV("height", int64_t(stats.nHeight));
ret.pushKV("bestblock", stats.hashBlock.GetHex());
@@ -3078,7 +3079,7 @@
UniValue CreateUTXOSnapshot(NodeContext &node, CChainState &chainstate,
CAutoFile &afile) {
std::unique_ptr<CCoinsViewCursor> pcursor;
- CCoinsStats stats;
+ CCoinsStats stats{CoinStatsHashType::NONE};
CBlockIndex *tip;
{
@@ -3100,7 +3101,6 @@
chainstate.ForceFlushStateToDisk();
if (!GetUTXOStats(&chainstate.CoinsDB(), chainstate.m_blockman, stats,
- CoinStatsHashType::NONE,
node.rpc_interruption_point)) {
throw JSONRPCError(RPC_INTERNAL_ERROR, "Unable to read UTXO set");
}
diff --git a/src/test/fuzz/coins_view.cpp b/src/test/fuzz/coins_view.cpp
--- a/src/test/fuzz/coins_view.cpp
+++ b/src/test/fuzz/coins_view.cpp
@@ -299,14 +299,14 @@
break;
}
case 3: {
- CCoinsStats stats;
+ CCoinsStats stats{CoinStatsHashType::HASH_SERIALIZED};
bool expected_code_path = false;
try {
(void)GetUTXOStats(
&coins_view_cache,
WITH_LOCK(::cs_main,
return std::ref(g_chainman.m_blockman)),
- stats, CoinStatsHashType::HASH_SERIALIZED);
+ stats);
} catch (const std::logic_error &) {
expected_code_path = true;
}
diff --git a/src/validation.cpp b/src/validation.cpp
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -6287,7 +6287,7 @@
assert(coins_cache.GetBestBlock() == base_blockhash);
- CCoinsStats stats;
+ CCoinsStats stats{CoinStatsHashType::HASH_SERIALIZED};
auto breakpoint_fnc = [] { /* TODO insert breakpoint here? */ };
// As above, okay to immediately release cs_main here since no other context
@@ -6297,7 +6297,7 @@
if (!GetUTXOStats(snapshot_coinsdb,
WITH_LOCK(::cs_main, return std::ref(m_blockman)), stats,
- CoinStatsHashType::HASH_SERIALIZED, breakpoint_fnc)) {
+ breakpoint_fnc)) {
LogPrintf("[snapshot] failed to generate coins stats\n");
return false;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, May 20, 20:36 (9 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5863362
Default Alt Text
D11596.id.diff (5 KB)
Attached To
D11596: refactor: Pass hash_type to CoinsStats in stats object
Event Timeline
Log In to Comment