1use alloy::{
2 contract::Error as AlloyContractError,
3 providers::{MulticallError, PendingTransactionError},
4 transports::{RpcError as AlloyRpcError, TransportErrorKind},
5};
6use hopr_crypto_types::prelude::Hash;
7use thiserror::Error;
9
10#[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#[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}