diff --git a/bedrock_client/src/lib.rs b/bedrock_client/src/lib.rs index 534a0cf6..69cde861 100644 --- a/bedrock_client/src/lib.rs +++ b/bedrock_client/src/lib.rs @@ -31,9 +31,9 @@ impl Default for BackoffConfig { } } -// Simple wrapper -// maybe extend in the future for our purposes -// `Clone` is cheap because `CommonHttpClient` is internally reference counted (`Arc`). +/// Simple wrapper +/// maybe extend in the future for our purposes +/// `Clone` is cheap because `CommonHttpClient` is internally reference counted (`Arc`). #[derive(Clone)] pub struct BedrockClient { http_client: CommonHttpClient, @@ -62,10 +62,22 @@ impl BedrockClient { }) } - pub async fn post_transaction(&self, tx: SignedMantleTx) -> Result<(), Error> { - Retry::spawn(self.backoff_strategy(), || { - self.http_client + pub async fn post_transaction(&self, tx: SignedMantleTx) -> Result, Error> { + Retry::spawn(self.backoff_strategy(), || async { + match self + .http_client .post_transaction(self.node_url.clone(), tx.clone()) + .await + { + Ok(_) => Ok(Ok(())), + Err(err) => match err { + // Retry arm. + // Retrying only reqwest errors: mainly connected to http. + Error::Request(_) => Err(err), + // Returning non-retryable error + _ => Ok(Err(err)), + }, + } }) .await } diff --git a/sequencer_core/src/block_settlement_client.rs b/sequencer_core/src/block_settlement_client.rs index 15612835..3e9b4c57 100644 --- a/sequencer_core/src/block_settlement_client.rs +++ b/sequencer_core/src/block_settlement_client.rs @@ -102,7 +102,8 @@ impl BlockSettlementClientTrait for BlockSettlementClient { self.bedrock_client .post_transaction(tx) .await - .context("Failed to post transaction to Bedrock")?; + .context("Failed to post transaction to Bedrock after retries")? + .context("Failed to post transaction to Bedrock with non-retryable error")?; log::debug!("Posted block to Bedrock with parent id {parent_id:?} and msg id: {msg_id:?}");