Skip to content

Commit 43c9c72

Browse files
committed
refactor(common, protocol-config, signer): switch from Hashmap to a Struct to represent SignedEntityConfiguration to avoid inconsistent data
1 parent defe21d commit 43c9c72

File tree

9 files changed

+57
-142
lines changed

9 files changed

+57
-142
lines changed

internal/mithril-protocol-config/src/http_client/http_impl.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
33
use anyhow::anyhow;
44
use async_trait::async_trait;
5-
use std::{collections::HashMap, sync::Arc, time::Duration};
5+
use std::{sync::Arc, time::Duration};
66

7+
use mithril_common::StdResult;
78
use mithril_common::api_version::APIVersionProvider;
8-
use mithril_common::{StdResult, entities::SignedEntityTypeDiscriminants};
99

1010
use crate::{
1111
aggregator_client::{AggregatorClient, AggregatorHTTPClient, HTTP_REQUEST_TIMEOUT_DURATION},
@@ -48,15 +48,14 @@ impl MithrilNetworkConfigurationProvider for HttpMithrilNetworkConfigurationProv
4848
let aggregator_features = self.aggregator_client.retrieve_aggregator_features().await?;
4949
let available_signed_entity_types = aggregator_features.capabilities.signed_entity_types;
5050

51-
let mut signed_entity_types_config = HashMap::new();
52-
signed_entity_types_config.insert(
53-
SignedEntityTypeDiscriminants::CardanoTransactions,
54-
SignedEntityTypeConfiguration::CardanoTransactions(
55-
epoch_settings.cardano_transactions_signing_config.ok_or_else(|| {
56-
anyhow!("Cardano transactions signing config is missing in epoch settings")
57-
})?,
58-
),
59-
);
51+
let cardano_transactions =
52+
epoch_settings.cardano_transactions_signing_config.ok_or_else(|| {
53+
anyhow!("Cardano transactions signing config is missing in epoch settings")
54+
})?;
55+
56+
let signed_entity_types_config = SignedEntityTypeConfiguration {
57+
cardano_transactions: Some(cardano_transactions),
58+
};
6059

6160
Ok(MithrilNetworkConfiguration {
6261
epoch: epoch_settings.epoch,
Lines changed: 4 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Model definitions for Mithril Protocol Configuration.
22
3-
use std::collections::{BTreeSet, HashMap};
3+
use std::collections::BTreeSet;
44

55
use mithril_common::entities::{
66
CardanoTransactionsSigningConfig, Epoch, ProtocolParameters, SignedEntityTypeDiscriminants,
@@ -9,9 +9,9 @@ use mithril_common::entities::{
99
#[derive(PartialEq, Clone, Debug)]
1010

1111
/// Custom configuration for a signed entity type
12-
pub enum SignedEntityTypeConfiguration {
12+
pub struct SignedEntityTypeConfiguration {
1313
/// Cardano Transactions
14-
CardanoTransactions(CardanoTransactionsSigningConfig),
14+
pub cardano_transactions: Option<CardanoTransactionsSigningConfig>,
1515
}
1616

1717
/// A Mithril network configuration
@@ -27,70 +27,5 @@ pub struct MithrilNetworkConfiguration {
2727
pub available_signed_entity_types: BTreeSet<SignedEntityTypeDiscriminants>,
2828

2929
/// Custom configurations for signed entity types
30-
pub signed_entity_types_config:
31-
HashMap<SignedEntityTypeDiscriminants, SignedEntityTypeConfiguration>,
32-
}
33-
34-
impl MithrilNetworkConfiguration {
35-
/// Get the Cardano Transactions signing configuration
36-
pub fn get_cardano_transactions_signing_config(
37-
&self,
38-
) -> Option<CardanoTransactionsSigningConfig> {
39-
match self
40-
.signed_entity_types_config
41-
.get(&SignedEntityTypeDiscriminants::CardanoTransactions)
42-
{
43-
Some(SignedEntityTypeConfiguration::CardanoTransactions(config)) => {
44-
Some(config.clone())
45-
}
46-
_ => None,
47-
}
48-
}
49-
}
50-
51-
#[cfg(test)]
52-
mod tests {
53-
use std::collections::HashMap;
54-
55-
use mithril_common::{
56-
entities::{BlockNumber, CardanoTransactionsSigningConfig, SignedEntityTypeDiscriminants},
57-
test::double::Dummy,
58-
};
59-
60-
use crate::model::{MithrilNetworkConfiguration, SignedEntityTypeConfiguration};
61-
62-
#[test]
63-
fn test_get_cardano_transactions_signing_config_should_return_config_if_cardano_transactions_exist()
64-
{
65-
let config = MithrilNetworkConfiguration {
66-
signed_entity_types_config: HashMap::from([(
67-
SignedEntityTypeDiscriminants::CardanoTransactions,
68-
SignedEntityTypeConfiguration::CardanoTransactions(
69-
CardanoTransactionsSigningConfig {
70-
security_parameter: BlockNumber(42),
71-
step: BlockNumber(26),
72-
},
73-
),
74-
)]),
75-
..Dummy::dummy()
76-
};
77-
78-
let result = config.get_cardano_transactions_signing_config();
79-
assert!(result.is_some());
80-
let unwrapped_result = result.unwrap();
81-
assert_eq!(unwrapped_result.security_parameter, BlockNumber(42));
82-
assert_eq!(unwrapped_result.step, BlockNumber(26));
83-
}
84-
85-
#[test]
86-
fn test_get_cardano_transactions_signing_config_should_return_none_if_there_is_no_cardano_transactions()
87-
{
88-
let config = MithrilNetworkConfiguration {
89-
signed_entity_types_config: HashMap::new(),
90-
..Dummy::dummy()
91-
};
92-
93-
let result = config.get_cardano_transactions_signing_config();
94-
assert!(result.is_none());
95-
}
30+
pub signed_entity_types_config: SignedEntityTypeConfiguration,
9631
}

internal/mithril-protocol-config/src/test/double/configuration_provider.rs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
//! provides test doubles for MithrilNetworkConfigurationProvider
2-
use std::{
3-
collections::{BTreeSet, HashMap},
4-
sync::Arc,
5-
};
2+
use std::{collections::BTreeSet, sync::Arc};
63

74
use tokio::sync::RwLock;
85

@@ -26,8 +23,7 @@ pub struct FakeMithrilNetworkConfigurationProvider {
2623
pub available_signed_entity_types: RwLock<BTreeSet<SignedEntityTypeDiscriminants>>,
2724

2825
/// The configuration for each signed entity type
29-
pub signed_entity_types_config:
30-
HashMap<SignedEntityTypeDiscriminants, SignedEntityTypeConfiguration>,
26+
pub signed_entity_types_config: SignedEntityTypeConfiguration,
3127

3228
ticker_service: Arc<MithrilTickerService>,
3329
}
@@ -37,10 +33,7 @@ impl FakeMithrilNetworkConfigurationProvider {
3733
pub fn new(
3834
signer_registration_protocol_parameters: ProtocolParameters,
3935
available_signed_entity_types: BTreeSet<SignedEntityTypeDiscriminants>,
40-
signed_entity_types_config: HashMap<
41-
SignedEntityTypeDiscriminants,
42-
SignedEntityTypeConfiguration,
43-
>,
36+
signed_entity_types_config: SignedEntityTypeConfiguration,
4437
ticker_service: Arc<MithrilTickerService>,
4538
) -> Self {
4639
Self {
@@ -81,10 +74,7 @@ impl MithrilNetworkConfigurationProvider for FakeMithrilNetworkConfigurationProv
8174

8275
#[cfg(test)]
8376
mod tests {
84-
use std::{
85-
collections::{BTreeSet, HashMap},
86-
sync::Arc,
87-
};
77+
use std::{collections::BTreeSet, sync::Arc};
8878

8979
use mithril_common::{
9080
entities::{
@@ -128,13 +118,12 @@ mod tests {
128118
SignedEntityTypeDiscriminants::MithrilStakeDistribution,
129119
SignedEntityTypeDiscriminants::CardanoTransactions,
130120
]);
131-
let signed_entity_types_config = HashMap::from([(
132-
SignedEntityTypeDiscriminants::CardanoTransactions,
133-
SignedEntityTypeConfiguration::CardanoTransactions(CardanoTransactionsSigningConfig {
121+
let signed_entity_types_config = SignedEntityTypeConfiguration {
122+
cardano_transactions: Some(CardanoTransactionsSigningConfig {
134123
security_parameter: BlockNumber(12),
135124
step: BlockNumber(10),
136125
}),
137-
)]);
126+
};
138127

139128
let mithril_network_configuration_provider = FakeMithrilNetworkConfigurationProvider::new(
140129
signer_registration_protocol_parameters.clone(),
@@ -151,11 +140,7 @@ mod tests {
151140
assert_eq!(actual_config.epoch, Epoch(1));
152141
assert_eq!(
153142
actual_config.signer_registration_protocol_parameters,
154-
ProtocolParameters {
155-
k: 2,
156-
m: 3,
157-
phi_f: 0.5
158-
}
143+
signer_registration_protocol_parameters
159144
);
160145
assert_eq!(
161146
actual_config.available_signed_entity_types,

internal/mithril-protocol-config/src/test/double/dummies.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::{BTreeSet, HashMap};
1+
use std::collections::BTreeSet;
22

33
use mithril_common::{
44
entities::{CardanoTransactionsSigningConfig, SignedEntityTypeDiscriminants},
@@ -15,13 +15,9 @@ impl Dummy for MithrilNetworkConfiguration {
1515
let mut available_signed_entity_types = BTreeSet::new();
1616

1717
available_signed_entity_types.insert(SignedEntityTypeDiscriminants::CardanoTransactions);
18-
let mut signed_entity_types_config = HashMap::new();
19-
signed_entity_types_config.insert(
20-
SignedEntityTypeDiscriminants::CardanoTransactions,
21-
SignedEntityTypeConfiguration::CardanoTransactions(
22-
CardanoTransactionsSigningConfig::dummy(),
23-
),
24-
);
18+
let signed_entity_types_config = SignedEntityTypeConfiguration {
19+
cardano_transactions: Some(CardanoTransactionsSigningConfig::dummy()),
20+
};
2521

2622
Self {
2723
epoch: beacon.epoch,

mithril-common/src/entities/signed_entity_type.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ const ENTITY_TYPE_CARDANO_DATABASE: usize = 4;
4949
PartialOrd,
5050
Ord,
5151
EnumIter,
52-
Hash,
5352
))]
5453
pub enum SignedEntityType {
5554
/// Mithril stake distribution

mithril-signer/src/runtime/runner.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ mod tests {
360360
use mithril_protocol_config::model::SignedEntityTypeConfiguration;
361361
use mockall::mock;
362362
use mockall::predicate::eq;
363-
use std::collections::{BTreeSet, HashMap};
363+
use std::collections::BTreeSet;
364364
use std::{path::Path, sync::Arc};
365365
use tokio::sync::RwLock;
366366

@@ -545,12 +545,9 @@ mod tests {
545545
let network_configuration_service = Arc::new(FakeMithrilNetworkConfigurationProvider::new(
546546
ProtocolParameters::new(1000, 100, 0.1234),
547547
SignedEntityTypeDiscriminants::all(),
548-
HashMap::from([(
549-
SignedEntityTypeDiscriminants::CardanoTransactions,
550-
SignedEntityTypeConfiguration::CardanoTransactions(
551-
CardanoTransactionsSigningConfig::dummy(),
552-
),
553-
)]),
548+
SignedEntityTypeConfiguration {
549+
cardano_transactions: Some(CardanoTransactionsSigningConfig::dummy()),
550+
},
554551
ticker_service.clone(),
555552
));
556553

mithril-signer/src/runtime/state_machine.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -489,9 +489,14 @@ impl StateMachine {
489489
mod tests {
490490
use anyhow::anyhow;
491491
use chrono::DateTime;
492-
use mithril_protocol_config::model::MithrilNetworkConfiguration;
493-
494-
use mithril_common::entities::{ChainPoint, Epoch, ProtocolMessage, SignedEntityType};
492+
use mithril_protocol_config::model::{
493+
MithrilNetworkConfiguration, SignedEntityTypeConfiguration,
494+
};
495+
496+
use mithril_common::entities::{
497+
CardanoTransactionsSigningConfig, ChainPoint, Epoch, ProtocolMessage, SignedEntityType,
498+
SignedEntityTypeDiscriminants,
499+
};
495500
use mithril_common::test::double::{Dummy, fake_data};
496501

497502
use crate::SignerEpochSettings;
@@ -565,8 +570,10 @@ mod tests {
565570
Ok(MithrilNetworkConfiguration {
566571
epoch: Epoch(999),
567572
signer_registration_protocol_parameters: fake_data::protocol_parameters(),
568-
available_signed_entity_types: Default::default(),
569-
signed_entity_types_config: Default::default(),
573+
available_signed_entity_types: SignedEntityTypeDiscriminants::all(),
574+
signed_entity_types_config: SignedEntityTypeConfiguration {
575+
cardano_transactions: Some(CardanoTransactionsSigningConfig::dummy()),
576+
},
570577
})
571578
});
572579
runner.expect_get_current_time_point().once().returning(|| {

mithril-signer/src/services/epoch_service.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ impl EpochService for MithrilEpochService {
192192
mithril_network_configuration.available_signed_entity_types.clone();
193193

194194
let cardano_transactions_signing_config = mithril_network_configuration
195-
.get_cardano_transactions_signing_config()
195+
.signed_entity_types_config
196+
.cardano_transactions
196197
.clone();
197198

198199
self.epoch_data = Some(EpochData {
@@ -424,7 +425,6 @@ pub(crate) mod mock_epoch_service {
424425
#[cfg(test)]
425426
mod tests {
426427
use mithril_protocol_config::model::SignedEntityTypeConfiguration;
427-
use std::collections::HashMap;
428428
use std::sync::Arc;
429429
use tokio::sync::RwLock;
430430

@@ -727,7 +727,9 @@ mod tests {
727727

728728
// Check cardano_transactions_signing_config
729729
assert_eq!(
730-
mithril_network_configuration.get_cardano_transactions_signing_config(),
730+
mithril_network_configuration
731+
.signed_entity_types_config
732+
.cardano_transactions,
731733
*service.cardano_transactions_signing_config().unwrap()
732734
);
733735
}
@@ -895,7 +897,9 @@ mod tests {
895897
fake_data::beacon().epoch,
896898
MithrilNetworkConfiguration {
897899
available_signed_entity_types: BTreeSet::new(),
898-
signed_entity_types_config: HashMap::new(),
900+
signed_entity_types_config: SignedEntityTypeConfiguration {
901+
cardano_transactions: None,
902+
},
899903
..MithrilNetworkConfiguration::dummy()
900904
},
901905
current_signers,
@@ -914,13 +918,9 @@ mod tests {
914918
let allowed_discriminants =
915919
BTreeSet::from([SignedEntityTypeDiscriminants::CardanoImmutableFilesFull]);
916920

917-
let mut signed_entity_types_config = HashMap::new();
918-
signed_entity_types_config.insert(
919-
SignedEntityTypeDiscriminants::CardanoTransactions,
920-
SignedEntityTypeConfiguration::CardanoTransactions(
921-
CardanoTransactionsSigningConfig::dummy(),
922-
),
923-
);
921+
let signed_entity_types_config = SignedEntityTypeConfiguration {
922+
cardano_transactions: Some(CardanoTransactionsSigningConfig::dummy()),
923+
};
924924

925925
// Signers
926926
let signers = fake_data::signers(5);

mithril-signer/tests/test_extensions/state_machine_tester.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use prometheus_parse::Value;
99
use slog::Drain;
1010
use slog_scope::debug;
1111
use std::{
12-
collections::{BTreeMap, BTreeSet, HashMap},
12+
collections::{BTreeMap, BTreeSet},
1313
fmt::Debug,
1414
ops::RangeInclusive,
1515
path::Path,
@@ -177,12 +177,9 @@ impl StateMachineTester {
177177
let network_configuration_service = Arc::new(FakeMithrilNetworkConfigurationProvider::new(
178178
fake_data::protocol_parameters(),
179179
SignedEntityTypeDiscriminants::all(),
180-
HashMap::from([(
181-
SignedEntityTypeDiscriminants::CardanoTransactions,
182-
SignedEntityTypeConfiguration::CardanoTransactions(
183-
cardano_transactions_signing_config.clone(),
184-
),
185-
)]),
180+
SignedEntityTypeConfiguration {
181+
cardano_transactions: Some(cardano_transactions_signing_config.clone()),
182+
},
186183
ticker_service.clone(),
187184
));
188185

0 commit comments

Comments
 (0)