Skip to content

Commit 30f6152

Browse files
authored
Merge pull request #711 from input-output-hk/ensemble/708-create-era-checker
Create Era Checker
2 parents 569f728 + c09dc2a commit 30f6152

File tree

14 files changed

+129
-19
lines changed

14 files changed

+129
-19
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.2.11"
3+
version = "0.2.12"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/command_args.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use mithril_common::{
1515
CardanoImmutableDigester, ImmutableFileSystemObserver,
1616
},
1717
entities::{Epoch, HexEncodedGenesisSecretKey},
18+
era::{EraChecker, SupportedEra},
1819
store::{adapter::SQLiteAdapter, StakeStore},
1920
BeaconProviderImpl,
2021
};
@@ -397,6 +398,10 @@ impl ServeCommand {
397398
ongoing_snapshot_directory,
398399
));
399400

401+
// TODO: use EraReader when it is implemented to retrieve current era
402+
let current_era = SupportedEra::Thales;
403+
let era_checker = Arc::new(EraChecker::new(current_era));
404+
400405
// Init dependency manager
401406
let dependency_manager = DependencyManager {
402407
config: config.clone(),
@@ -418,6 +423,7 @@ impl ServeCommand {
418423
genesis_verifier,
419424
signer_registerer: signer_registerer.clone(),
420425
signer_registration_round_opener: signer_registerer.clone(),
426+
era_checker: era_checker.clone(),
421427
};
422428
let dependency_manager = Arc::new(dependency_manager);
423429

mithril-aggregator/src/dependency.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
use mithril_common::certificate_chain::CertificateVerifier;
2-
use mithril_common::chain_observer::ChainObserver;
3-
use mithril_common::crypto_helper::ProtocolGenesisVerifier;
4-
use mithril_common::digesters::{ImmutableDigester, ImmutableFileObserver};
5-
use mithril_common::entities::{
6-
Certificate, Epoch, ProtocolParameters, Signer, SignerWithStake, StakeDistribution,
1+
use mithril_common::{
2+
certificate_chain::CertificateVerifier,
3+
chain_observer::ChainObserver,
4+
crypto_helper::ProtocolGenesisVerifier,
5+
digesters::{ImmutableDigester, ImmutableFileObserver},
6+
entities::{
7+
Certificate, Epoch, ProtocolParameters, Signer, SignerWithStake, StakeDistribution,
8+
},
9+
era::EraChecker,
10+
store::{StakeStore, StakeStorer},
11+
BeaconProvider,
712
};
8-
use mithril_common::store::{StakeStore, StakeStorer};
9-
use mithril_common::BeaconProvider;
1013

11-
use std::collections::HashMap;
12-
use std::sync::Arc;
14+
use std::{collections::HashMap, sync::Arc};
1315
use tokio::sync::RwLock;
1416

1517
use crate::multi_signer::MultiSigner;
@@ -82,6 +84,9 @@ pub struct DependencyManager {
8284

8385
/// Signer registration round opener service
8486
pub signer_registration_round_opener: Arc<dyn SignerRegistrationRoundOpener>,
87+
88+
/// Era checker service
89+
pub era_checker: Arc<EraChecker>,
8590
}
8691

8792
#[doc(hidden)]
@@ -264,6 +269,7 @@ pub mod tests {
264269
chain_observer::FakeObserver,
265270
crypto_helper::{key_encode_hex, ProtocolGenesisSigner},
266271
digesters::{DumbImmutableDigester, DumbImmutableFileObserver},
272+
era::{EraChecker, SupportedEra},
267273
store::{adapter::MemoryAdapter, StakeStore},
268274
test_utils::fake_data,
269275
BeaconProviderImpl, CardanoNetwork,
@@ -341,6 +347,7 @@ pub mod tests {
341347
chain_observer.clone(),
342348
verification_key_store.clone(),
343349
));
350+
let era_checker = Arc::new(EraChecker::new(SupportedEra::dummy()));
344351

345352
let dependency_manager = DependencyManager {
346353
config,
@@ -362,6 +369,7 @@ pub mod tests {
362369
genesis_verifier,
363370
signer_registerer: signer_registerer.clone(),
364371
signer_registration_round_opener: signer_registerer,
372+
era_checker,
365373
};
366374

367375
let config = AggregatorConfig::new(

mithril-aggregator/tests/test_extensions/dependency.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use mithril_common::chain_observer::FakeObserver;
99
use mithril_common::crypto_helper::{key_encode_hex, ProtocolGenesisSigner};
1010
use mithril_common::digesters::{DumbImmutableDigester, DumbImmutableFileObserver};
1111
use mithril_common::entities::ProtocolParameters;
12+
use mithril_common::era::{EraChecker, SupportedEra};
1213
use mithril_common::store::adapter::MemoryAdapter;
1314
use mithril_common::store::StakeStore;
1415
use mithril_common::{BeaconProviderImpl, CardanoNetwork};
@@ -90,6 +91,7 @@ pub async fn initialize_dependencies(
9091
chain_observer.clone(),
9192
verification_key_store.clone(),
9293
));
94+
let era_checker = Arc::new(EraChecker::new(SupportedEra::dummy()));
9395

9496
let dependency_manager = DependencyManager {
9597
config,
@@ -111,6 +113,7 @@ pub async fn initialize_dependencies(
111113
genesis_verifier,
112114
signer_registerer: signer_registerer.clone(),
113115
signer_registration_round_opener: signer_registerer,
116+
era_checker,
114117
};
115118

116119
let config = AggregatorConfig::new(

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.2.10"
3+
version = "0.2.11"
44
authors = { workspace = true }
55
edition = { workspace = true }
66
documentation = { workspace = true }
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use std::sync::RwLock;
2+
3+
use super::SupportedEra;
4+
5+
/// EraChecker allows the verification of the current era
6+
pub struct EraChecker {
7+
current_era: RwLock<SupportedEra>,
8+
}
9+
10+
impl EraChecker {
11+
/// Era checker factory
12+
pub fn new(era: SupportedEra) -> Self {
13+
Self {
14+
current_era: RwLock::new(era),
15+
}
16+
}
17+
18+
/// Retrieve the current era
19+
pub fn current_era(&self) -> SupportedEra {
20+
self.current_era.read().unwrap().to_owned()
21+
}
22+
23+
/// Change the current era
24+
pub fn change_era(&self, new_era: SupportedEra) {
25+
let mut era = self.current_era.write().unwrap();
26+
*era = new_era;
27+
}
28+
29+
/// Check if an era is active
30+
pub fn is_era_active(&self, era: SupportedEra) -> bool {
31+
self.current_era() == era
32+
}
33+
}
34+
35+
#[cfg(test)]
36+
mod tests {
37+
use super::*;
38+
39+
#[test]
40+
fn can_change_era() {
41+
let expected_era = SupportedEra::dummy();
42+
let era_checker = EraChecker::new(expected_era);
43+
era_checker.change_era(expected_era);
44+
45+
assert_eq!(expected_era, era_checker.current_era());
46+
}
47+
48+
#[test]
49+
fn is_era_active_panics_when_current_era_not_set() {
50+
let expected_era = SupportedEra::dummy();
51+
let era_checker = EraChecker::new(expected_era);
52+
era_checker.is_era_active(expected_era);
53+
}
54+
}

mithril-common/src/era/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//! The module used for handling eras
2+
3+
mod era_checker;
4+
mod supported_era;
5+
6+
pub use era_checker::EraChecker;
7+
pub use supported_era::SupportedEra;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/// The era that the software is running or will run
2+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3+
pub enum SupportedEra {
4+
/// Thales era
5+
Thales,
6+
}
7+
8+
impl SupportedEra {
9+
/// Retrieve a dummy era (for test only)
10+
#[cfg(any(test, feature = "test_only"))]
11+
pub fn dummy() -> Self {
12+
Self::Thales
13+
}
14+
}

mithril-common/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub mod crypto_helper;
1717
pub mod database;
1818
pub mod digesters;
1919
pub mod entities;
20+
pub mod era;
2021
pub mod messages;
2122
pub mod sqlite;
2223
pub mod store;

0 commit comments

Comments
 (0)