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