From 340a3e85c864aa9f176910bdbe75fb29fe0c2ba5 Mon Sep 17 00:00:00 2001 From: SChernykh Date: Tue, 5 Jul 2022 10:02:18 +0200 Subject: [PATCH] Fixed autodiff when running for a long time 16-bit wrap around wasn't processed correctly --- src/stratum_server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stratum_server.cpp b/src/stratum_server.cpp index 93b691b..971a906 100644 --- a/src/stratum_server.cpp +++ b/src/stratum_server.cpp @@ -614,14 +614,14 @@ void StratumServer::update_auto_diff(StratumClient* client, const uint64_t times if (k >= N) { // Full window - const uint64_t dt = t2 - t1; + const uint16_t dt = t2 - t1; client->m_autoDiff.lo = std::max((client->m_autoDiffWindowHashes * AUTO_DIFF_TARGET_TIME) / (dt ? dt : 1), MIN_DIFF); client->m_autoDiff.hi = 0; } else if (k >= 10) { // Partial window const uint64_t h0 = hash_uncompress(client->m_autoDiffData[0].m_hashes); - const uint64_t dt = client->m_autoDiffData[k].m_timestamp - client->m_autoDiffData[0].m_timestamp; + const uint16_t dt = client->m_autoDiffData[k].m_timestamp - client->m_autoDiffData[0].m_timestamp; client->m_autoDiff.lo = std::max(((client->m_autoDiffWindowHashes - h0) * AUTO_DIFF_TARGET_TIME) / (dt ? dt : 1), MIN_DIFF); client->m_autoDiff.hi = 0;