use std::{fmt, sync::Arc};
use tari_transaction_components::crypto_factories::CryptoFactories;
use crate::{
chain_storage::BlockchainBackend,
consensus::BaseNodeConsensusManager,
validation::{
BlockBodyValidator,
ChainBalanceValidator,
FinalHorizonStateValidation,
block_body::BlockBodyFullValidator,
},
};
#[derive(Clone)]
pub struct SyncValidators<B> {
pub block_body: Arc<dyn BlockBodyValidator<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: BlockBodyValidator<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: BaseNodeConsensusManager,
factories: CryptoFactories,
bypass_range_proof_verification: bool,
) -> Self {
Self::new(
BlockBodyFullValidator::new(rules.clone(), bypass_range_proof_verification),
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()
}
}