mithril_aggregator/dependency_injection/builder/protocol/
signables.rs

1use 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    /// [SignableBuilderService] service
59    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    /// [SignableSeedBuilder] service
74    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    /// Get the [TransactionsImporter] instance
89    pub async fn get_transactions_importer(&mut self) -> Result<Arc<dyn TransactionsImporter>> {
90        get_dependency!(self.transactions_importer)
91    }
92}