mithril_aggregator/dependency_injection/builder/support/
stores.rs1use anyhow::Context;
2use std::sync::Arc;
3use std::time::Duration;
4
5use mithril_cardano_node_internal_database::digesters::cache::ImmutableFileDigestCacheProvider;
6use mithril_persistence::database::repository::CardanoTransactionRepository;
7
8use crate::database::repository::{
9 CertificateRepository, EpochSettingsStore, ImmutableFileDigestRepository,
10 OpenMessageRepository, SignedEntityStore, SignedEntityStorer, SignerRegistrationStore,
11 SignerStore, StakePoolStore,
12};
13use crate::dependency_injection::{DependenciesBuilder, Result};
14use crate::get_dependency;
15use crate::{
16 CExplorerSignerRetriever, ImmutableFileDigestMapper, ProtocolParametersRetriever,
17 SignersImporter, VerificationKeyStorer,
18};
19
20impl DependenciesBuilder {
21 async fn build_stake_store(&mut self) -> Result<Arc<StakePoolStore>> {
22 let stake_pool_store = Arc::new(StakePoolStore::new(
23 self.get_sqlite_connection().await?,
24 self.configuration.safe_epoch_retention_limit(),
25 ));
26
27 Ok(stake_pool_store)
28 }
29
30 pub async fn get_stake_store(&mut self) -> Result<Arc<StakePoolStore>> {
32 get_dependency!(self.stake_store)
33 }
34
35 async fn build_certificate_repository(&mut self) -> Result<Arc<CertificateRepository>> {
36 Ok(Arc::new(CertificateRepository::new(
37 self.get_sqlite_connection().await?,
38 )))
39 }
40
41 pub async fn get_certificate_repository(&mut self) -> Result<Arc<CertificateRepository>> {
43 get_dependency!(self.certificate_repository)
44 }
45
46 async fn build_open_message_repository(&mut self) -> Result<Arc<OpenMessageRepository>> {
47 Ok(Arc::new(OpenMessageRepository::new(
48 self.get_sqlite_connection().await?,
49 )))
50 }
51
52 pub async fn get_open_message_repository(&mut self) -> Result<Arc<OpenMessageRepository>> {
54 get_dependency!(self.open_message_repository)
55 }
56
57 async fn build_verification_key_store(&mut self) -> Result<Arc<dyn VerificationKeyStorer>> {
58 Ok(Arc::new(SignerRegistrationStore::new(
59 self.get_sqlite_connection().await?,
60 self.configuration.safe_epoch_retention_limit(),
61 )))
62 }
63
64 pub async fn get_verification_key_store(&mut self) -> Result<Arc<dyn VerificationKeyStorer>> {
66 get_dependency!(self.verification_key_store)
67 }
68
69 async fn build_protocol_parameters_retriever(
70 &mut self,
71 ) -> Result<Arc<dyn ProtocolParametersRetriever>> {
72 let protocol_parameters_retriever =
73 EpochSettingsStore::new(self.get_sqlite_connection().await?, None);
74
75 Ok(Arc::new(protocol_parameters_retriever))
76 }
77
78 pub async fn get_protocol_parameters_retriever(
80 &mut self,
81 ) -> Result<Arc<dyn ProtocolParametersRetriever>> {
82 if self.protocol_parameters_retriever.is_none() {
83 self.protocol_parameters_retriever =
84 Some(self.build_protocol_parameters_retriever().await?);
85 }
86
87 Ok(self.protocol_parameters_retriever.as_ref().cloned().unwrap())
88 }
89
90 async fn build_epoch_settings_store(&mut self) -> Result<Arc<EpochSettingsStore>> {
91 let epoch_settings_store = EpochSettingsStore::new(
92 self.get_sqlite_connection().await?,
93 self.configuration.safe_epoch_retention_limit(),
94 );
95
96 Ok(Arc::new(epoch_settings_store))
97 }
98
99 pub async fn get_epoch_settings_store(&mut self) -> Result<Arc<EpochSettingsStore>> {
101 get_dependency!(self.epoch_settings_store)
102 }
103
104 async fn build_immutable_cache_provider(
105 &mut self,
106 ) -> Result<Arc<dyn ImmutableFileDigestCacheProvider>> {
107 let cache_provider =
108 ImmutableFileDigestRepository::new(self.get_sqlite_connection().await?);
109 if self.configuration.reset_digests_cache() {
110 cache_provider
111 .reset()
112 .await
113 .with_context(|| "Failure occurred when resetting immutable file digest cache")?;
114 }
115
116 Ok(Arc::new(cache_provider))
117 }
118
119 pub async fn get_immutable_cache_provider(
121 &mut self,
122 ) -> Result<Arc<dyn ImmutableFileDigestCacheProvider>> {
123 get_dependency!(self.immutable_cache_provider)
124 }
125
126 async fn build_transaction_repository(&mut self) -> Result<Arc<CardanoTransactionRepository>> {
127 let transaction_store = CardanoTransactionRepository::new(
128 self.get_sqlite_connection_cardano_transaction_pool().await?,
129 );
130
131 Ok(Arc::new(transaction_store))
132 }
133
134 pub async fn get_transaction_repository(
136 &mut self,
137 ) -> Result<Arc<CardanoTransactionRepository>> {
138 get_dependency!(self.transaction_repository)
139 }
140
141 async fn build_immutable_file_digest_mapper(
142 &mut self,
143 ) -> Result<Arc<dyn ImmutableFileDigestMapper>> {
144 let mapper = ImmutableFileDigestRepository::new(self.get_sqlite_connection().await?);
145
146 Ok(Arc::new(mapper))
147 }
148
149 pub async fn get_immutable_file_digest_mapper(
151 &mut self,
152 ) -> Result<Arc<dyn ImmutableFileDigestMapper>> {
153 get_dependency!(self.immutable_file_digest_mapper)
154 }
155
156 async fn build_signer_store(&mut self) -> Result<Arc<SignerStore>> {
157 let signer_store = Arc::new(SignerStore::new(self.get_sqlite_connection().await?));
158
159 Ok(signer_store)
160 }
161
162 pub async fn get_signer_store(&mut self) -> Result<Arc<SignerStore>> {
164 get_dependency!(self.signer_store)
165 }
166
167 async fn build_signed_entity_storer(&mut self) -> Result<Arc<dyn SignedEntityStorer>> {
168 let signed_entity_storer =
169 Arc::new(SignedEntityStore::new(self.get_sqlite_connection().await?));
170
171 Ok(signed_entity_storer)
172 }
173
174 pub async fn get_signed_entity_storer(&mut self) -> Result<Arc<dyn SignedEntityStorer>> {
176 get_dependency!(self.signed_entity_storer)
177 }
178
179 pub async fn create_signer_importer(
181 &mut self,
182 cexplorer_pools_url: &str,
183 ) -> Result<SignersImporter> {
184 let retriever = CExplorerSignerRetriever::new(
185 cexplorer_pools_url,
186 Some(Duration::from_secs(30)),
187 self.root_logger(),
188 )?;
189 let persister = self.get_signer_store().await?;
190
191 Ok(SignersImporter::new(
192 Arc::new(retriever),
193 persister,
194 self.root_logger(),
195 ))
196 }
197}