casper-node 2.0.3

The Casper blockchain node
Documentation
use std::fmt::{Display, Formatter};

use datasize::DataSize;
use derive_more::From;

use casper_types::{Digest, TransactionHash, TransactionId};

use super::deploy_acquisition;

use casper_types::BlockHash;

#[derive(Clone, Copy, From, PartialEq, Eq, DataSize, Debug)]
pub(crate) enum BlockAcquisitionError {
    InvalidStateTransition,
    BlockHashMismatch {
        expected: BlockHash,
        actual: BlockHash,
    },
    RootHashMismatch {
        expected: Digest,
        actual: Digest,
    },
    InvalidAttemptToAcquireExecutionResults,
    #[from]
    InvalidAttemptToApplyApprovalsHashes(deploy_acquisition::Error),
    InvalidAttemptToApplyTransaction {
        txn_id: TransactionId,
    },
    MissingApprovalsHashes(TransactionHash),
    InvalidAttemptToMarkComplete,
    InvalidAttemptToEnqueueBlockForExecution,
    ExecutionResults(super::execution_results_acquisition::Error),
    InvalidTransactionType,
}

impl Display for BlockAcquisitionError {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self {
            BlockAcquisitionError::InvalidStateTransition => write!(f, "invalid state transition"),
            BlockAcquisitionError::InvalidAttemptToMarkComplete => {
                write!(f, "invalid attempt to mark complete")
            }
            BlockAcquisitionError::InvalidAttemptToAcquireExecutionResults => {
                write!(
                    f,
                    "invalid attempt to acquire execution results while in a terminal state"
                )
            }
            BlockAcquisitionError::BlockHashMismatch { expected, actual } => {
                write!(
                    f,
                    "block hash mismatch: expected {} actual: {}",
                    expected, actual
                )
            }
            BlockAcquisitionError::RootHashMismatch { expected, actual } => write!(
                f,
                "root hash mismatch: expected {} actual: {}",
                expected, actual
            ),
            BlockAcquisitionError::ExecutionResults(error) => {
                write!(f, "execution results error: {}", error)
            }
            BlockAcquisitionError::InvalidAttemptToApplyApprovalsHashes(error) => write!(
                f,
                "invalid attempt to apply approvals hashes results: {}",
                error
            ),
            BlockAcquisitionError::InvalidAttemptToEnqueueBlockForExecution => {
                write!(f, "invalid attempt to enqueue block for execution")
            }
            BlockAcquisitionError::InvalidAttemptToApplyTransaction { txn_id } => {
                write!(f, "invalid attempt to apply transaction: {}", txn_id)
            }
            BlockAcquisitionError::MissingApprovalsHashes(missing_txn_hash) => {
                write!(
                    f,
                    "missing approvals hashes for transaction {}",
                    missing_txn_hash
                )
            }
            BlockAcquisitionError::InvalidTransactionType => {
                write!(f, "invalid transaction identifier",)
            }
        }
    }
}