fix: avoid potential divide-by-zero in H/s stats calculation

This commit is contained in:
Kittywhiskers Van Gogh 2024-12-08 10:14:46 +00:00
parent 7c00c868d8
commit b39c6b9909
No known key found for this signature in database
GPG Key ID: 30CD0C065E5C4AAD

View File

@ -848,8 +848,9 @@ static void PeriodicStats(NodeContext& node)
LogPrintf("%s: GetUTXOStats failed\n", __func__);
}
// short version of GetNetworkHashPS(120, -1);
CBlockIndex *tip = chainman.ActiveChain().Tip();
double nNetworkHashPS = [&]() {
// Short version of GetNetworkHashPS(120, -1);
CBlockIndex *pindex = tip;
int64_t minTime = pindex->GetBlockTime();
int64_t maxTime = minTime;
@ -859,9 +860,11 @@ static void PeriodicStats(NodeContext& node)
minTime = std::min(time, minTime);
maxTime = std::max(time, maxTime);
}
if (minTime == maxTime) return 0.0;
arith_uint256 workDiff = tip->nChainWork - pindex->nChainWork;
int64_t timeDiff = maxTime - minTime;
double nNetworkHashPS = workDiff.getdouble() / timeDiff;
return workDiff.getdouble() / timeDiff;
}();
::g_stats_client->gaugeDouble("network.hashesPerSecond", nNetworkHashPS);
::g_stats_client->gaugeDouble("network.terahashesPerSecond", nNetworkHashPS / 1e12);