Reset stratum share counters after initial sync

pull/123/head
SChernykh 2 years ago
parent 25e5f80a81
commit cc6ce4a366

@ -27,6 +27,7 @@
#include "intrin_portable.h" #include "intrin_portable.h"
#include "keccak.h" #include "keccak.h"
#include "p2p_server.h" #include "p2p_server.h"
#include "stratum_server.h"
#include "params.h" #include "params.h"
#include "json_parsers.h" #include "json_parsers.h"
#include <rapidjson/document.h> #include <rapidjson/document.h>
@ -985,7 +986,8 @@ void SideChain::verify_loop(PoolBlock* block)
// This block is now verified // This block is now verified
if (is_longer_chain(highest_block, block)) { bool is_alternative;
if (is_longer_chain(highest_block, block, is_alternative)) {
highest_block = block; highest_block = block;
} }
else if (highest_block && (highest_block->m_sidechainHeight > block->m_sidechainHeight)) { else if (highest_block && (highest_block->m_sidechainHeight > block->m_sidechainHeight)) {
@ -1330,7 +1332,8 @@ void SideChain::update_chain_tip(PoolBlock* block)
return; return;
} }
if (is_longer_chain(m_chainTip, block)) { bool is_alternative;
if (is_longer_chain(m_chainTip, block, is_alternative)) {
difficulty_type diff; difficulty_type diff;
if (get_difficulty(block, m_difficultyData, diff)) { if (get_difficulty(block, m_difficultyData, diff)) {
m_chainTip = block; m_chainTip = block;
@ -1343,6 +1346,12 @@ void SideChain::update_chain_tip(PoolBlock* block)
block->m_wantBroadcast = true; block->m_wantBroadcast = true;
if (m_pool) { if (m_pool) {
m_pool->update_block_template_async(); m_pool->update_block_template_async();
// Reset stratum share counters when switching to an alternative chain to avoid confusion
StratumServer* s = m_pool->stratum_server();
if (s && is_alternative) {
s->reset_share_counters();
}
} }
prune_old_blocks(); prune_old_blocks();
} }
@ -1405,8 +1414,10 @@ PoolBlock* SideChain::get_parent(const PoolBlock* block)
return nullptr; return nullptr;
} }
bool SideChain::is_longer_chain(const PoolBlock* block, const PoolBlock* candidate) bool SideChain::is_longer_chain(const PoolBlock* block, const PoolBlock* candidate, bool& is_alternative)
{ {
is_alternative = false;
if (!candidate || !candidate->m_verified || candidate->m_invalid) { if (!candidate || !candidate->m_verified || candidate->m_invalid) {
return false; return false;
} }
@ -1449,6 +1460,8 @@ bool SideChain::is_longer_chain(const PoolBlock* block, const PoolBlock* candida
} }
// They're on totally different chains. Compare total difficulties over the last m_chainWindowSize blocks // They're on totally different chains. Compare total difficulties over the last m_chainWindowSize blocks
is_alternative = true;
difficulty_type block_total_diff; difficulty_type block_total_diff;
difficulty_type candidate_total_diff; difficulty_type candidate_total_diff;

@ -91,7 +91,7 @@ private:
PoolBlock* get_parent(const PoolBlock* block); PoolBlock* get_parent(const PoolBlock* block);
// Checks if "candidate" has longer (higher difficulty) chain than "block" // Checks if "candidate" has longer (higher difficulty) chain than "block"
bool is_longer_chain(const PoolBlock* block, const PoolBlock* candidate); bool is_longer_chain(const PoolBlock* block, const PoolBlock* candidate, bool& is_alternative);
void update_depths(PoolBlock* block); void update_depths(PoolBlock* block);
void prune_old_blocks(); void prune_old_blocks();

@ -439,6 +439,13 @@ void StratumServer::print_status()
print_stratum_status(); print_stratum_status();
} }
void StratumServer::reset_share_counters()
{
m_cumulativeHashesAtLastShare = 0;
m_cumulativeFoundSharesDiff = 0.0;
m_totalFoundShares = 0;
}
void StratumServer::print_stratum_status() const void StratumServer::print_stratum_status() const
{ {
uint64_t hashes_15m, hashes_1h, hashes_24h, total_hashes; uint64_t hashes_15m, hashes_1h, hashes_24h, total_hashes;
@ -473,8 +480,9 @@ void StratumServer::print_stratum_status() const
const uint64_t hashrate_24h = (dt_24h > 0) ? (hashes_24h / dt_24h) : 0; const uint64_t hashrate_24h = (dt_24h > 0) ? (hashes_24h / dt_24h) : 0;
double average_effort = 0.0; double average_effort = 0.0;
if (m_cumulativeFoundSharesDiff > 0.0) { const double diff = m_cumulativeFoundSharesDiff;
average_effort = static_cast<double>(m_cumulativeHashesAtLastShare) * 100.0 / m_cumulativeFoundSharesDiff; if (diff > 0.0) {
average_effort = static_cast<double>(m_cumulativeHashesAtLastShare) * 100.0 / diff;
} }
LOGINFO(0, "status" << LOGINFO(0, "status" <<
@ -1028,8 +1036,9 @@ void StratumServer::api_update_local_stats(time_t timestamp)
const uint64_t hashrate_24h = (dt_24h > 0) ? (hashes_24h / dt_24h) : 0; const uint64_t hashrate_24h = (dt_24h > 0) ? (hashes_24h / dt_24h) : 0;
double average_effort = 0.0; double average_effort = 0.0;
if (m_cumulativeFoundSharesDiff > 0.0) { const double diff = m_cumulativeFoundSharesDiff;
average_effort = static_cast<double>(m_cumulativeHashesAtLastShare) * 100.0 / m_cumulativeFoundSharesDiff; if (diff > 0.0) {
average_effort = static_cast<double>(m_cumulativeHashesAtLastShare) * 100.0 / diff;
} }
int shares_found = m_totalFoundShares; int shares_found = m_totalFoundShares;

@ -75,6 +75,8 @@ public:
void print_status() override; void print_status() override;
void reset_share_counters();
private: private:
void print_stratum_status() const; void print_stratum_status() const;

Loading…
Cancel
Save