@@ -2383,6 +2383,10 @@ void MiningInterface::record_found_block(uint64_t height, const uint256& hash, u
23832383
23842384void MiningInterface::set_block_verify_fn (block_verify_fn_t fn) { m_block_verify_fn = std::move (fn); }
23852385
2386+ void MiningInterface::add_chain_verify_fn (const std::string& chain, block_verify_fn_t fn) {
2387+ m_chain_verify_fns[chain] = std::move (fn);
2388+ }
2389+
23862390void MiningInterface::verify_found_block (size_t index)
23872391{
23882392 std::string hash;
@@ -2395,11 +2399,25 @@ void MiningInterface::verify_found_block(size_t index)
23952399 hash = blk.hash ;
23962400 }
23972401
2398- if (!m_block_verify_fn) return ;
2402+ // Select chain-specific verifier, fall back to default
2403+ std::string chain;
2404+ {
2405+ std::lock_guard<std::mutex> lock (m_blocks_mutex);
2406+ if (index < m_found_blocks.size ())
2407+ chain = m_found_blocks[index].chain ;
2408+ }
2409+ block_verify_fn_t verify_fn;
2410+ auto it = m_chain_verify_fns.find (chain);
2411+ if (it != m_chain_verify_fns.end ())
2412+ verify_fn = it->second ;
2413+ else
2414+ verify_fn = m_block_verify_fn;
2415+
2416+ if (!verify_fn) return ;
23992417
24002418 // Callback returns: >0 confirmed, <0 orphaned, 0 unknown/pending
24012419 int result = 0 ;
2402- try { result = m_block_verify_fn (hash); } catch (...) {}
2420+ try { result = verify_fn (hash); } catch (...) {}
24032421
24042422 std::lock_guard<std::mutex> lock (m_blocks_mutex);
24052423 if (index >= m_found_blocks.size ()) return ;
@@ -2445,9 +2463,26 @@ void MiningInterface::schedule_block_verification(const std::string& block_hash)
24452463 }
24462464 if (idx == SIZE_MAX ) return ;
24472465
2448- // Schedule checks at +10s, +30s, +120s after block submission
2466+ // Schedule checks based on chain's block time:
2467+ // LTC (2.5 min): +30s, +150s (1 block), +300s (2 blocks)
2468+ // DOGE (1 min): +10s, +60s (1 block), +120s (2 blocks)
2469+ // Default: +10s, +60s, +120s
2470+ std::string chain_name;
2471+ {
2472+ std::lock_guard<std::mutex> lock (m_blocks_mutex);
2473+ if (idx < m_found_blocks.size ())
2474+ chain_name = m_found_blocks[idx].chain ;
2475+ }
2476+ std::vector<int > delays;
2477+ if (chain_name == " LTC" || chain_name == " tLTC" )
2478+ delays = {30 , 150 , 300 };
2479+ else if (chain_name == " DOGE" )
2480+ delays = {10 , 60 , 120 };
2481+ else
2482+ delays = {10 , 60 , 120 };
2483+
24492484 auto & ioc = *m_context;
2450- for (int delay : { 10 , 30 , 120 } ) {
2485+ for (int delay : delays ) {
24512486 auto timer = std::make_shared<boost::asio::steady_timer>(
24522487 ioc, std::chrono::seconds (delay));
24532488 timer->async_wait ([this , idx, timer](boost::system::error_code ec) {
0 commit comments