Skip to content

Commit e09ffa3

Browse files
authored
Merge pull request #703 from frstrtr/btc/nmc-worksource-seam-pr2a
btc(nmc PR-2a): wire BTCWorkSource.has_merged_chain to MergedMiningManager
2 parents e46dec8 + bc05e2a commit e09ffa3

4 files changed

Lines changed: 32 additions & 3 deletions

File tree

src/c2pool/merged/merged_mining.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,16 @@ IAuxChainBackend* MergedMiningManager::get_chain_rpc(uint32_t chain_id)
574574
return nullptr;
575575
}
576576

577+
bool MergedMiningManager::has_chain(uint32_t chain_id) const
578+
{
579+
std::lock_guard<std::recursive_mutex> lock(m_mutex);
580+
for (const auto& chain : m_chains) {
581+
if (chain.config.chain_id == chain_id)
582+
return true;
583+
}
584+
return false;
585+
}
586+
577587
void MergedMiningManager::start()
578588
{
579589
if (m_running) return;

src/c2pool/merged/merged_mining.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,11 @@ class MergedMiningManager
242242
// Number of registered chains
243243
size_t chain_count() const { return m_chains.size(); }
244244

245+
// True if a chain with this chain_id is registered (embedded OR rpc).
246+
// NOTE: distinct from get_chain_rpc(), which returns only the RPC
247+
// fallback backend (null for embedded-primary chains with no fallback).
248+
bool has_chain(uint32_t chain_id) const;
249+
245250
// Get RPC client for a chain (for wiring broadcaster getpeerinfo)
246251
IAuxChainBackend* get_chain_rpc(uint32_t chain_id);
247252

src/impl/btc/stratum/work_source.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <impl/btc/coin/mempool.hpp>
2020
#include <impl/btc/coin/template_builder.hpp> // build_template + merkle_hash_pair
2121
#include <impl/btc/coin/transaction.hpp>
22+
#include <c2pool/merged/merged_mining.hpp> // MergedMiningManager::has_chain (PR-2a)
2223

2324
#include <core/address_utils.hpp> // address_to_script (for share write path)
2425
#include <core/hash.hpp>
@@ -170,10 +171,11 @@ uint64_t BTCWorkSource::get_work_generation() const
170171
return work_generation_.load(std::memory_order_relaxed);
171172
}
172173

173-
bool BTCWorkSource::has_merged_chain(uint32_t /*chain_id*/) const
174+
bool BTCWorkSource::has_merged_chain(uint32_t chain_id) const
174175
{
175-
// BTC MVP: no merged mining (the LTC MM rig is DOGE — none for BTC currently).
176-
return false;
176+
// Wired in PR-2a: consult the merged-mining manager if main_btc set one
177+
// (--merged NMC:...). No manager or unknown chain_id => false.
178+
return mm_manager_ != nullptr && mm_manager_->has_chain(chain_id);
177179
}
178180

179181
// ─────────────────────────────────────────────────────────────────────────────

src/impl/btc/stratum/work_source.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class Mempool;
5252
namespace rpc { struct WorkData; }
5353
} // namespace btc::coin
5454

55+
// Merged-mining manager (embedded NMC etc.) — heavy header lives in the .cpp.
56+
namespace c2pool { namespace merged { class MergedMiningManager; } }
57+
5558
namespace btc::stratum {
5659

5760
class BTCWorkSource : public core::stratum::IWorkSource
@@ -227,6 +230,11 @@ class BTCWorkSource : public core::stratum::IWorkSource
227230
/// a stratum proxy without sharechain participation.
228231
void set_create_share_fn(CreateShareFn fn);
229232

233+
/// Wire the merged-mining manager (embedded NMC etc.). Called once at
234+
/// startup from main_btc.cpp when --merged is passed. null => no
235+
/// merged chains, has_merged_chain() returns false.
236+
void set_merged_mining_manager(c2pool::merged::MergedMiningManager* mm) { mm_manager_ = mm; }
237+
230238
/// Set the donation script (bytes of the c2pool donation
231239
/// scriptPubKey — typically a P2PKH or P2WPKH for the c2pool donation
232240
/// address). Used by build_connection_coinbase as the residual
@@ -268,6 +276,10 @@ class BTCWorkSource : public core::stratum::IWorkSource
268276
CreateShareFn create_share_fn_;
269277
std::vector<unsigned char> donation_script_;
270278

279+
// Merged-mining manager (embedded NMC etc.); non-owning, set by
280+
// main_btc.cpp. null => no merged chains configured.
281+
c2pool::merged::MergedMiningManager* mm_manager_ = nullptr;
282+
271283
// Template cache (filled lazily; invalidated when work_generation_ bumps)
272284
// Stage 4c populates these.
273285
mutable std::mutex template_mutex_;

0 commit comments

Comments
 (0)