1use crate::abci::AbciError;
2use crate::error::execution::ExecutionError;
3use crate::error::serialization::SerializationError;
4use crate::logging;
5use dpp::bls_signatures::BlsError;
6use dpp::dashcore_rpc::Error as CoreRpcError;
7use dpp::data_contract::errors::DataContractError;
8use dpp::platform_value::Error as ValueError;
9use dpp::version::PlatformVersionError;
10use drive::dpp::ProtocolError;
11use drive::error::Error as DriveError;
12use tenderdash_abci::proto::abci::ResponseException;
13
14pub mod execution;
16pub mod query;
18pub mod serialization;
20
21#[derive(Debug, thiserror::Error)]
24pub enum Error {
25 #[error("abci: {0}")]
27 Abci(#[from] AbciError),
28 #[error("storage: {0}")]
30 Drive(#[from] DriveError),
31 #[error("protocol: {0}")]
33 Protocol(#[from] ProtocolError),
34 #[error("execution: {0}")]
36 Execution(#[from] ExecutionError),
37 #[error("core rpc error: {0}")]
39 CoreRpc(#[from] CoreRpcError),
40 #[error("BLS error: {0}")]
42 BLSError(#[from] BlsError),
43 #[error("serialization: {0}")]
45 Serialization(#[from] SerializationError),
46 #[error("configuration: {0}")]
48 Configuration(#[from] envy::Error),
49 #[error("logging: {0}")]
51 Logging(#[from] logging::Error),
52 #[error("metrics: {0}")]
54 Metrics(#[from] crate::metrics::Error),
55}
56
57impl From<PlatformVersionError> for Error {
58 fn from(value: PlatformVersionError) -> Self {
59 let platform_error: ProtocolError = value.into();
60 platform_error.into()
61 }
62}
63
64impl From<DataContractError> for Error {
65 fn from(value: DataContractError) -> Self {
66 Self::Protocol(ProtocolError::DataContractError(value))
67 }
68}
69
70impl From<ValueError> for Error {
71 fn from(value: ValueError) -> Self {
72 let platform_error: ProtocolError = value.into();
73 platform_error.into()
74 }
75}
76
77impl From<drive::grovedb::Error> for Error {
78 fn from(value: drive::grovedb::Error) -> Self {
79 let drive_error: DriveError = value.into();
80 drive_error.into()
81 }
82}
83
84impl From<Error> for ResponseException {
85 fn from(value: Error) -> Self {
86 Self {
87 error: value.to_string(),
88 }
89 }
90}