mithril_aggregator/dependency_injection/builder/enablers/
epoch.rs1use std::sync::Arc;
2use tokio::sync::RwLock;
3
4use mithril_protocol_config::{
5 http::HttpMithrilNetworkConfigurationProvider, interface::MithrilNetworkConfigurationProvider,
6};
7
8use crate::dependency_injection::{DependenciesBuilder, EpochServiceWrapper, Result};
9use crate::get_dependency;
10use crate::services::{
11 EpochServiceDependencies, LocalMithrilNetworkConfigurationProvider, MithrilEpochService,
12};
13
14impl DependenciesBuilder {
15 async fn build_epoch_service(&mut self) -> Result<EpochServiceWrapper> {
16 let verification_key_store = self.get_verification_key_store().await?;
17 let epoch_settings_storer = self.get_epoch_settings_store().await?;
18 let chain_observer = self.get_chain_observer().await?;
19 let era_checker = self.get_era_checker().await?;
20 let stake_store = self.get_stake_store().await?;
21 let allowed_discriminants = self
22 .configuration
23 .compute_allowed_signed_entity_types_discriminants()?;
24
25 let epoch_service = Arc::new(RwLock::new(MithrilEpochService::new(
26 EpochServiceDependencies::new(
27 self.get_mithril_network_configuration_provider().await?,
28 epoch_settings_storer,
29 verification_key_store,
30 chain_observer,
31 era_checker,
32 stake_store,
33 ),
34 allowed_discriminants,
35 self.root_logger(),
36 )));
37
38 Ok(epoch_service)
39 }
40
41 pub async fn get_epoch_service(&mut self) -> Result<EpochServiceWrapper> {
43 get_dependency!(self.epoch_service)
44 }
45
46 async fn build_mithril_network_configuration_provider(
47 &mut self,
48 ) -> Result<Arc<dyn MithrilNetworkConfigurationProvider>> {
49 let network_configuration_provider: Arc<dyn MithrilNetworkConfigurationProvider> =
50 if self.configuration.is_follower_aggregator() {
51 Arc::new(HttpMithrilNetworkConfigurationProvider::new(
52 self.get_leader_aggregator_client().await?,
53 ))
54 } else {
55 Arc::new(LocalMithrilNetworkConfigurationProvider::new(
56 self.configuration
57 .get_leader_aggregator_epoch_settings_configuration()?,
58 self.configuration
59 .compute_allowed_signed_entity_types_discriminants()?,
60 self.get_epoch_settings_store().await?,
61 ))
62 };
63
64 Ok(network_configuration_provider)
65 }
66
67 pub async fn get_mithril_network_configuration_provider(
69 &mut self,
70 ) -> Result<Arc<dyn MithrilNetworkConfigurationProvider>> {
71 get_dependency!(self.mithril_network_configuration_provider)
72 }
73}