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    /// Sparse trie error.
15    #[error(transparent)]
16    SparseTrie(#[from] SparseTrieError),
17    /// Sparse trie task stalled.
18    #[error("sparse trie task stalled")]
19    Stalled,
20    /// The consumer dropped its cancel guard without waiting for the result.
21    #[error("state root task canceled: consumer dropped the handle")]
22    Canceled,
23    /// Other unspecified error.
24    #[error("{_0}")]
25    Other(String),
26}
27
28impl From<StateProofError> for StateRootTaskError {
29    fn from(error: StateProofError) -> Self {
30        match error {
31            StateProofError::Database(err) => Self::Provider(ProviderError::Database(err)),
32            StateProofError::Rlp(err) => Self::Provider(ProviderError::Rlp(err)),
33            StateProofError::TrieInconsistency(msg) => {
34                Self::Provider(ProviderError::TrieWitnessError(msg))
35            }
36        }
37    }
38}