1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
use datasize::DataSize;
use thiserror::Error;
use casper_types::{bytesrepr, system::mint, ProtocolVersion};
use crate::{
core::{
engine_state::{genesis::GenesisError, upgrade::ProtocolUpgradeError},
execution,
},
shared::{newtypes::Blake2bHash, wasm_prep},
storage,
};
#[derive(Clone, Error, Debug)]
pub enum Error {
#[error("Invalid hash length: expected {expected}, actual {actual}")]
InvalidHashLength { expected: usize, actual: usize },
#[error("Invalid account hash length: expected {expected}, actual {actual}")]
InvalidAccountHashLength { expected: usize, actual: usize },
#[error("Invalid protocol version: {0}")]
InvalidProtocolVersion(ProtocolVersion),
#[error("{0:?}")]
Genesis(Box<GenesisError>),
#[error("Wasm preprocessing error: {0}")]
WasmPreprocessing(#[from] wasm_prep::PreprocessingError),
#[error("Wasm serialization error: {0:?}")]
WasmSerialization(#[from] parity_wasm::SerializationError),
#[error(transparent)]
Exec(execution::Error),
#[error("Storage error: {0}")]
Storage(#[from] storage::error::Error),
#[error("Authorization failure: not authorized.")]
Authorization,
#[error("Insufficient payment")]
InsufficientPayment,
#[error("Gas conversion overflow")]
GasConversionOverflow,
#[error("Deploy error")]
Deploy,
#[error("Payment finalization error")]
Finalization,
#[error("Missing system contract association: {0}")]
MissingSystemContract(String),
#[error("Bytesrepr error: {0}")]
Bytesrepr(String),
#[error("Mint error: {0}")]
Mint(String),
#[error("Unsupported key type")]
InvalidKeyVariant,
#[error("Protocol upgrade error: {0}")]
ProtocolUpgrade(ProtocolUpgradeError),
#[error("Unsupported deploy item variant: {0}")]
InvalidDeployItemVariant(String),
}
impl From<execution::Error> for Error {
fn from(error: execution::Error) -> Self {
match error {
execution::Error::WasmPreprocessing(preprocessing_error) => {
Error::WasmPreprocessing(preprocessing_error)
}
_ => Error::Exec(error),
}
}
}
impl From<bytesrepr::Error> for Error {
fn from(error: bytesrepr::Error) -> Self {
Error::Bytesrepr(format!("{}", error))
}
}
impl From<mint::Error> for Error {
fn from(error: mint::Error) -> Self {
Error::Mint(format!("{}", error))
}
}
impl From<GenesisError> for Error {
fn from(genesis_error: GenesisError) -> Self {
Self::Genesis(Box::new(genesis_error))
}
}
impl DataSize for Error {
const IS_DYNAMIC: bool = true;
const STATIC_HEAP_SIZE: usize = 0;
#[inline]
fn estimate_heap_size(&self) -> usize {
12
}
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct RootNotFound(Blake2bHash);
impl RootNotFound {
pub fn new(hash: Blake2bHash) -> Self {
RootNotFound(hash)
}
pub fn to_vec(&self) -> Vec<u8> {
self.0.as_ref().to_vec()
}
}