From 7572a589d1574de115332b5b1bed90771151691c Mon Sep 17 00:00:00 2001 From: NPC Date: Wed, 6 May 2026 00:58:36 +0700 Subject: [PATCH 1/2] Reject when downstream make non standard job requests with require_std_job flag --- .../downstream_message_handler.rs | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs b/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs index e0aabb404..3d3198df0 100644 --- a/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs +++ b/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs @@ -531,11 +531,19 @@ impl HandleMiningMessagesFromClientAsync for ChannelManager { }; downstream.downstream_data.super_safe_lock(|data| { - let mut messages: Vec = vec![]; - let extended_channel_id = - data.channel_id_factory.fetch_add(1, Ordering::Relaxed); + if data.require_std_job { + return Ok(vec![( + downstream_id, + build_error("only-accept-standard-job"), + ) + .into()]) + } - let extranonce_prefix = match channel_manager_data + let mut messages: Vec = vec![]; + let extended_channel_id = + data.channel_id_factory.fetch_add(1, Ordering::Relaxed); + + let extranonce_prefix = match channel_manager_data .extranonce_allocator .allocate_extended(requested_min_rollable_extranonce_size.into()) { @@ -808,6 +816,10 @@ impl HandleMiningMessagesFromClientAsync for ChannelManager { } else if let Some(extended_channel) = data.extended_channels.get_mut(&channel_id) { + if data.require_std_job { + return vec![(downstream_id, build_error("invalid-channel-id")).into()]; + } + let update_channel = extended_channel.update_channel( new_nominal_hash_rate, Some(requested_maximum_target), @@ -1197,6 +1209,10 @@ impl HandleMiningMessagesFromClientAsync for ChannelManager { return Err(JDCError::disconnect(JDCErrorKind::LastNewPrevhashNotFound, downstream_id)); }; downstream.downstream_data.super_safe_lock(|data| { + if data.require_std_job { + return Ok(vec![(downstream_id, build_error("invalid-channel-id")).into()]); + } + let mut messages: Vec = vec![]; let Some(extended_channel) = data.extended_channels.get_mut(&channel_id) else { From a61f5bc79ce8c928f682a9fa3f82b1aca2cfece1 Mon Sep 17 00:00:00 2001 From: NPC Date: Tue, 12 May 2026 23:14:30 +0700 Subject: [PATCH 2/2] Update incorrect messages in handle_update_channel --- .../src/lib/channel_manager/downstream_message_handler.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs b/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs index 3d3198df0..dc9f9feb5 100644 --- a/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs +++ b/miner-apps/jd-client/src/lib/channel_manager/downstream_message_handler.rs @@ -797,7 +797,7 @@ impl HandleMiningMessagesFromClientAsync for ChannelManager { _ => "internal-error", }; if err_code == "internal-error" { - warn!("Failed to update extended channel {channel_id}"); + warn!("Failed to update standard channel {channel_id}"); } else { return vec![(downstream_id, build_error(err_code)).into()]; } @@ -827,7 +827,7 @@ impl HandleMiningMessagesFromClientAsync for ChannelManager { let new_target = extended_channel.get_target(); if let Err(e) = update_channel { - error!(channel_id, ?e, "StandardChannel update failed"); + error!(channel_id, ?e, "ExtendedChannel update failed"); let err_code = match e { ExtendedChannelError::InvalidNominalHashrate => { "invalid-nominal-hashrate"