diff --git a/processor/ethereum/src/publisher.rs b/processor/ethereum/src/publisher.rs index cc9c1f5f..d133768b 100644 --- a/processor/ethereum/src/publisher.rs +++ b/processor/ethereum/src/publisher.rs @@ -26,7 +26,9 @@ impl TransactionPublisher { } // This will always return Ok(Some(_)) or Err(_), never Ok(None) - async fn router(&self) -> Result>, RpcError> { + async fn router( + &self, + ) -> Result>, RpcError> { let router = self.router.read().await; // If the router is None, find it on-chain @@ -35,9 +37,14 @@ impl TransactionPublisher { let mut router = self.router.write().await; // Check again if it's None in case a different task already did this if router.is_none() { - let Some(router_actual) = Router::new(self.rpc.clone(), &self.initial_serai_key).await? else { - Err(TransportErrorKind::Custom("publishing transaction yet couldn't find router on chain. was our node reset?".to_string().into()))? - }; + let Some(router_actual) = Router::new(self.rpc.clone(), &self.initial_serai_key).await? + else { + Err(TransportErrorKind::Custom( + "publishing transaction yet couldn't find router on chain. was our node reset?" + .to_string() + .into(), + ))? + }; *router = Some(router_actual); } return Ok(router.downgrade()); @@ -60,7 +67,9 @@ impl signers::TransactionPublisher for TransactionPublisher { let router = router.as_ref().unwrap(); let tx = match tx.0 { Action::SetKey { chain_id: _, nonce: _, key } => router.update_serai_key(&key, &tx.1), - Action::Batch { chain_id: _, nonce: _, outs } => router.execute(OutInstructions::from(outs.as_ref()), &tx.1), + Action::Batch { chain_id: _, nonce: _, outs } => { + router.execute(OutInstructions::from(outs.as_ref()), &tx.1) + } }; /* diff --git a/processor/ethereum/src/rpc.rs b/processor/ethereum/src/rpc.rs index 819fbf48..e3f25f86 100644 --- a/processor/ethereum/src/rpc.rs +++ b/processor/ethereum/src/rpc.rs @@ -2,6 +2,7 @@ use core::future::Future; use std::sync::Arc; use alloy_rpc_types_eth::{BlockTransactionsKind, BlockNumberOrTag}; +use alloy_transport::{RpcError, TransportErrorKind}; use alloy_simple_request_transport::SimpleRequest; use alloy_provider::{Provider, RootProvider}; @@ -28,7 +29,7 @@ impl ScannerFeed for Rpc { type Block = FullEpoch; - type EphemeralError = String; + type EphemeralError = RpcError; fn latest_finalized_block_number( &self, @@ -37,14 +38,17 @@ impl ScannerFeed for Rpc { let actual_number = self .provider .get_block(BlockNumberOrTag::Finalized.into(), BlockTransactionsKind::Hashes) - .await - .map_err(|e| format!("couldn't get the latest finalized block: {e:?}"))? - .ok_or_else(|| "there was no finalized block".to_string())? + .await? + .ok_or_else(|| { + TransportErrorKind::Custom("there was no finalized block".to_string().into()) + })? .header .number; // Error if there hasn't been a full epoch yet if actual_number < 32 { - Err("there has not been a completed epoch yet".to_string())? + Err(TransportErrorKind::Custom( + "there has not been a completed epoch yet".to_string().into(), + ))? } // The divison by 32 returns the amount of completed epochs // Converting from amount of completed epochs to the latest completed epoch requires @@ -75,10 +79,12 @@ impl ScannerFeed for Rpc { self .provider .get_block((start - 1).into(), BlockTransactionsKind::Hashes) - .await - .map_err(|e| format!("couldn't get block: {e:?}"))? + .await? .ok_or_else(|| { - format!("ethereum node didn't have requested block: {number:?}. did we reorg?") + TransportErrorKind::Custom( + format!("ethereum node didn't have requested block: {number:?}. was the node reset?") + .into(), + ) })? .header .hash @@ -88,10 +94,12 @@ impl ScannerFeed for Rpc { let end_header = self .provider .get_block((start + 31).into(), BlockTransactionsKind::Hashes) - .await - .map_err(|e| format!("couldn't get block: {e:?}"))? + .await? .ok_or_else(|| { - format!("ethereum node didn't have requested block: {number:?}. did we reorg?") + TransportErrorKind::Custom( + format!("ethereum node didn't have requested block: {number:?}. was the node reset?") + .into(), + ) })? .header;