mithril_aggregator/dependency_injection/builder/protocol/
signables.rs

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