Skip to content

Commit 4b49084

Browse files
authored
Merge pull request #1796 from input-output-hk/ensemble/1762/preload-cardano-ctx-when-ctx-not-activated
Preload Cardano transactions based on Aggregator's Signing Capability
2 parents f04a629 + c8a210b commit 4b49084

File tree

17 files changed

+563
-57
lines changed

17 files changed

+563
-57
lines changed

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.5.35"
3+
version = "0.5.36"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ use warp::Filter;
1414
use mithril_common::{
1515
api_version::APIVersionProvider,
1616
cardano_block_scanner::{BlockScanner, CardanoBlockScanner},
17-
cardano_transactions_preloader::CardanoTransactionsPreloader,
17+
cardano_transactions_preloader::{
18+
CardanoTransactionsPreloader, CardanoTransactionsPreloaderActivation,
19+
},
1820
certificate_chain::{CertificateVerifier, MithrilCertificateVerifier},
1921
chain_observer::{CardanoCliRunner, ChainObserver, ChainObserverBuilder, FakeObserver},
2022
chain_reader::{ChainBlockReader, PallasChainReader},
@@ -26,7 +28,10 @@ use mithril_common::{
2628
CardanoImmutableDigester, DumbImmutableFileObserver, ImmutableDigester,
2729
ImmutableFileObserver, ImmutableFileSystemObserver,
2830
},
29-
entities::{CertificatePending, CompressionAlgorithm, Epoch, SignedEntityConfig},
31+
entities::{
32+
CertificatePending, CompressionAlgorithm, Epoch, SignedEntityConfig,
33+
SignedEntityTypeDiscriminants,
34+
},
3035
era::{
3136
adapters::{EraReaderAdapterBuilder, EraReaderDummyAdapter},
3237
EraChecker, EraMarker, EraReader, EraReaderAdapter, SupportedEra,
@@ -1337,6 +1342,10 @@ impl DependenciesBuilder {
13371342
pub async fn create_cardano_transactions_preloader(
13381343
&mut self,
13391344
) -> Result<Arc<CardanoTransactionsPreloader>> {
1345+
let activation = self
1346+
.get_signed_entity_config()?
1347+
.list_allowed_signed_entity_types_discriminants()
1348+
.contains(&SignedEntityTypeDiscriminants::CardanoTransactions);
13401349
let cardano_transactions_preloader = CardanoTransactionsPreloader::new(
13411350
self.get_signed_entity_lock().await?,
13421351
self.get_transactions_importer().await?,
@@ -1345,6 +1354,7 @@ impl DependenciesBuilder {
13451354
.security_parameter,
13461355
self.get_chain_observer().await?,
13471356
self.get_logger()?,
1357+
Arc::new(CardanoTransactionsPreloaderActivation::new(activation)),
13481358
);
13491359

13501360
Ok(Arc::new(cardano_transactions_preloader))
@@ -1493,3 +1503,48 @@ impl DependenciesBuilder {
14931503
self.drop_sqlite_connections().await;
14941504
}
14951505
}
1506+
1507+
#[cfg(test)]
1508+
mod tests {
1509+
use mithril_common::entities::SignedEntityTypeDiscriminants;
1510+
1511+
use super::*;
1512+
1513+
#[tokio::test]
1514+
async fn cardano_transactions_preloader_activated_with_cardano_transactions_signed_entity_type_in_configuration(
1515+
) {
1516+
assert_cardano_transactions_preloader_activation(
1517+
SignedEntityTypeDiscriminants::CardanoTransactions.to_string(),
1518+
true,
1519+
)
1520+
.await;
1521+
assert_cardano_transactions_preloader_activation(
1522+
SignedEntityTypeDiscriminants::MithrilStakeDistribution.to_string(),
1523+
false,
1524+
)
1525+
.await;
1526+
}
1527+
1528+
async fn assert_cardano_transactions_preloader_activation(
1529+
signed_entity_types: String,
1530+
expected_activation: bool,
1531+
) {
1532+
let configuration = Configuration {
1533+
signed_entity_types: Some(signed_entity_types),
1534+
..Configuration::new_sample()
1535+
};
1536+
let mut dep_builder = DependenciesBuilder::new(configuration);
1537+
1538+
let cardano_transactions_preloader = dep_builder
1539+
.create_cardano_transactions_preloader()
1540+
.await
1541+
.unwrap();
1542+
1543+
let is_activated = cardano_transactions_preloader.is_activated().await.unwrap();
1544+
assert_eq!(
1545+
expected_activation, is_activated,
1546+
"'is_activated' expected {}, but was {}",
1547+
expected_activation, is_activated
1548+
);
1549+
}
1550+
}

mithril-aggregator/src/http_server/routes/root_routes.rs

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,9 @@
11
use crate::DependencyContainer;
2-
use mithril_common::entities::SignedEntityTypeDiscriminants;
3-
use serde::{Deserialize, Serialize};
4-
use std::{collections::BTreeSet, sync::Arc};
2+
use std::sync::Arc;
53
use warp::Filter;
64

75
use super::middlewares;
86

9-
#[derive(Debug, Serialize, Deserialize, PartialEq)]
10-
pub struct RootRouteMessage {
11-
pub open_api_version: String,
12-
pub documentation_url: String,
13-
pub capabilities: AggregatorCapabilities,
14-
}
15-
16-
#[derive(Debug, Serialize, Deserialize, PartialEq)]
17-
pub struct AggregatorCapabilities {
18-
pub signed_entity_types: BTreeSet<SignedEntityTypeDiscriminants>,
19-
#[serde(skip_serializing_if = "Option::is_none")]
20-
pub cardano_transactions_prover: Option<CardanoTransactionsProverCapabilities>,
21-
}
22-
23-
#[derive(Debug, Serialize, Deserialize, PartialEq)]
24-
pub struct CardanoTransactionsProverCapabilities {
25-
max_hashes_allowed_by_request: usize,
26-
}
27-
287
pub fn routes(
298
dependency_manager: Arc<DependencyContainer>,
309
) -> impl Filter<Extract = (impl warp::Reply,), Error = warp::Rejection> + Clone {
@@ -54,11 +33,11 @@ mod handlers {
5433

5534
use mithril_common::api_version::APIVersionProvider;
5635
use mithril_common::entities::{SignedEntityConfig, SignedEntityTypeDiscriminants};
36+
use mithril_common::messages::{
37+
AggregatorCapabilities, AggregatorFeaturesMessage, CardanoTransactionsProverCapabilities,
38+
};
5739

5840
use crate::http_server::routes::reply::json;
59-
use crate::http_server::routes::root_routes::{
60-
AggregatorCapabilities, CardanoTransactionsProverCapabilities, RootRouteMessage,
61-
};
6241
use crate::{unwrap_to_internal_server_error, Configuration};
6342

6443
/// Root
@@ -85,7 +64,7 @@ mod handlers {
8564
});
8665

8766
Ok(json(
88-
&RootRouteMessage {
67+
&AggregatorFeaturesMessage {
8968
open_api_version: open_api_version.to_string(),
9069
documentation_url: env!("CARGO_PKG_HOMEPAGE").to_string(),
9170
capabilities: AggregatorCapabilities {
@@ -102,6 +81,10 @@ mod handlers {
10281
mod tests {
10382
use crate::http_server::SERVER_BASE_PATH;
10483
use crate::{initialize_dependencies, DependencyContainer};
84+
use mithril_common::entities::SignedEntityTypeDiscriminants;
85+
use mithril_common::messages::{
86+
AggregatorCapabilities, AggregatorFeaturesMessage, CardanoTransactionsProverCapabilities,
87+
};
10588
use mithril_common::test_utils::apispec::APISpec;
10689
use serde_json::Value::Null;
10790
use std::collections::BTreeSet;
@@ -151,13 +134,14 @@ mod tests {
151134
.reply(&setup_router(Arc::new(dependency_manager)))
152135
.await;
153136

154-
let response_body: RootRouteMessage = serde_json::from_slice(response.body()).unwrap();
137+
let response_body: AggregatorFeaturesMessage =
138+
serde_json::from_slice(response.body()).unwrap();
155139

156140
assert_eq!(response.status(), StatusCode::OK);
157141

158142
assert_eq!(
159143
response_body,
160-
RootRouteMessage {
144+
AggregatorFeaturesMessage {
161145
open_api_version: expected_open_api_version,
162146
documentation_url: env!("CARGO_PKG_HOMEPAGE").to_string(),
163147
capabilities: AggregatorCapabilities {
@@ -202,7 +186,8 @@ mod tests {
202186
.reply(&setup_router(Arc::new(dependency_manager)))
203187
.await;
204188

205-
let response_body: RootRouteMessage = serde_json::from_slice(response.body()).unwrap();
189+
let response_body: AggregatorFeaturesMessage =
190+
serde_json::from_slice(response.body()).unwrap();
206191

207192
assert_eq!(response.status(), StatusCode::OK);
208193

mithril-common/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-common"
3-
version = "0.4.26"
3+
version = "0.4.27"
44
description = "Common types, interfaces, and utilities for Mithril nodes."
55
authors = { workspace = true }
66
edition = { workspace = true }

0 commit comments

Comments
 (0)