use crate::{
chain_storage::BlockchainBackend,
consensus::ConsensusManager,
transactions::types::CryptoFactories,
validation::{
block_validators::BlockValidator,
CandidateBlockBodyValidation,
ChainBalanceValidator,
FinalHorizonStateValidation,
},
};
use std::{fmt, sync::Arc};
#[derive(Clone)]
pub struct SyncValidators<B: BlockchainBackend> {
pub block_body: Arc<dyn CandidateBlockBodyValidation<B>>,
pub final_horizon_state: Arc<dyn FinalHorizonStateValidation<B>>,
}
impl<B: BlockchainBackend + 'static> SyncValidators<B> {
pub fn new<TBody, TFinal>(block_body: TBody, final_state: TFinal) -> Self
where
TBody: CandidateBlockBodyValidation<B> + 'static,
TFinal: FinalHorizonStateValidation<B> + 'static,
{
Self {
block_body: Arc::new(block_body),
final_horizon_state: Arc::new(final_state),
}
}
pub fn full_consensus(rules: ConsensusManager, factories: CryptoFactories) -> Self {
Self::new(
BlockValidator::new(rules.clone(), factories.clone()),
ChainBalanceValidator::<B>::new(rules, factories),
)
}
}
impl<B: BlockchainBackend> fmt::Debug for SyncValidators<B> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("HorizonHeaderValidators")
.field("header", &"...")
.field("final_state", &"...")
.finish()
}
}