mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 03:22:47 +01:00
fix: avoid potential divide-by-zero in H/s stats calculation
This commit is contained in:
parent
7c00c868d8
commit
b39c6b9909
29
src/init.cpp
29
src/init.cpp
@ -848,20 +848,23 @@ static void PeriodicStats(NodeContext& node)
|
||||
LogPrintf("%s: GetUTXOStats failed\n", __func__);
|
||||
}
|
||||
|
||||
// short version of GetNetworkHashPS(120, -1);
|
||||
CBlockIndex *tip = chainman.ActiveChain().Tip();
|
||||
CBlockIndex *pindex = tip;
|
||||
int64_t minTime = pindex->GetBlockTime();
|
||||
int64_t maxTime = minTime;
|
||||
for (int i = 0; i < 120 && pindex->pprev != nullptr; i++) {
|
||||
pindex = pindex->pprev;
|
||||
int64_t time = pindex->GetBlockTime();
|
||||
minTime = std::min(time, minTime);
|
||||
maxTime = std::max(time, maxTime);
|
||||
}
|
||||
arith_uint256 workDiff = tip->nChainWork - pindex->nChainWork;
|
||||
int64_t timeDiff = maxTime - minTime;
|
||||
double nNetworkHashPS = workDiff.getdouble() / timeDiff;
|
||||
double nNetworkHashPS = [&]() {
|
||||
// Short version of GetNetworkHashPS(120, -1);
|
||||
CBlockIndex *pindex = tip;
|
||||
int64_t minTime = pindex->GetBlockTime();
|
||||
int64_t maxTime = minTime;
|
||||
for (int i = 0; i < 120 && pindex->pprev != nullptr; i++) {
|
||||
pindex = pindex->pprev;
|
||||
int64_t time = pindex->GetBlockTime();
|
||||
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;
|
||||
return workDiff.getdouble() / timeDiff;
|
||||
}();
|
||||
|
||||
::g_stats_client->gaugeDouble("network.hashesPerSecond", nNetworkHashPS);
|
||||
::g_stats_client->gaugeDouble("network.terahashesPerSecond", nNetworkHashPS / 1e12);
|
||||
|
Loading…
Reference in New Issue
Block a user