Skip to main content

reth_trie_parallel/
error.rs

1use reth_execution_errors::{SparseTrieError, StateProofError};
2use reth_provider::ProviderError;
3use thiserror::Error;
4
5/// Error returned by the state-root task and the parallel proof workers.
6#[derive(Error, Debug)]
7pub enum StateRootTaskError {
8    /// Provider error.
9    #[error(transparent)]
10    Provider(#[from] ProviderError),
11    /// Proof dispatch error.
12    #[error("proof dispatch failed: {_0}")]
13    ProofDispatch(ProviderError),
14    /// A proof worker failed before it could process queued work.
15    #[error("proof worker failed: {_0}")]
16    ProofWorker(String),
17    /// Sparse trie error.
18    #[error(transparent)]
19    SparseTrie(#[from] SparseTrieError),
20    /// Sparse trie task stalled.
21    #[error("sparse trie task stalled")]
22    Stalled,
23    /// The consumer dropped its cancel guard without waiting for the result.
24    #[error("state root task canceled: consumer dropped the handle")]
25    Canceled,
26    /// Other unspecified error.
27    #[error("{_0}")]
28    Other(String),
29}
30
31impl From<StateProofError> for StateRootTaskError {
32    fn from(error: StateProofError) -> Self {
33        match error {
34            StateProofError::Database(err) => Self::Provider(ProviderError::Database(err)),
35            StateProofError::Rlp(err) => Self::Provider(ProviderError::Rlp(err)),
36            StateProofError::TrieInconsistency(msg) => {
37                Self::Provider(ProviderError::TrieWitnessError(msg))
38            }
39        }
40    }
41}