diff --git a/common/src/error.rs b/common/src/error.rs new file mode 100644 index 0000000..825eb7e --- /dev/null +++ b/common/src/error.rs @@ -0,0 +1,59 @@ +use serde::Deserialize; + +use crate::rpc_primitives::errors::RpcError; + +#[derive(Debug, Clone, Deserialize)] +pub struct SequencerRpcError { + pub jsonrpc: String, + pub error: RpcError, + pub id: u64, +} + +#[derive(thiserror::Error, Debug)] +pub enum SequencerClientError { + #[error("HTTP error")] + HTTPError(reqwest::Error), + #[error("Serde error")] + SerdeError(serde_json::Error), + #[error("Internal error")] + InternalError(SequencerRpcError), +} + +impl From for SequencerClientError { + fn from(value: reqwest::Error) -> Self { + SequencerClientError::HTTPError(value) + } +} + +impl From for SequencerClientError { + fn from(value: serde_json::Error) -> Self { + SequencerClientError::SerdeError(value) + } +} + +impl From for SequencerClientError { + fn from(value: SequencerRpcError) -> Self { + SequencerClientError::InternalError(value) + } +} + +#[derive(Debug, thiserror::Error)] +pub enum ExecutionFailureKind { + #[error("Failed to get account data from sequencer")] + SequencerError, + #[error("Inputs amounts does not match outputs")] + AmountMismatchError, + #[error("Accounts key not found")] + KeyNotFoundError, + #[error("Sequencer client error: {0:?}")] + SequencerClientError(#[from] SequencerClientError), + #[error("Can not pay for operation")] + InsufficientFundsError, +} + +#[derive(Debug, thiserror::Error)] +pub enum TransactionSignatureError { + #[error("invalid signature for transaction body")] + InvalidSignature, +} + diff --git a/common/src/lib.rs b/common/src/lib.rs index 5a96dc1..3c02565 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -1,98 +1,10 @@ -use serde::Deserialize; - pub mod block; pub mod rpc_primitives; pub mod sequencer_client; pub mod transaction; +pub mod error; //Module for tests utility functions pub mod test_utils; - -use rpc_primitives::errors::RpcError; - pub type HashType = [u8; 32]; -#[derive(Debug, Clone, Deserialize)] -pub struct SequencerRpcError { - pub jsonrpc: String, - pub error: RpcError, - pub id: u64, -} - -#[derive(thiserror::Error, Debug)] -pub enum SequencerClientError { - #[error("HTTP error")] - HTTPError(reqwest::Error), - #[error("Serde error")] - SerdeError(serde_json::Error), - #[error("Internal error")] - InternalError(SequencerRpcError), -} - -impl From for SequencerClientError { - fn from(value: reqwest::Error) -> Self { - SequencerClientError::HTTPError(value) - } -} - -impl From for SequencerClientError { - fn from(value: serde_json::Error) -> Self { - SequencerClientError::SerdeError(value) - } -} - -impl From for SequencerClientError { - fn from(value: SequencerRpcError) -> Self { - SequencerClientError::InternalError(value) - } -} - -#[derive(Debug, thiserror::Error)] -pub enum ExecutionFailureKind { - #[error("Failed to write into builder err: {0:?}")] - WriteError(anyhow::Error), - #[error("Failed to interact with a db err: {0:?}")] - DBError(anyhow::Error), - #[error("Failed to build builder err: {0:?}")] - BuilderError(anyhow::Error), - #[error("Failed prove execution err: {0:?}")] - ProveError(anyhow::Error), - #[error("Failed to decode data from VM: {0:?}")] - DecodeError(String), - #[error("Failed to get account data from sequencer")] - SequencerError, - #[error("Inputs amounts does not match outputs")] - AmountMismatchError, - #[error("Accounts key not found")] - KeyNotFoundError, - #[error("Sequencer client error: {0:?}")] - SequencerClientError(#[from] SequencerClientError), - #[error("Insufficient gas for operation")] - InsufficientGasError, - #[error("Can not pay for operation")] - InsufficientFundsError, -} - -impl ExecutionFailureKind { - pub fn write_error(err: anyhow::Error) -> Self { - Self::WriteError(err) - } - - pub fn builder_error(err: anyhow::Error) -> Self { - Self::BuilderError(err) - } - - pub fn prove_error(err: anyhow::Error) -> Self { - Self::ProveError(err) - } - - pub fn db_error(err: anyhow::Error) -> Self { - Self::DBError(err) - } -} - -#[derive(Debug, thiserror::Error)] -pub enum TransactionSignatureError { - #[error("invalid signature for transaction body")] - InvalidSignature, -} diff --git a/common/src/sequencer_client/mod.rs b/common/src/sequencer_client/mod.rs index 1aec903..cbcd077 100644 --- a/common/src/sequencer_client/mod.rs +++ b/common/src/sequencer_client/mod.rs @@ -14,7 +14,7 @@ use crate::rpc_primitives::requests::{ }; use crate::sequencer_client::json::AccountInitialData; use crate::transaction::{EncodedTransaction, NSSATransaction}; -use crate::{SequencerClientError, SequencerRpcError}; +use crate::error::{SequencerClientError, SequencerRpcError}; pub mod json; diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index 0e8b1cb..079e47d 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -2,7 +2,7 @@ use std::{fs::File, io::Write, path::PathBuf, str::FromStr, sync::Arc}; use base64::{Engine, engine::general_purpose::STANDARD as BASE64}; use common::{ - ExecutionFailureKind, + error::ExecutionFailureKind, sequencer_client::{SequencerClient, json::SendTxResponse}, transaction::{EncodedTransaction, NSSATransaction}, }; diff --git a/wallet/src/token_transfers/deshielded.rs b/wallet/src/token_transfers/deshielded.rs index 6bc812b..d270728 100644 --- a/wallet/src/token_transfers/deshielded.rs +++ b/wallet/src/token_transfers/deshielded.rs @@ -1,4 +1,4 @@ -use common::{ExecutionFailureKind, sequencer_client::json::SendTxResponse}; +use common::{error::ExecutionFailureKind, sequencer_client::json::SendTxResponse}; use key_protocol::key_management::ephemeral_key_holder::EphemeralKeyHolder; use nssa::{ Address, PrivacyPreservingTransaction, diff --git a/wallet/src/token_transfers/private.rs b/wallet/src/token_transfers/private.rs index 5253acd..0673d17 100644 --- a/wallet/src/token_transfers/private.rs +++ b/wallet/src/token_transfers/private.rs @@ -1,4 +1,4 @@ -use common::{ExecutionFailureKind, sequencer_client::json::SendTxResponse}; +use common::{error::ExecutionFailureKind, sequencer_client::json::SendTxResponse}; use key_protocol::key_management::ephemeral_key_holder::EphemeralKeyHolder; use nssa::{ Address, PrivacyPreservingTransaction, diff --git a/wallet/src/token_transfers/public.rs b/wallet/src/token_transfers/public.rs index 22d50eb..86651e8 100644 --- a/wallet/src/token_transfers/public.rs +++ b/wallet/src/token_transfers/public.rs @@ -1,4 +1,4 @@ -use common::{ExecutionFailureKind, sequencer_client::json::SendTxResponse}; +use common::{error::ExecutionFailureKind, sequencer_client::json::SendTxResponse}; use nssa::{ Address, PublicTransaction, program::Program, diff --git a/wallet/src/token_transfers/shielded.rs b/wallet/src/token_transfers/shielded.rs index 1cf1cb7..6435bfe 100644 --- a/wallet/src/token_transfers/shielded.rs +++ b/wallet/src/token_transfers/shielded.rs @@ -1,4 +1,4 @@ -use common::{ExecutionFailureKind, sequencer_client::json::SendTxResponse}; +use common::{error::ExecutionFailureKind, sequencer_client::json::SendTxResponse}; use key_protocol::key_management::ephemeral_key_holder::EphemeralKeyHolder; use nssa::{ Account, Address, PrivacyPreservingTransaction,