casper_storage/data_access_layer/
execution_results_checksum.rs

1use crate::tracking_copy::TrackingCopyError;
2use casper_types::Digest;
3
4/// Execution results checksum literal.
5pub const EXECUTION_RESULTS_CHECKSUM_NAME: &str = "execution_results_checksum";
6
7/// Represents a request to obtain current execution results checksum.
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct ExecutionResultsChecksumRequest {
10    state_hash: Digest,
11}
12
13impl ExecutionResultsChecksumRequest {
14    /// Creates new request.
15    pub fn new(state_hash: Digest) -> Self {
16        ExecutionResultsChecksumRequest { state_hash }
17    }
18
19    /// Returns state root hash.
20    pub fn state_hash(&self) -> Digest {
21        self.state_hash
22    }
23}
24
25/// Represents a result of a `execution_results_checksum` request.
26#[derive(Debug)]
27pub enum ExecutionResultsChecksumResult {
28    /// Invalid state root hash.
29    RootNotFound,
30    /// Returned if system registry is not found.
31    RegistryNotFound,
32    /// Returned if checksum is not found.
33    ChecksumNotFound,
34    /// Contains current checksum returned from the global state.
35    Success {
36        /// Current checksum.
37        checksum: Digest,
38    },
39    /// Error occurred.
40    Failure(TrackingCopyError),
41}
42
43impl ExecutionResultsChecksumResult {
44    /// Returns a Result matching the original api for this functionality.
45    pub fn as_legacy(&self) -> Result<Option<Digest>, TrackingCopyError> {
46        match self {
47            ExecutionResultsChecksumResult::RootNotFound
48            | ExecutionResultsChecksumResult::RegistryNotFound
49            | ExecutionResultsChecksumResult::ChecksumNotFound => Ok(None),
50            ExecutionResultsChecksumResult::Success { checksum } => Ok(Some(*checksum)),
51            ExecutionResultsChecksumResult::Failure(err) => Err(err.clone()),
52        }
53    }
54}