hopr_chain_rpc/
errors.rs

1use alloy::{
2    contract::Error as AlloyContractError,
3    providers::{MulticallError, PendingTransactionError},
4    transports::{RpcError as AlloyRpcError, TransportErrorKind},
5};
6use hopr_crypto_types::prelude::Hash;
7/// Errors produced by this crate and other error-related types.
8use thiserror::Error;
9
10/// Enumerates different errors produced by this crate.
11#[derive(Error, Debug)]
12pub enum RpcError {
13    #[error(transparent)]
14    AlloyRpcError(#[from] AlloyRpcError<TransportErrorKind>),
15
16    #[error(transparent)]
17    AlloyContractError(#[from] AlloyContractError),
18
19    #[error(transparent)]
20    MulticallError(#[from] MulticallError),
21
22    #[error(transparent)]
23    LogConversionError(#[from] LogConversionError),
24
25    #[error(transparent)]
26    SignerError(#[from] alloy::signers::Error),
27
28    #[error("multicall inner failure at {0}: {1}")]
29    MulticallFailure(usize, String),
30
31    #[error(transparent)]
32    PendingTransactionError(#[from] PendingTransactionError),
33
34    #[error("transaction with hash {0} failed on-chain")]
35    TransactionFailed(Hash),
36
37    #[error("filter does not contain any criteria")]
38    FilterIsEmpty,
39
40    #[error("transaction submission to the RPC provider timed out")]
41    Timeout,
42
43    #[error("unknown error: {0}")]
44    Other(String),
45}
46
47pub type Result<T> = std::result::Result<T, RpcError>;
48
49/// Error abstraction for `HttpRequestor`.
50#[derive(Error, Clone, Debug, PartialEq)]
51pub enum HttpRequestError {
52    #[error("connection timed out")]
53    Timeout,
54
55    #[error("http error - status {0}")]
56    HttpError(http::StatusCode),
57
58    #[error("io error when performing http request: {0}")]
59    TransportError(String),
60
61    #[error("unrecognized error: {0}")]
62    UnknownError(String),
63}
64
65#[derive(Debug, thiserror::Error)]
66pub enum LogConversionError {
67    #[error("Missing transaction index")]
68    MissingTransactionIndex,
69    #[error("Missing block number")]
70    MissingBlockNumber,
71    #[error("Missing block hash")]
72    MissingBlockHash,
73    #[error("Missing log index")]
74    MissingLogIndex,
75    #[error("Missing transaction hash")]
76    MissingTransactionHash,
77}