snarkvm_errors/dpc/
ledger.rs

1// Copyright (C) 2019-2021 Aleo Systems Inc.
2// This file is part of the snarkVM library.
3
4// The snarkVM library is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// The snarkVM library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with the snarkVM library. If not, see <https://www.gnu.org/licenses/>.
16
17use crate::{algorithms::MerkleError, objects::TransactionError};
18
19#[derive(Debug, Error)]
20pub enum LedgerError {
21    #[error("{}: {}", _0, _1)]
22    Crate(&'static str, String),
23
24    #[error("duplicate sn pushed to ledger")]
25    DuplicateMemo,
26
27    #[error("duplicate memo pushed to ledger")]
28    DuplicateSn,
29
30    #[error("database already exists")]
31    ExistingDatabase,
32
33    #[error("invalid cm pushed to ledger")]
34    InvalidCm,
35
36    #[error("invalid cm index during proving")]
37    InvalidCmIndex,
38
39    #[error("{}", _0)]
40    MerkleError(MerkleError),
41
42    #[error("{}", _0)]
43    Message(String),
44
45    #[error("{}", _0)]
46    TransactionError(TransactionError),
47}
48
49impl From<std::io::Error> for LedgerError {
50    fn from(error: std::io::Error) -> Self {
51        LedgerError::Crate("std::io", format!("{:?}", error))
52    }
53}
54
55impl From<MerkleError> for LedgerError {
56    fn from(error: MerkleError) -> Self {
57        LedgerError::MerkleError(error)
58    }
59}
60
61impl From<TransactionError> for LedgerError {
62    fn from(error: TransactionError) -> Self {
63        LedgerError::TransactionError(error)
64    }
65}