essential_builder/
error.rs1use essential_builder_db as builder_db;
4use essential_check::solution::PredicatesError;
5use essential_node as node;
6use essential_node_db as node_db;
7use essential_types::{predicate::PredicateDecodeError, ContentAddress, Key};
8use thiserror::Error;
9
10#[derive(Debug, Error)]
12pub enum BuildBlockError {
13 #[error("A builder DB query error occurred: {0}")]
15 BuilderQuery(#[from] builder_db::error::AcquireThenQueryError),
16 #[error("A builder DB rusqlite error occurred: {0}")]
18 BuilderRusqlite(#[from] builder_db::error::AcquireThenRusqliteError),
19 #[error("A node DB rusqlite error occurred: {0}")]
21 NodeRusqlite(#[from] node::db::pool::AcquireThenRusqliteError),
22 #[error("Failed to check and apply solution sets: {0}")]
24 CheckSets(#[from] CheckSetsError),
25 #[error("System time produced non-monotonic timestamp")]
27 TimestampNotMonotonic,
28 #[error("System timestamp is out of range of `Word`")]
30 TimestampOutOfRange,
31 #[error("Failed to retrieve the last block header")]
33 LastBlockHeader(#[from] node::db::pool::AcquireThenError<LastBlockHeaderError>),
34 #[error("The next block number would be out of `u64` range")]
36 BlockNumberOutOfRange,
37}
38
39#[derive(Debug, Error)]
41pub enum LastBlockHeaderError {
42 #[error("A rusqlite error occurred: {0}")]
44 Rusqlite(#[from] rusqlite::Error),
45 #[error("A node DB query error occurred: {0}")]
47 Query(#[from] node_db::QueryError),
48 #[error("The node DB contained no number for the last finalized block")]
50 NoNumberForLastFinalizedBlock,
51 #[error("The node DB contained no timestamp for the last finalized block")]
53 NoTimestampForLastFinalizedBlock,
54}
55
56#[derive(Debug, Error)]
58pub enum CheckSetsError {
59 #[error("an error occurred while attempting to apply a set: {0}")]
61 CheckSolution(#[from] CheckSetError),
62}
63
64#[derive(Debug, Error)]
66pub enum CheckSetError {
67 #[error("a rusqlite error occurred: {0}")]
69 Rusqlite(#[from] rusqlite::Error),
70 #[error("a node DB query failed: {0}")]
72 NodeQuery(#[from] node::db::pool::AcquireThenQueryError),
73}
74
75#[derive(Debug, Error)]
77pub enum SetPredicatesError {
78 #[error("an error occurred while querying for a predicate from the node DB: {0}")]
80 QueryPredicate(#[from] QueryPredicateError),
81 #[error("the node DB is missing a required predicate ({0})")]
83 PredicateDoesNotExist(ContentAddress),
84}
85
86#[derive(Debug, Error)]
88pub enum PredicateProgramsError {
89 #[error("an error occurred while querying for a program from the node DB: {0}")]
91 QueryProgram(#[from] QueryProgramError),
92 #[error("the node DB is missing a required program ({0})")]
94 ProgramDoesNotExist(ContentAddress),
95}
96
97#[derive(Debug, Error)]
99pub enum InvalidSet {
100 #[error("Solution set specified a predicate to solve that does not exist")]
102 PredicateDoesNotExist(ContentAddress),
103 #[error("Solution set contains a predicate that specified a program that does not exist")]
105 ProgramDoesNotExist(ContentAddress),
106 #[error(
109 "Solution set specified a predicate that was invalid when reading from contract registry state"
110 )]
111 PredicateInvalid,
112 #[error(
115 "Solution set contains a predicate that specified a program that was invalid when reading from program registry state"
116 )]
117 ProgramInvalid,
118 #[error("Validation of the solution set predicates failed: {0}")]
120 Predicates(PredicatesError<StateReadError>),
121}
122
123#[derive(Debug, Error)]
126pub enum StateReadError {
127 #[error("a state query failed: {0}")]
129 Query(#[from] node::db::pool::AcquireThenQueryError),
130 #[error("No entry exists for the given key {0:?}")]
132 NoEntry(Key),
133 #[error("A key would be out of range: `key` {key:?}, `num_values` {num_values}")]
135 OutOfRange { key: Key, num_values: usize },
136}
137
138#[derive(Debug, Error)]
140pub enum QueryPredicateError {
141 #[error("failed to query the node DB: {0}")]
143 ConnPoolQuery(#[from] node::db::pool::AcquireThenQueryError),
144 #[error("the queried predicate is missing the word that encodes its length")]
146 MissingLenBytes,
147 #[error("the queried predicate length was invalid")]
149 InvalidLenBytes,
150 #[error("failed to decode the queried predicate: {0}")]
152 Decode(#[from] PredicateDecodeError),
153}
154
155#[derive(Debug, Error)]
157pub enum QueryProgramError {
158 #[error("failed to query the node DB: {0}")]
160 ConnPoolQuery(#[from] node::db::pool::AcquireThenQueryError),
161 #[error("the queried program is missing the word that encodes its length")]
163 MissingLenBytes,
164 #[error("the queried program length was invalid")]
166 InvalidLenBytes,
167}