Skip to content

Commit 29b7c45

Browse files
committed
refactor: move transaction prover cache computation in artifact builder
1 parent 9dfe7ce commit 29b7c45

File tree

3 files changed

+37
-29
lines changed

3 files changed

+37
-29
lines changed

mithril-aggregator/src/artifact_builder/cardano_transactions.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
use std::sync::Arc;
2+
13
use async_trait::async_trait;
24

5+
use crate::services::ProverService;
6+
37
use super::ArtifactBuilder;
48
use anyhow::{anyhow, Context};
59
use mithril_common::{
@@ -11,12 +15,14 @@ use mithril_common::{
1115
};
1216

1317
/// A [CardanoTransactionsArtifact] builder
14-
pub struct CardanoTransactionsArtifactBuilder {}
18+
pub struct CardanoTransactionsArtifactBuilder {
19+
prover_service: Arc<dyn ProverService>,
20+
}
1521

1622
impl CardanoTransactionsArtifactBuilder {
1723
/// CardanoTransactions artifact builder factory
18-
pub fn new() -> Self {
19-
Self {}
24+
pub fn new(prover_service: Arc<dyn ProverService>) -> Self {
25+
Self { prover_service }
2026
}
2127
}
2228

@@ -41,6 +47,7 @@ impl ArtifactBuilder<CardanoDbBeacon, CardanoTransactionsSnapshot>
4147
SignedEntityType::CardanoTransactions(beacon.clone())
4248
)
4349
})?;
50+
self.prover_service.compute_cache(&beacon).await?;
4451

4552
Ok(CardanoTransactionsSnapshot::new(
4653
merkle_root.to_string(),
@@ -51,10 +58,9 @@ impl ArtifactBuilder<CardanoDbBeacon, CardanoTransactionsSnapshot>
5158

5259
#[cfg(test)]
5360
mod tests {
54-
use mithril_common::{
55-
entities::ProtocolMessage,
56-
test_utils::fake_data::{self},
57-
};
61+
use mithril_common::{entities::ProtocolMessage, test_utils::fake_data};
62+
63+
use crate::services::MockProverService;
5864

5965
use super::*;
6066

@@ -72,7 +78,10 @@ mod tests {
7278
};
7379

7480
let beacon = certificate.as_cardano_db_beacon();
75-
let cardano_transaction_artifact_builder = CardanoTransactionsArtifactBuilder::new();
81+
let mut mock_prover = MockProverService::new();
82+
mock_prover.expect_compute_cache().returning(|_| Ok(()));
83+
let cardano_transaction_artifact_builder =
84+
CardanoTransactionsArtifactBuilder::new(Arc::new(mock_prover));
7685
let artifact = cardano_transaction_artifact_builder
7786
.compute_artifact(beacon.clone(), &certificate)
7887
.await
@@ -90,7 +99,10 @@ mod tests {
9099
certificate
91100
};
92101

93-
let cardano_transaction_artifact_builder = CardanoTransactionsArtifactBuilder::new();
102+
let mut mock_prover = MockProverService::new();
103+
mock_prover.expect_compute_cache().returning(|_| Ok(()));
104+
let cardano_transaction_artifact_builder =
105+
CardanoTransactionsArtifactBuilder::new(Arc::new(mock_prover));
94106
cardano_transaction_artifact_builder
95107
.compute_artifact(CardanoDbBeacon::default(), &certificate)
96108
.await

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,15 +1104,29 @@ impl DependenciesBuilder {
11041104
snapshot_uploader,
11051105
self.configuration.snapshot_compression_algorithm,
11061106
));
1107-
let cardano_transactions_artifact_builder =
1108-
Arc::new(CardanoTransactionsArtifactBuilder::new());
1107+
let prover_service = self.get_prover_service().await?;
1108+
let cardano_transactions_artifact_builder = Arc::new(
1109+
CardanoTransactionsArtifactBuilder::new(prover_service.clone()),
1110+
);
11091111
let signed_entity_service = Arc::new(MithrilSignedEntityService::new(
11101112
signed_entity_storer,
11111113
mithril_stake_distribution_artifact_builder,
11121114
cardano_immutable_files_full_artifact_builder,
11131115
cardano_transactions_artifact_builder,
11141116
));
11151117

1118+
// Compute the cache pool for prover service
1119+
// This is done here to avoid circular dependencies between the prover service and the signed entity service
1120+
// TODO: Make this part of a warmup phase of the aggregator?
1121+
if let Some(signed_entity) = signed_entity_service
1122+
.get_last_cardano_transaction_snapshot()
1123+
.await?
1124+
{
1125+
prover_service
1126+
.compute_cache(&signed_entity.artifact.beacon)
1127+
.await?;
1128+
}
1129+
11161130
Ok(signed_entity_service)
11171131
}
11181132

@@ -1378,17 +1392,6 @@ impl DependenciesBuilder {
13781392
logger,
13791393
);
13801394

1381-
// Compute the cache pool for prover service
1382-
let signed_entity_service = self.get_signed_entity_service().await?;
1383-
if let Some(signed_entity) = signed_entity_service
1384-
.get_last_cardano_transaction_snapshot()
1385-
.await?
1386-
{
1387-
prover_service
1388-
.compute_cache(&signed_entity.artifact.beacon)
1389-
.await?;
1390-
}
1391-
13921395
Ok(Arc::new(prover_service))
13931396
}
13941397

mithril-aggregator/src/runtime/runner.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -399,13 +399,6 @@ impl AggregatorRunnerTrait for AggregatorRunner {
399399
)
400400
})?;
401401

402-
if let SignedEntityType::CardanoTransactions(up_to_beacon) = signed_entity_type {
403-
self.dependencies
404-
.prover_service
405-
.compute_cache(up_to_beacon)
406-
.await?;
407-
}
408-
409402
Ok(())
410403
}
411404

0 commit comments

Comments
 (0)