Skip to content

Commit 6505bc7

Browse files
committed
Add cardano_transactions_signing_config to Aggregator configuration
And pass them where needed to deduce a signed entity type from a time point. Also define a default configuration with: * `security_parameter`: 3000 * `step`: 90 End to end use more lax paramters (security param: 20, step: 15) since it's far faster and the last transactions we see included have a block number not that high (arround ~450).
1 parent e95a839 commit 6505bc7

File tree

7 files changed

+109
-14
lines changed

7 files changed

+109
-14
lines changed

mithril-aggregator/src/configuration.rs

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ use mithril_common::crypto_helper::ProtocolGenesisSigner;
55
use mithril_common::era::adapters::EraReaderAdapterType;
66
use mithril_doc::{Documenter, DocumenterDefault, StructDoc};
77
use serde::{Deserialize, Serialize};
8-
use std::collections::BTreeSet;
8+
use std::collections::{BTreeSet, HashMap};
99
use std::path::PathBuf;
1010
use std::str::FromStr;
1111

1212
use mithril_common::entities::{
13-
CompressionAlgorithm, HexEncodedGenesisVerificationKey, ProtocolParameters, SignedEntityType,
14-
SignedEntityTypeDiscriminants, TimePoint,
13+
CardanoTransactionsSigningConfig, CompressionAlgorithm, HexEncodedGenesisVerificationKey,
14+
ProtocolParameters, SignedEntityType, SignedEntityTypeDiscriminants, TimePoint,
1515
};
1616
use mithril_common::{CardanoNetwork, StdResult};
1717

@@ -156,6 +156,10 @@ pub struct Configuration {
156156

157157
/// Cardano transactions prover cache pool size
158158
pub cardano_transactions_prover_cache_pool_size: usize,
159+
160+
/// Cardano transactions signing configuration
161+
#[example = "`{ security_parameter: 3000, step: 90 }`"]
162+
pub cardano_transactions_signing_config: CardanoTransactionsSigningConfig,
159163
}
160164

161165
/// Uploader needed to copy the snapshot once computed.
@@ -229,6 +233,10 @@ impl Configuration {
229233
signer_importer_run_interval: 1,
230234
allow_unparsable_block: false,
231235
cardano_transactions_prover_cache_pool_size: 3,
236+
cardano_transactions_signing_config: CardanoTransactionsSigningConfig {
237+
security_parameter: 100,
238+
step: 15,
239+
},
232240
}
233241
}
234242

@@ -305,13 +313,19 @@ impl Configuration {
305313
let signed_entity_types = allowed_discriminants
306314
.into_iter()
307315
.map(|discriminant| {
308-
SignedEntityType::from_time_point(&discriminant, &self.network, time_point)
316+
SignedEntityType::from_time_point(
317+
&discriminant,
318+
&self.network,
319+
time_point,
320+
&self.cardano_transactions_signing_config,
321+
)
309322
})
310323
.collect();
311324

312325
Ok(signed_entity_types)
313326
}
314327
}
328+
315329
/// Default configuration with all the default values for configurations.
316330
#[derive(Debug, Clone, DocumenterDefault)]
317331
pub struct DefaultConfiguration {
@@ -365,6 +379,9 @@ pub struct DefaultConfiguration {
365379

366380
/// Cardano transactions prover cache pool size
367381
pub cardano_transactions_prover_cache_pool_size: u32,
382+
383+
/// Cardano transactions signing configuration
384+
pub cardano_transactions_signing_config: CardanoTransactionsSigningConfig,
368385
}
369386

370387
impl Default for DefaultConfiguration {
@@ -386,6 +403,10 @@ impl Default for DefaultConfiguration {
386403
signer_importer_run_interval: 720,
387404
allow_unparsable_block: "false".to_string(),
388405
cardano_transactions_prover_cache_pool_size: 10,
406+
cardano_transactions_signing_config: CardanoTransactionsSigningConfig {
407+
security_parameter: 3000,
408+
step: 90,
409+
},
389410
}
390411
}
391412
}
@@ -464,6 +485,23 @@ impl Source for DefaultConfiguration {
464485
"cardano_transactions_prover_cache_pool_size".to_string(),
465486
into_value(myself.cardano_transactions_prover_cache_pool_size),
466487
);
488+
result.insert(
489+
"cardano_transactions_signing_config".to_string(),
490+
into_value(HashMap::from([
491+
(
492+
"security_parameter".to_string(),
493+
ValueKind::from(
494+
myself
495+
.cardano_transactions_signing_config
496+
.security_parameter,
497+
),
498+
),
499+
(
500+
"step".to_string(),
501+
ValueKind::from(myself.cardano_transactions_signing_config.step),
502+
),
503+
])),
504+
);
467505

468506
Ok(result)
469507
}
@@ -623,7 +661,10 @@ mod test {
623661
#[test]
624662
fn test_list_allowed_signed_entity_types_with_specific_configuration() {
625663
let beacon = fake_data::beacon();
626-
let chain_point = ChainPoint::dummy();
664+
let chain_point = ChainPoint {
665+
block_number: 45,
666+
..ChainPoint::dummy()
667+
};
627668
let time_point = TimePoint::new(
628669
*beacon.epoch,
629670
beacon.immutable_file_number,
@@ -633,6 +674,10 @@ mod test {
633674
let config = Configuration {
634675
network: beacon.network.clone(),
635676
signed_entity_types: Some("CardanoStakeDistribution, CardanoTransactions".to_string()),
677+
cardano_transactions_signing_config: CardanoTransactionsSigningConfig {
678+
security_parameter: 0,
679+
step: 15,
680+
},
636681
..Configuration::new_sample()
637682
};
638683

@@ -650,4 +695,20 @@ mod test {
650695
signed_entity_types
651696
);
652697
}
698+
699+
#[test]
700+
fn can_build_config_with_ctx_signing_config_from_default_configuration() {
701+
#[derive(Debug, Deserialize)]
702+
struct TargetConfig {
703+
cardano_transactions_signing_config: CardanoTransactionsSigningConfig,
704+
}
705+
706+
let config_builder = config::Config::builder().add_source(DefaultConfiguration::default());
707+
let target: TargetConfig = config_builder.build().unwrap().try_deserialize().unwrap();
708+
709+
assert_eq!(
710+
target.cardano_transactions_signing_config,
711+
DefaultConfiguration::default().cardano_transactions_signing_config
712+
);
713+
}
653714
}

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,9 @@ impl DependenciesBuilder {
12191219
self.configuration.get_network().with_context(|| {
12201220
"Dependencies Builder can not get Cardano network while creating aggregator runner"
12211221
})?,
1222+
self.configuration
1223+
.cardano_transactions_signing_config
1224+
.clone(),
12221225
);
12231226
let runtime = AggregatorRuntime::new(
12241227
config,

mithril-aggregator/src/runtime/runner.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use std::sync::Arc;
55
use std::time::Duration;
66

77
use mithril_common::entities::{
8-
Certificate, CertificatePending, Epoch, ProtocolMessage, ProtocolMessagePartKey,
9-
SignedEntityType, Signer, TimePoint,
8+
CardanoTransactionsSigningConfig, Certificate, CertificatePending, Epoch, ProtocolMessage,
9+
ProtocolMessagePartKey, SignedEntityType, Signer, TimePoint,
1010
};
1111
use mithril_common::{CardanoNetwork, StdResult};
1212
use mithril_persistence::store::StakeStorer;
@@ -25,12 +25,23 @@ pub struct AggregatorConfig {
2525

2626
/// Cardano network
2727
pub network: CardanoNetwork,
28+
29+
/// Cardano transaction signing configuration
30+
pub cardano_transaction_signing_config: CardanoTransactionsSigningConfig,
2831
}
2932

3033
impl AggregatorConfig {
3134
/// Create a new instance of AggregatorConfig.
32-
pub fn new(interval: Duration, network: CardanoNetwork) -> Self {
33-
Self { interval, network }
35+
pub fn new(
36+
interval: Duration,
37+
network: CardanoNetwork,
38+
cardano_transaction_signing_config: CardanoTransactionsSigningConfig,
39+
) -> Self {
40+
Self {
41+
interval,
42+
network,
43+
cardano_transaction_signing_config,
44+
}
3445
}
3546
}
3647

mithril-aggregator/src/runtime/state_machine.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ impl AggregatorRuntime {
238238
&state.open_message.signed_entity_type.clone().into(),
239239
&self.config.network.to_string(),
240240
&last_time_point,
241+
&self.config.cardano_transaction_signing_config,
241242
);
242243
new_signed_entity_type != state.open_message.signed_entity_type
243244
};
@@ -406,7 +407,7 @@ mod tests {
406407
use mockall::predicate;
407408
use std::time::Duration;
408409

409-
use mithril_common::entities::{Epoch, SignedEntityType};
410+
use mithril_common::entities::{CardanoTransactionsSigningConfig, Epoch, SignedEntityType};
410411
use mithril_common::test_utils::fake_data;
411412

412413
use super::super::runner::MockAggregatorRunner;
@@ -417,7 +418,11 @@ mod tests {
417418
runner: MockAggregatorRunner,
418419
) -> AggregatorRuntime {
419420
AggregatorRuntime::new(
420-
AggregatorConfig::new(Duration::from_millis(20), fake_data::network()),
421+
AggregatorConfig::new(
422+
Duration::from_millis(20),
423+
fake_data::network(),
424+
CardanoTransactionsSigningConfig::dummy(),
425+
),
421426
init_state,
422427
Arc::new(runner),
423428
)

mithril-aggregator/src/tools/certificates_hash_migrator.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ impl CertificatesHashMigrator {
191191
#[cfg(test)]
192192
mod test {
193193
use mithril_common::entities::{
194-
ChainPoint, ImmutableFileNumber, SignedEntityType, SignedEntityTypeDiscriminants as Type,
195-
TimePoint,
194+
CardanoTransactionsSigningConfig, ChainPoint, ImmutableFileNumber, SignedEntityType,
195+
SignedEntityTypeDiscriminants as Type, TimePoint,
196196
};
197197
use mithril_common::test_utils::fake_data;
198198
use mithril_persistence::sqlite::{ConnectionBuilder, ConnectionOptions, SqliteConnection};
@@ -249,6 +249,7 @@ mod test {
249249
&signed_entity_type,
250250
&fake_data::network().to_string(),
251251
&time_point,
252+
&CardanoTransactionsSigningConfig::dummy(),
252253
),
253254
);
254255

mithril-aggregator/tests/test_extensions/aggregator_observer.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ use mithril_aggregator::{
55
services::{CertifierService, TickerService},
66
};
77
use mithril_common::{
8-
entities::{Epoch, SignedEntityType, SignedEntityTypeDiscriminants, TimePoint},
8+
entities::{
9+
CardanoTransactionsSigningConfig, Epoch, SignedEntityType, SignedEntityTypeDiscriminants,
10+
TimePoint,
11+
},
912
CardanoNetwork, StdResult, TimePointProvider,
1013
};
1114
use std::sync::Arc;
@@ -16,6 +19,7 @@ pub struct AggregatorObserver {
1619
time_point_provider: Arc<dyn TimePointProvider>,
1720
certifier_service: Arc<dyn CertifierService>,
1821
ticker_service: Arc<dyn TickerService>,
22+
cardano_transaction_signing_config: CardanoTransactionsSigningConfig,
1923
}
2024

2125
impl AggregatorObserver {
@@ -26,6 +30,10 @@ impl AggregatorObserver {
2630
time_point_provider: deps_builder.get_time_point_provider().await.unwrap(),
2731
certifier_service: deps_builder.get_certifier_service().await.unwrap(),
2832
ticker_service: deps_builder.get_ticker_service().await.unwrap(),
33+
cardano_transaction_signing_config: deps_builder
34+
.configuration
35+
.cardano_transactions_signing_config
36+
.clone(),
2937
}
3038
}
3139

@@ -82,6 +90,7 @@ impl AggregatorObserver {
8290
&discriminant,
8391
&self.network.to_string(),
8492
&time_point,
93+
&self.cardano_transaction_signing_config,
8594
))
8695
}
8796
}

mithril-test-lab/mithril-end-to-end/src/mithril/aggregator.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ impl Aggregator {
8686
),
8787
("CHAIN_OBSERVER_TYPE", aggregator_config.chain_observer_type),
8888
("CARDANO_TRANSACTIONS_PROVER_CACHE_POOL_SIZE", "5"),
89+
(
90+
"CARDANO_TRANSACTIONS_SIGNING_CONFIG__SECURITY_PARAMETER",
91+
"20",
92+
),
93+
("CARDANO_TRANSACTIONS_SIGNING_CONFIG__STEP", "15"),
8994
]);
9095
let args = vec![
9196
"--db-directory",

0 commit comments

Comments
 (0)