From d681cd89d148202676357b8dcf7ac7c45841d239 Mon Sep 17 00:00:00 2001 From: mertwole Date: Tue, 20 Aug 2024 06:54:21 +0000 Subject: [PATCH] Refactor and clarify errors in ethereum client --- ethereum/client/src/error.rs | 21 +++++++++--------- ethereum/client/src/lib.rs | 42 ++++++++++++++---------------------- ethereum/client/src/tests.rs | 15 +++---------- 3 files changed, 30 insertions(+), 48 deletions(-) diff --git a/ethereum/client/src/error.rs b/ethereum/client/src/error.rs index 6d658566..10ae2271 100644 --- a/ethereum/client/src/error.rs +++ b/ethereum/client/src/error.rs @@ -1,11 +1,10 @@ +use alloy::transports::{RpcError, TransportErrorKind}; use thiserror::Error; #[derive(Debug, Error)] pub enum Error { - #[error("Not implemented")] - NotImplemented, - #[error("Error in HTTP transport")] - ErrorInHTTPTransport, + #[error("Error in HTTP transport: {0}")] + ErrorInHTTPTransport(RpcError), #[error("Wrong address")] WrongAddress, #[error("Wrong node URL")] @@ -16,6 +15,8 @@ pub enum Error { ErrorDuringContractExecution(alloy::contract::Error), #[error("Error sending transaction: {0}")] ErrorSendingTransaction(alloy::contract::Error), + #[error("Error querying event: {0}")] + ErrorQueryingEvent(alloy::contract::Error), #[error("Error waiting transaction receipt")] ErrorWaitingTransactionReceipt, #[error("Error fetching transaction")] @@ -24,10 +25,10 @@ pub enum Error { ErrorFetchingTransactionReceipt, #[error("Error fetching block")] ErrorFetchingBlock, - #[error("Wrong path to file")] - WrongPathToFile, - #[error("Wrong JSON format")] - WrongJsonFormation, - #[error("Cannot convert to U256")] - UnableToConvertToU256, +} + +impl From> for Error { + fn from(value: RpcError) -> Self { + Self::ErrorInHTTPTransport(value) + } } diff --git a/ethereum/client/src/lib.rs b/ethereum/client/src/lib.rs index 6540db59..81f37f25 100644 --- a/ethereum/client/src/lib.rs +++ b/ethereum/client/src/lib.rs @@ -212,14 +212,9 @@ where } pub async fn get_approx_balance(&self, address: Address) -> Result { - let balance = self.provider.get_balance(address).latest().await; - - if let Ok(balance) = balance { - let balance: f64 = balance.into(); - Ok(balance / 1_000_000_000_000_000_000.0) - } else { - Err(Error::ErrorInHTTPTransport) - } + let balance = self.provider.get_balance(address).latest().await?; + let balance: f64 = balance.into(); + Ok(balance / 1_000_000_000_000_000_000.0) } pub async fn provide_merkle_root( @@ -254,18 +249,11 @@ where } pub async fn block_number(&self) -> Result { - self.provider - .get_block_number() - .await - .map_err(|_| Error::ErrorInHTTPTransport) + self.provider.get_block_number().await.map_err(|e| e.into()) } pub async fn fetch_merkle_roots(&self, depth: u64) -> Result, Error> { - let current_block: u64 = self - .provider - .get_block_number() - .await - .map_err(|_| Error::ErrorInHTTPTransport)?; + let current_block: u64 = self.provider.get_block_number().await?; self.fetch_merkle_roots_in_range( current_block.checked_sub(depth).unwrap_or_default(), @@ -287,15 +275,17 @@ where let event: Event = Event::new(self.provider.clone(), filter); - match event.query().await { - Ok(logs) => Ok(logs - .iter() - .map(|(event, _)| MerkleRootEntry { - block_number: event.blockNumber.to(), - }) - .collect()), - Err(_) => Err(Error::ErrorInHTTPTransport), - } + let logs = event + .query() + .await + .map_err(|e| Error::ErrorQueryingEvent(e))?; + + Ok(logs + .iter() + .map(|(event, _)| MerkleRootEntry { + block_number: event.blockNumber.to(), + }) + .collect()) } #[allow(clippy::too_many_arguments)] diff --git a/ethereum/client/src/tests.rs b/ethereum/client/src/tests.rs index 2b951589..ff0069ad 100644 --- a/ethereum/client/src/tests.rs +++ b/ethereum/client/src/tests.rs @@ -137,10 +137,7 @@ where erc20_treasury_proxy: *erc20_treasury_proxy.address(), }; - let nonce = provider - .get_transaction_count(signer_address) - .await - .map_err(|_| Error::ErrorInHTTPTransport)?; + let nonce = provider.get_transaction_count(signer_address).await?; let relayer_proxy = ProxyContract::new(deployment.relayer_proxy, provider.clone()); @@ -158,10 +155,7 @@ where .await .map_err(|_| Error::ErrorWaitingTransactionReceipt)?; - let nonce = provider - .get_transaction_count(signer_address) - .await - .map_err(|_| Error::ErrorInHTTPTransport)?; + let nonce = provider.get_transaction_count(signer_address).await?; let pending_tx = message_queue_proxy .upgradeToAndCall(deployment.message_queue, Bytes::new()) @@ -177,10 +171,7 @@ where .await .map_err(|_| Error::ErrorWaitingTransactionReceipt)?; - let nonce = provider - .get_transaction_count(signer_address) - .await - .map_err(|_| Error::ErrorInHTTPTransport)?; + let nonce = provider.get_transaction_count(signer_address).await?; let pending_tx = erc20_treasury_proxy .upgradeToAndCall(deployment.erc20_treasury, Bytes::new())