mithril_aggregator/dependency_injection/builder/protocol/
signables.rs1use std::sync::Arc;
2
3use mithril_cardano_node_chain::chain_importer::CardanoChainDataImporter;
4use mithril_cardano_node_internal_database::signable_builder::{
5 CardanoDatabaseSignableBuilder, CardanoImmutableFilesFullSignableBuilder,
6};
7use mithril_common::crypto_helper::MKTreeStoreInMemory;
8use mithril_common::signable_builder::{
9 CardanoBlocksTransactionsSignableBuilder, CardanoStakeDistributionSignableBuilder,
10 CardanoTransactionsSignableBuilder, MithrilSignableBuilderService,
11 MithrilStakeDistributionSignableBuilder, SignableBuilderService,
12 SignableBuilderServiceDependencies, SignableSeedBuilder,
13};
14
15use crate::dependency_injection::{DependenciesBuilder, Result};
16use crate::get_dependency;
17use crate::services::{AggregatorChainDataImporter, AggregatorSignableSeedBuilder};
18
19impl DependenciesBuilder {
20 async fn build_signable_builder_service(&mut self) -> Result<Arc<dyn SignableBuilderService>> {
21 let seed_signable_builder = self.get_signable_seed_builder().await?;
22 let mithril_stake_distribution_builder =
23 Arc::new(MithrilStakeDistributionSignableBuilder::default());
24 let immutable_signable_builder = Arc::new(CardanoImmutableFilesFullSignableBuilder::new(
25 self.get_immutable_digester().await?,
26 &self.configuration.db_directory(),
27 self.root_logger(),
28 ));
29 let transaction_importer = self.get_chain_data_importer().await?;
30 let block_range_root_retriever = self.get_chain_data_repository().await?;
31 let cardano_transactions_builder = Arc::new(CardanoTransactionsSignableBuilder::<
32 MKTreeStoreInMemory,
33 >::new(
34 transaction_importer.clone(),
35 block_range_root_retriever.clone(),
36 ));
37 let cardano_blocks_transactions_builder =
38 Arc::new(CardanoBlocksTransactionsSignableBuilder::<
39 MKTreeStoreInMemory,
40 >::new(
41 transaction_importer, block_range_root_retriever
42 ));
43 let cardano_stake_distribution_builder = Arc::new(
44 CardanoStakeDistributionSignableBuilder::new(self.get_stake_store().await?),
45 );
46 let cardano_database_signable_builder = Arc::new(CardanoDatabaseSignableBuilder::new(
47 self.get_immutable_digester().await?,
48 &self.configuration.db_directory(),
49 self.root_logger(),
50 ));
51 let signable_builders_dependencies = SignableBuilderServiceDependencies::new(
52 mithril_stake_distribution_builder,
53 immutable_signable_builder,
54 cardano_transactions_builder,
55 cardano_blocks_transactions_builder,
56 cardano_stake_distribution_builder,
57 cardano_database_signable_builder,
58 );
59 let signable_builder_service = Arc::new(MithrilSignableBuilderService::new(
60 seed_signable_builder,
61 signable_builders_dependencies,
62 self.root_logger(),
63 ));
64
65 Ok(signable_builder_service)
66 }
67
68 pub async fn get_signable_builder_service(
70 &mut self,
71 ) -> Result<Arc<dyn SignableBuilderService>> {
72 get_dependency!(self.signable_builder_service)
73 }
74
75 async fn build_signable_seed_builder(&mut self) -> Result<Arc<dyn SignableSeedBuilder>> {
76 let signable_seed_builder_service = Arc::new(AggregatorSignableSeedBuilder::new(
77 self.get_epoch_service().await?,
78 ));
79
80 Ok(signable_seed_builder_service)
81 }
82
83 pub async fn get_signable_seed_builder(&mut self) -> Result<Arc<dyn SignableSeedBuilder>> {
85 get_dependency!(self.signable_seed_builder)
86 }
87
88 async fn build_chain_data_importer(&mut self) -> Result<Arc<AggregatorChainDataImporter>> {
89 let chain_data_importer = Arc::new(CardanoChainDataImporter::new(
90 self.get_block_scanner().await?,
91 self.get_chain_data_repository().await?,
92 self.root_logger(),
93 ));
94
95 Ok(Arc::new(AggregatorChainDataImporter::new(
96 chain_data_importer,
97 )))
98 }
99
100 pub async fn get_chain_data_importer(&mut self) -> Result<Arc<AggregatorChainDataImporter>> {
102 get_dependency!(self.chain_data_importer)
103 }
104}