casper-node 2.0.3

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

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

use casper_types::{Block, BlockV2, EraId, Timestamp, Transaction, TransactionId};

use crate::{
    components::consensus::{ClContext, ProposedBlock},
    effect::{requests::TransactionBufferRequest, Responder},
    types::{appendable_block::AppendableBlock, FinalizedBlock},
};

#[derive(Debug, From, DataSize)]
pub(crate) enum Event {
    Initialize(Vec<Block>),
    #[from]
    Request(TransactionBufferRequest),
    ReceiveTransactionGossiped(TransactionId),
    StoredTransaction(TransactionId, Option<Box<Transaction>>),
    BlockProposed(Box<ProposedBlock<ClContext>>),
    Block(Arc<BlockV2>),
    VersionedBlock(Arc<Block>),
    BlockFinalized(Box<FinalizedBlock>),
    Expire,
    UpdateEraGasPrice(EraId, u8),
    GetGasPriceResult(
        Option<u8>,
        EraId,
        Timestamp,
        Timestamp,
        Responder<AppendableBlock>,
    ),
}

impl Display for Event {
    fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
        match self {
            Event::Initialize(blocks) => {
                write!(formatter, "initialize, {} blocks", blocks.len())
            }
            Event::Request(TransactionBufferRequest::GetAppendableBlock { .. }) => {
                write!(formatter, "get appendable block request")
            }
            Event::ReceiveTransactionGossiped(transaction_id) => {
                write!(formatter, "receive transaction gossiped {}", transaction_id)
            }
            Event::StoredTransaction(transaction_id, maybe_transaction) => {
                write!(
                    formatter,
                    "{} stored: {:?}",
                    transaction_id,
                    maybe_transaction.is_some()
                )
            }
            Event::BlockProposed(_) => {
                write!(formatter, "proposed block")
            }
            Event::BlockFinalized(finalized_block) => {
                write!(
                    formatter,
                    "finalized block at height {}",
                    finalized_block.height
                )
            }
            Event::Block(_) => {
                write!(formatter, "block")
            }
            Event::VersionedBlock(_) => {
                write!(formatter, "versioned block")
            }
            Event::Expire => {
                write!(formatter, "expire transactions")
            }
            Event::UpdateEraGasPrice(era_id, next_era_gas_price) => {
                write!(
                    formatter,
                    "gas price {} for era {}",
                    next_era_gas_price, era_id
                )
            }
            Event::GetGasPriceResult(_, era_id, _, _, _) => {
                write!(formatter, "retrieving gas price for era {}", era_id)
            }
        }
    }
}