1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum ConsensusError {
8 #[error("invalid transaction: {0}")]
10 InvalidTransaction(String),
11
12 #[error("invalid block: {0}")]
14 InvalidBlock(String),
15
16 #[error("invalid signature: {0}")]
18 InvalidSignature(String),
19
20 #[error("invalid genesis: {0}")]
22 InvalidGenesis(String),
23
24 #[error("validator not found: {0}")]
26 ValidatorNotFound(String),
27
28 #[error("no quorum: {0}")]
30 NoQuorum(String),
31
32 #[error("mempool error: {0}")]
34 MempoolError(String),
35
36 #[error("serialization error: {0}")]
38 SerializationError(String),
39
40 #[error("storage error: {0}")]
42 StorageError(String),
43
44 #[error("engine error: {0}")]
46 EngineError(String),
47
48 #[error("network error: {0}")]
50 NetworkError(String),
51
52 #[error("duplicate transaction: {0}")]
54 DuplicateTransaction(String),
55
56 #[error("block not found at height {0}")]
58 BlockNotFound(u64),
59
60 #[error("invalid state transition: {0}")]
62 InvalidStateTransition(String),
63
64 #[error("transaction failed: {0}")]
66 TransactionFailed(String),
67}
68
69pub type Result<T> = std::result::Result<T, ConsensusError>;
71
72impl From<serde_json::Error> for ConsensusError {
73 fn from(err: serde_json::Error) -> Self {
74 ConsensusError::SerializationError(err.to_string())
75 }
76}