From 89e629d53bc93d8d27e5eb4e8aaca109c9a253ab Mon Sep 17 00:00:00 2001 From: Gabriele Vernetti Date: Wed, 14 Feb 2024 20:25:34 +0100 Subject: [PATCH 1/6] handle_request_tx_data_error management in jdc --- protocols/v2/roles-logic-sv2/src/errors.rs | 4 +++- .../src/lib/template_receiver/message_handler.rs | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/protocols/v2/roles-logic-sv2/src/errors.rs b/protocols/v2/roles-logic-sv2/src/errors.rs index dc528ade4f..4721da55ef 100644 --- a/protocols/v2/roles-logic-sv2/src/errors.rs +++ b/protocols/v2/roles-logic-sv2/src/errors.rs @@ -50,6 +50,7 @@ pub enum Error { NoValidJob, NoValidTranslatorJob, NoTemplateForId, + NoValidTemplate, InvalidExtranonceSize(u16, u16), PoisonLock(String), InvalidBip34Bytes(Vec), @@ -140,7 +141,8 @@ impl Display for Error { NotFoundChannelId => write!(f, "No downstream has been registred for this channel id"), NoValidJob => write!(f, "Impossible to create a standard job for channelA cause no valid job has been received from upstream yet"), NoValidTranslatorJob => write!(f, "Impossible to create a extended job for channel cause no valid job has been received from upstream yet"), - NoTemplateForId => write!(f, "Impossible a template for the required job id"), + NoTemplateForId => write!(f, "Impossible to retrieve a template for the required job id"), + NoValidTemplate => write!(f, "Impossible to retrieve a template for the required template id"), PoisonLock(e) => write!(f, "Poison lock: {}", e), InvalidBip34Bytes(e) => write!(f, "Invalid Bip34 bytes {:?}", e), JobNotUpdated(ds_job_id, us_job_id) => write!(f, "Channel Factory did not update job: Downstream job id = {}, Upstream job id = {}", ds_job_id, us_job_id), diff --git a/roles/jd-client/src/lib/template_receiver/message_handler.rs b/roles/jd-client/src/lib/template_receiver/message_handler.rs index e9231f4470..a8743fe710 100644 --- a/roles/jd-client/src/lib/template_receiver/message_handler.rs +++ b/roles/jd-client/src/lib/template_receiver/message_handler.rs @@ -43,6 +43,13 @@ impl ParseServerTemplateDistributionMessages for TemplateRx { &mut self, _m: RequestTransactionDataError, ) -> Result { - todo!() + let error_code = + std::str::from_utf8(_m.error_code.as_ref()).unwrap_or("unknown error code"); + match error_code { + "template-id-not-found" => Err(Error::NoValidTemplate), + "stale-template-id" => Ok(SendTo::None(None)), + _ => Err(Error::NoValidTemplate), + } } + } From 7d8324b8799c0414824f1afc13c894c34198943e Mon Sep 17 00:00:00 2001 From: Gabriele Vernetti Date: Wed, 14 Feb 2024 20:49:14 +0100 Subject: [PATCH 2/6] fmt fix --- roles/jd-client/src/lib/template_receiver/message_handler.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/jd-client/src/lib/template_receiver/message_handler.rs b/roles/jd-client/src/lib/template_receiver/message_handler.rs index a8743fe710..90d25d861d 100644 --- a/roles/jd-client/src/lib/template_receiver/message_handler.rs +++ b/roles/jd-client/src/lib/template_receiver/message_handler.rs @@ -51,5 +51,4 @@ impl ParseServerTemplateDistributionMessages for TemplateRx { _ => Err(Error::NoValidTemplate), } } - } From cdf2f0e799fd2c5cc67f81aa4456ba65559d10ec Mon Sep 17 00:00:00 2001 From: Gabriele Vernetti Date: Thu, 15 Feb 2024 17:47:37 +0100 Subject: [PATCH 3/6] stale-template-id management --- .../src/lib/template_receiver/message_handler.rs | 11 +++++++---- roles/jd-client/src/lib/template_receiver/mod.rs | 5 ++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/roles/jd-client/src/lib/template_receiver/message_handler.rs b/roles/jd-client/src/lib/template_receiver/message_handler.rs index 90d25d861d..751f0fd9e2 100644 --- a/roles/jd-client/src/lib/template_receiver/message_handler.rs +++ b/roles/jd-client/src/lib/template_receiver/message_handler.rs @@ -43,11 +43,14 @@ impl ParseServerTemplateDistributionMessages for TemplateRx { &mut self, _m: RequestTransactionDataError, ) -> Result { - let error_code = - std::str::from_utf8(_m.error_code.as_ref()).unwrap_or("unknown error code"); - match error_code { + let m = RequestTransactionDataError { + template_id: _m.template_id, + error_code: _m.error_code.into_static(), + }; + + match std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown error code") { "template-id-not-found" => Err(Error::NoValidTemplate), - "stale-template-id" => Ok(SendTo::None(None)), + "stale-template-id" => Ok(SendTo::None(Some(TemplateDistribution::RequestTransactionDataError(m)))), _ => Err(Error::NoValidTemplate), } } diff --git a/roles/jd-client/src/lib/template_receiver/mod.rs b/roles/jd-client/src/lib/template_receiver/mod.rs index 43275fda85..aad2f1ac37 100644 --- a/roles/jd-client/src/lib/template_receiver/mod.rs +++ b/roles/jd-client/src/lib/template_receiver/mod.rs @@ -17,7 +17,7 @@ use setup_connection::SetupConnectionHandler; use std::{convert::TryInto, net::SocketAddr, sync::Arc}; use stratum_common::bitcoin::{consensus::Encodable, TxOut}; use tokio::task::AbortHandle; -use tracing::{error, info}; +use tracing::{error, info, warn}; mod message_handler; mod setup_connection; @@ -264,6 +264,9 @@ impl TemplateRx { .await; } } + Some(TemplateDistribution::RequestTransactionDataError(_)) => { + warn!("The prev_hash of the template requested to Template Provider no longer points to the latest tip. Continuing work on the updated template.") + } _ => { error!("{:?}", frame); error!("{:?}", frame.payload()); From 9f741b9aca57c9bc7fc4a1cc83eceb1d3019b14c Mon Sep 17 00:00:00 2001 From: Gabriele Vernetti Date: Thu, 15 Feb 2024 17:51:18 +0100 Subject: [PATCH 4/6] fmt fix --- roles/jd-client/src/lib/template_receiver/message_handler.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/roles/jd-client/src/lib/template_receiver/message_handler.rs b/roles/jd-client/src/lib/template_receiver/message_handler.rs index 751f0fd9e2..d2223e9e61 100644 --- a/roles/jd-client/src/lib/template_receiver/message_handler.rs +++ b/roles/jd-client/src/lib/template_receiver/message_handler.rs @@ -50,7 +50,9 @@ impl ParseServerTemplateDistributionMessages for TemplateRx { match std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown error code") { "template-id-not-found" => Err(Error::NoValidTemplate), - "stale-template-id" => Ok(SendTo::None(Some(TemplateDistribution::RequestTransactionDataError(m)))), + "stale-template-id" => Ok(SendTo::None(Some( + TemplateDistribution::RequestTransactionDataError(m), + ))), _ => Err(Error::NoValidTemplate), } } From 47b929ac4a00e77109eb82d96c082fbd020b54f7 Mon Sep 17 00:00:00 2001 From: Gabriele Vernetti Date: Thu, 15 Feb 2024 19:16:15 +0100 Subject: [PATCH 5/6] string printed in NoValidTemplate error type --- protocols/v2/roles-logic-sv2/src/errors.rs | 4 ++-- .../src/lib/template_receiver/message_handler.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/protocols/v2/roles-logic-sv2/src/errors.rs b/protocols/v2/roles-logic-sv2/src/errors.rs index 4721da55ef..1d8625124b 100644 --- a/protocols/v2/roles-logic-sv2/src/errors.rs +++ b/protocols/v2/roles-logic-sv2/src/errors.rs @@ -50,7 +50,7 @@ pub enum Error { NoValidJob, NoValidTranslatorJob, NoTemplateForId, - NoValidTemplate, + NoValidTemplate(String), InvalidExtranonceSize(u16, u16), PoisonLock(String), InvalidBip34Bytes(Vec), @@ -142,7 +142,7 @@ impl Display for Error { NoValidJob => write!(f, "Impossible to create a standard job for channelA cause no valid job has been received from upstream yet"), NoValidTranslatorJob => write!(f, "Impossible to create a extended job for channel cause no valid job has been received from upstream yet"), NoTemplateForId => write!(f, "Impossible to retrieve a template for the required job id"), - NoValidTemplate => write!(f, "Impossible to retrieve a template for the required template id"), + NoValidTemplate(e) => write!(f, "Impossible to retrieve a template for the required template id: {}", e), PoisonLock(e) => write!(f, "Poison lock: {}", e), InvalidBip34Bytes(e) => write!(f, "Invalid Bip34 bytes {:?}", e), JobNotUpdated(ds_job_id, us_job_id) => write!(f, "Channel Factory did not update job: Downstream job id = {}, Upstream job id = {}", ds_job_id, us_job_id), diff --git a/roles/jd-client/src/lib/template_receiver/message_handler.rs b/roles/jd-client/src/lib/template_receiver/message_handler.rs index d2223e9e61..429e83684c 100644 --- a/roles/jd-client/src/lib/template_receiver/message_handler.rs +++ b/roles/jd-client/src/lib/template_receiver/message_handler.rs @@ -47,13 +47,13 @@ impl ParseServerTemplateDistributionMessages for TemplateRx { template_id: _m.template_id, error_code: _m.error_code.into_static(), }; - - match std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown error code") { - "template-id-not-found" => Err(Error::NoValidTemplate), + let error_code_string = std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown error code"); + match error_code_string { + "template-id-not-found" => Err(Error::NoValidTemplate(error_code_string.to_string())), "stale-template-id" => Ok(SendTo::None(Some( TemplateDistribution::RequestTransactionDataError(m), ))), - _ => Err(Error::NoValidTemplate), + _ => Err(Error::NoValidTemplate(error_code_string.to_string())), } } } From e364d9fe1667e78f3272283ce36aaf8a4a7d6141 Mon Sep 17 00:00:00 2001 From: Gabriele Vernetti Date: Thu, 15 Feb 2024 19:17:52 +0100 Subject: [PATCH 6/6] fmt --- roles/jd-client/src/lib/template_receiver/message_handler.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/jd-client/src/lib/template_receiver/message_handler.rs b/roles/jd-client/src/lib/template_receiver/message_handler.rs index 429e83684c..61311f850f 100644 --- a/roles/jd-client/src/lib/template_receiver/message_handler.rs +++ b/roles/jd-client/src/lib/template_receiver/message_handler.rs @@ -47,7 +47,8 @@ impl ParseServerTemplateDistributionMessages for TemplateRx { template_id: _m.template_id, error_code: _m.error_code.into_static(), }; - let error_code_string = std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown error code"); + let error_code_string = + std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown error code"); match error_code_string { "template-id-not-found" => Err(Error::NoValidTemplate(error_code_string.to_string())), "stale-template-id" => Ok(SendTo::None(Some(