diff --git a/benches/Cargo.lock b/benches/Cargo.lock index 946b7c02b..396474838 100644 --- a/benches/Cargo.lock +++ b/benches/Cargo.lock @@ -373,7 +373,7 @@ dependencies = [ [[package]] name = "buffer_sv2" -version = "1.0.0" +version = "1.1.0" dependencies = [ "aes-gcm", ] @@ -497,7 +497,7 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "codec_sv2" -version = "1.1.0" +version = "1.2.0" dependencies = [ "binary_sv2", "buffer_sv2", @@ -1564,7 +1564,7 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "sv1_api" -version = "1.0.0" +version = "1.0.1" dependencies = [ "binary_sv2", "bitcoin_hashes 0.3.2", diff --git a/roles/jd-client/src/lib/downstream.rs b/roles/jd-client/src/lib/downstream.rs index 5b26cef2f..92e5a874a 100644 --- a/roles/jd-client/src/lib/downstream.rs +++ b/roles/jd-client/src/lib/downstream.rs @@ -47,7 +47,7 @@ pub struct DownstreamMiningNode { miner_coinbase_output: Vec, // used to retreive the job id of the share that we send upstream last_template_id: u64, - jd: Option>>, + pub jd: Option>>, } #[allow(clippy::large_enum_variant)] @@ -376,12 +376,13 @@ impl DownstreamMiningNode { let to_send = to_send.into_values(); for message in to_send { let message = if let Mining::NewExtendedMiningJob(job) = message { - let jd = self_mutex.safe_lock(|s| s.jd.clone()).unwrap().unwrap(); - jd.safe_lock(|jd| jd.coinbase_tx_prefix = job.coinbase_tx_prefix.clone()) - .unwrap(); - jd.safe_lock(|jd| jd.coinbase_tx_suffix = job.coinbase_tx_suffix.clone()) + if let Some(jd) = self_mutex.safe_lock(|s| s.jd.clone()).unwrap() { + jd.safe_lock(|jd| { + jd.coinbase_tx_prefix = job.coinbase_tx_prefix.clone(); + jd.coinbase_tx_suffix = job.coinbase_tx_suffix.clone(); + }) .unwrap(); - + } Mining::NewExtendedMiningJob(job) } else { message @@ -514,7 +515,7 @@ impl fn handle_update_channel( &mut self, - _: UpdateChannel, + m: UpdateChannel, ) -> Result, Error> { if !self.status.is_solo_miner() { // Safe unwrap alreay checked if it cointains upstream with is_solo_miner @@ -522,7 +523,16 @@ impl self.status.get_upstream().unwrap(), )) } else { - todo!() + let maximum_target = + roles_logic_sv2::utils::hash_rate_to_target(m.nominal_hash_rate.into(), 10.0)?; + self.status + .get_channel() + .update_target_for_channel(m.channel_id, maximum_target.clone().into()); + let set_target = SetTarget { + channel_id: m.channel_id, + maximum_target, + }; + Ok(SendTo::Respond(Mining::SetTarget(set_target))) } } diff --git a/roles/jd-client/src/lib/template_receiver/mod.rs b/roles/jd-client/src/lib/template_receiver/mod.rs index f418318a8..cfc1eec0a 100644 --- a/roles/jd-client/src/lib/template_receiver/mod.rs +++ b/roles/jd-client/src/lib/template_receiver/mod.rs @@ -57,9 +57,16 @@ impl TemplateRx { test_only_do_not_send_solution_to_tp: bool, ) { let mut encoded_outputs = vec![]; - miner_coinbase_outputs - .consensus_encode(&mut encoded_outputs) - .expect("Invalid coinbase output in config"); + // jd is set to None in initialize_jd_as_solo_miner (in this case we need to take the first output as done by JDS) + if jd.is_none() { + miner_coinbase_outputs[0] + .consensus_encode(&mut encoded_outputs) + .expect("Invalid coinbase output in config"); + } else { + miner_coinbase_outputs + .consensus_encode(&mut encoded_outputs) + .expect("Invalid coinbase output in config"); + } let stream = tokio::net::TcpStream::connect(address).await.unwrap(); let initiator = match authority_public_key {