From ce840733f1e79e569c9926968528544717f330f7 Mon Sep 17 00:00:00 2001 From: SChernykh <15806605+SChernykh@users.noreply.github.com> Date: Fri, 6 Jun 2025 11:49:24 +0200 Subject: [PATCH] Merge mining: get a new block template immediately after submitting a block. --- src/merge_mining_client_json_rpc.cpp | 8 +++----- src/merge_mining_client_json_rpc.h | 2 +- src/merge_mining_client_tari.cpp | 4 ++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/merge_mining_client_json_rpc.cpp b/src/merge_mining_client_json_rpc.cpp index ea5eead..84817af 100644 --- a/src/merge_mining_client_json_rpc.cpp +++ b/src/merge_mining_client_json_rpc.cpp @@ -322,6 +322,8 @@ void MergeMiningClientJSON_RPC::submit_solution(const std::vector& /*co if (size > 0) { LOGERR(3, "couldn't submit merge mining solution to " << m_host << ':' << m_port << ", error " << log::const_buf(data, size)); } + // Get new mining job + on_timer(); }, &m_loop); } @@ -369,7 +371,7 @@ bool MergeMiningClientJSON_RPC::get_params(ChainParameters& out_params) const return true; } -bool MergeMiningClientJSON_RPC::parse_merge_mining_submit_solution(const char* data, size_t size) +bool MergeMiningClientJSON_RPC::parse_merge_mining_submit_solution(const char* data, size_t size) const { auto err = [this](const char* msg) { LOGWARN(3, "merge_mining_submit_solution to " << m_host << ':' << m_port << " failed: " << msg); @@ -418,10 +420,6 @@ bool MergeMiningClientJSON_RPC::parse_merge_mining_submit_solution(const char* d } LOGINFO(0, log::LightGreen() << "merge_mining_submit_solution to " << m_host << ':' << m_port << ": " << status); - - // Get new mining job - on_timer(); - return true; } diff --git a/src/merge_mining_client_json_rpc.h b/src/merge_mining_client_json_rpc.h index d92c43a..2f37208 100644 --- a/src/merge_mining_client_json_rpc.h +++ b/src/merge_mining_client_json_rpc.h @@ -49,7 +49,7 @@ private: void merge_mining_get_aux_block(uint64_t height, const hash& prev_id, const std::string& wallet); bool parse_merge_mining_get_aux_block(const char* data, size_t size, bool& changed); - bool parse_merge_mining_submit_solution(const char* data, size_t size); + bool parse_merge_mining_submit_solution(const char* data, size_t size) const; std::string m_host; uint32_t m_port; diff --git a/src/merge_mining_client_tari.cpp b/src/merge_mining_client_tari.cpp index 0c68fe1..01feb5f 100644 --- a/src/merge_mining_client_tari.cpp +++ b/src/merge_mining_client_tari.cpp @@ -472,6 +472,10 @@ void MergeMiningClientTari::submit_solution(const std::vector& coinbase const std::string& h = response.block_hash(); LOGINFO(0, log::LightGreen() << "Mined Tari block " << log::hex_buf(h.data(), h.size()) << " at height " << block.header().height()); } + + // We've just submitted a new block. Signal the polling thread to stop waiting and get a new block template. + MutexLock lock(client->m_workerLock); + uv_cond_signal(&client->m_workerCond); } } *work = new Work(this, std::move(block));