use datasize::DataSize;
use serde::{Deserialize, Serialize};
use casper_types::PublicKey;
use crate::{components::consensus::traits::ConsensusValueT, types::ProtoBlock};
#[derive(Clone, DataSize, Debug, PartialOrd, Ord, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub(crate) struct CandidateBlock {
proto_block: ProtoBlock,
accusations: Vec<PublicKey>,
}
impl CandidateBlock {
pub(crate) fn new(proto_block: ProtoBlock, accusations: Vec<PublicKey>) -> Self {
CandidateBlock {
proto_block,
accusations,
}
}
pub(crate) fn proto_block(&self) -> &ProtoBlock {
&self.proto_block
}
pub(crate) fn accusations(&self) -> &Vec<PublicKey> {
&self.accusations
}
}
impl From<CandidateBlock> for ProtoBlock {
fn from(cb: CandidateBlock) -> ProtoBlock {
cb.proto_block
}
}
impl ConsensusValueT for CandidateBlock {
fn needs_validation(&self) -> bool {
!self.proto_block.wasm_deploys().is_empty() || !self.proto_block.transfers().is_empty()
}
}