Skip to content

Commit a735684

Browse files
authored
Merge pull request #2775 from input-output-hk/djo/2759/signer/refactor-aggregator-client
refactor(signer): split signer aggregator client into several small business services
2 parents 161e0fc + 951dd5a commit a735684

File tree

25 files changed

+288
-335
lines changed

25 files changed

+288
-335
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-signer/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-signer"
3-
version = "0.2.277"
3+
version = "0.2.278"
44
description = "A Mithril Signer"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-signer/src/dependency_injection/builder.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,6 @@ impl<'a> DependenciesBuilder<'a> {
513513

514514
let services = SignerDependencyContainer {
515515
ticker_service,
516-
certificate_handler: aggregator_client,
517516
chain_observer,
518517
digester,
519518
single_signer,
@@ -529,6 +528,8 @@ impl<'a> DependenciesBuilder<'a> {
529528
upkeep_service,
530529
epoch_service,
531530
certifier,
531+
signer_registration_publisher: aggregator_client.clone(),
532+
signers_registration_retriever: aggregator_client,
532533
kes_signer,
533534
network_configuration_service,
534535
};

mithril-signer/src/dependency_injection/containers.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ use mithril_ticker::TickerService;
1616

1717
use crate::MetricsService;
1818
use crate::services::{
19-
AggregatorClient, CertifierService, EpochService, SingleSigner, UpkeepService,
19+
CertifierService, EpochService, SignerRegistrationPublisher, SignersRegistrationRetriever,
20+
SingleSigner, UpkeepService,
2021
};
2122
use crate::store::ProtocolInitializerStorer;
2223

2324
type StakeStoreService = Arc<dyn StakeStorer>;
24-
type CertificateHandlerService = Arc<dyn AggregatorClient>;
2525
type ChainObserverService = Arc<dyn ChainObserver>;
2626
type DigesterService = Arc<dyn ImmutableDigester>;
2727
type SingleSignerService = Arc<dyn SingleSigner>;
@@ -40,9 +40,6 @@ pub struct SignerDependencyContainer {
4040
/// Stake store service
4141
pub stake_store: StakeStoreService,
4242

43-
/// Certificate handler service
44-
pub certificate_handler: CertificateHandlerService,
45-
4643
/// Chain Observer service
4744
pub chain_observer: ChainObserverService,
4845

@@ -85,6 +82,12 @@ pub struct SignerDependencyContainer {
8582
/// Certifier service
8683
pub certifier: Arc<dyn CertifierService>,
8784

85+
/// Signer registration publisher
86+
pub signer_registration_publisher: Arc<dyn SignerRegistrationPublisher>,
87+
88+
/// Signers registration retriever
89+
pub signers_registration_retriever: Arc<dyn SignersRegistrationRetriever>,
90+
8891
/// Kes signer service
8992
pub kes_signer: Option<Arc<dyn KesSigner>>,
9093

mithril-signer/src/entities/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//! This module provide domain entities for the services & state machine.
44
55
mod beacon_to_sign;
6-
mod signer_epoch_settings;
6+
mod registered_signers;
77

88
pub use beacon_to_sign::*;
9-
pub use signer_epoch_settings::*;
9+
pub use registered_signers::*;

mithril-signer/src/entities/signer_epoch_settings.rs renamed to mithril-signer/src/entities/registered_signers.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use mithril_common::entities::{Epoch, Signer};
22

3-
/// SignerEpochSettings represents the settings of an epoch
3+
/// `RegisteredSigners` represents the registered signers of an epoch
44
#[derive(Clone, Debug, PartialEq)]
5-
pub struct SignerEpochSettings {
6-
/// Current Epoch
5+
pub struct RegisteredSigners {
6+
/// Epoch for which those registrations are active.
77
pub epoch: Epoch,
88

99
/// Current Signers
@@ -14,9 +14,9 @@ pub struct SignerEpochSettings {
1414
}
1515

1616
#[cfg(test)]
17-
impl mithril_common::test::double::Dummy for SignerEpochSettings {
18-
/// Create a dummy `SignerEpochSettings`
19-
fn dummy() -> SignerEpochSettings {
17+
impl mithril_common::test::double::Dummy for RegisteredSigners {
18+
/// Create a dummy `RegisteredSigners`
19+
fn dummy() -> RegisteredSigners {
2020
use mithril_common::test::double::fake_data;
2121

2222
// Beacon
@@ -28,7 +28,7 @@ impl mithril_common::test::double::Dummy for SignerEpochSettings {
2828
let next_signers = signers[2..5].to_vec();
2929

3030
// Signer Epoch settings
31-
SignerEpochSettings {
31+
RegisteredSigners {
3232
epoch: beacon.epoch,
3333
current_signers,
3434
next_signers,

mithril-signer/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pub mod store;
1919

2020
pub use commands::*;
2121
pub use configuration::{Configuration, DefaultConfiguration};
22-
pub use entities::SignerEpochSettings;
22+
pub use entities::RegisteredSigners;
2323
pub use message_adapters::{FromEpochSettingsAdapter, ToRegisterSignerMessageAdapter};
2424
pub use metrics::*;
2525
pub use runtime::*;

mithril-signer/src/message_adapters/from_epoch_settings.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ use mithril_common::{
44
messages::{EpochSettingsMessage, SignerMessagePart, TryFromMessageAdapter},
55
};
66

7-
use crate::entities::SignerEpochSettings;
7+
use crate::entities::RegisteredSigners;
88

9-
/// Adapter to convert [EpochSettingsMessage] to [SignerEpochSettings].
9+
/// Adapter to convert [EpochSettingsMessage] to [RegisteredSigners].
1010
pub struct FromEpochSettingsAdapter;
1111

12-
impl TryFromMessageAdapter<EpochSettingsMessage, SignerEpochSettings> for FromEpochSettingsAdapter {
12+
impl TryFromMessageAdapter<EpochSettingsMessage, RegisteredSigners> for FromEpochSettingsAdapter {
1313
/// Method to convert.
14-
fn try_adapt(message: EpochSettingsMessage) -> StdResult<SignerEpochSettings> {
15-
let epoch_settings = SignerEpochSettings {
14+
fn try_adapt(message: EpochSettingsMessage) -> StdResult<RegisteredSigners> {
15+
let epoch_settings = RegisteredSigners {
1616
epoch: message.epoch,
1717
current_signers: SignerMessagePart::try_into_signers(message.current_signers)
1818
.with_context(|| "'FromMessageAdapter' can not convert the current signers")?,

mithril-signer/src/runtime/runner.rs

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use mithril_protocol_config::model::MithrilNetworkConfiguration;
1414

1515
use crate::Configuration;
1616
use crate::dependency_injection::SignerDependencyContainer;
17-
use crate::entities::{BeaconToSign, SignerEpochSettings};
17+
use crate::entities::{BeaconToSign, RegisteredSigners};
1818
use crate::services::{EpochService, MithrilProtocolInitializerBuilder};
1919

2020
/// This trait is mainly intended for mocking.
@@ -29,7 +29,7 @@ pub trait Runner: Send + Sync {
2929
/// Fetch the current epoch settings if any.
3030
async fn get_signer_registrations_from_aggregator(
3131
&self,
32-
) -> StdResult<Option<SignerEpochSettings>>;
32+
) -> StdResult<Option<RegisteredSigners>>;
3333

3434
/// Fetch the beacon to sign if any.
3535
async fn get_beacon_to_sign(&self, time_point: TimePoint) -> StdResult<Option<BeaconToSign>>;
@@ -131,10 +131,13 @@ impl Runner for SignerRunner {
131131

132132
async fn get_signer_registrations_from_aggregator(
133133
&self,
134-
) -> StdResult<Option<SignerEpochSettings>> {
134+
) -> StdResult<Option<RegisteredSigners>> {
135135
debug!(self.logger, ">> get_epoch_settings");
136136

137-
self.services.certificate_handler.retrieve_epoch_settings().await
137+
self.services
138+
.signers_registration_retriever
139+
.retrieve_all_signer_registrations()
140+
.await
138141
}
139142

140143
async fn get_beacon_to_sign(&self, time_point: TimePoint) -> StdResult<Option<BeaconToSign>> {
@@ -233,7 +236,7 @@ impl Runner for SignerRunner {
233236
kes_period,
234237
);
235238
self.services
236-
.certificate_handler
239+
.signer_registration_publisher
237240
.register_signer(epoch_offset_to_recording_epoch, &signer)
238241
.await?;
239242

@@ -414,9 +417,10 @@ mod tests {
414417
use crate::database::test_helper::main_db_connection;
415418
use crate::metrics::MetricsService;
416419
use crate::services::{
417-
CardanoTransactionsImporter, DumbAggregatorClient, MithrilEpochService,
418-
MithrilSingleSigner, MockTransactionStore, MockUpkeepService, SignerCertifierService,
419-
SignerSignableSeedBuilder, SignerSignedEntityConfigProvider,
420+
CardanoTransactionsImporter, DumbSignersRegistrationRetriever, MithrilEpochService,
421+
MithrilSingleSigner, MockTransactionStore, MockUpkeepService, SignaturePublisherNoop,
422+
SignerCertifierService, SignerSignableSeedBuilder, SignerSignedEntityConfigProvider,
423+
SpySignerRegistrationPublisher,
420424
};
421425
use crate::test_tools::TestLogger;
422426

@@ -546,13 +550,12 @@ mod tests {
546550
Arc::new(CardanoTransactionsPreloaderActivation::new(true)),
547551
));
548552
let upkeep_service = Arc::new(MockUpkeepService::new());
549-
let aggregator_client = Arc::new(DumbAggregatorClient::default());
550553
let certifier = Arc::new(SignerCertifierService::new(
551554
Arc::new(SignedBeaconRepository::new(sqlite_connection.clone(), None)),
552555
Arc::new(SignerSignedEntityConfigProvider::new(epoch_service.clone())),
553556
signed_entity_type_lock.clone(),
554557
single_signer.clone(),
555-
aggregator_client.clone(),
558+
Arc::new(SignaturePublisherNoop),
556559
logger.clone(),
557560
));
558561
let kes_signer = None;
@@ -569,7 +572,6 @@ mod tests {
569572

570573
SignerDependencyContainer {
571574
stake_store,
572-
certificate_handler: aggregator_client,
573575
chain_observer,
574576
digester,
575577
single_signer,
@@ -585,6 +587,8 @@ mod tests {
585587
upkeep_service,
586588
epoch_service,
587589
certifier,
590+
signer_registration_publisher: Arc::new(SpySignerRegistrationPublisher::default()),
591+
signers_registration_retriever: Arc::new(DumbSignersRegistrationRetriever::default()),
588592
kes_signer,
589593
network_configuration_service,
590594
}
@@ -659,8 +663,8 @@ mod tests {
659663
async fn test_register_signer_to_aggregator() {
660664
let mut services = init_services().await;
661665
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
662-
let certificate_handler = Arc::new(DumbAggregatorClient::default());
663-
services.certificate_handler = certificate_handler.clone();
666+
let registration_publisher_spy = Arc::new(SpySignerRegistrationPublisher::default());
667+
services.signer_registration_publisher = registration_publisher_spy.clone();
664668
let protocol_initializer_store = services.protocol_initializer_store.clone();
665669
let current_epoch = services.ticker_service.get_current_epoch().await.unwrap();
666670

@@ -699,7 +703,7 @@ mod tests {
699703
.expect("registering a signer to the aggregator should not fail");
700704

701705
let last_registered_signer_first_registration =
702-
certificate_handler.get_last_registered_signer().await.unwrap();
706+
registration_publisher_spy.get_last_registered_signer().await.unwrap();
703707
let maybe_protocol_initializer_first_registration = protocol_initializer_store
704708
.get_protocol_initializer(current_epoch.offset_to_recording_epoch())
705709
.await
@@ -709,7 +713,8 @@ mod tests {
709713
"A protocol initializer should have been registered at the 'Recording' epoch"
710714
);
711715

712-
let total_registered_signers = certificate_handler.get_total_registered_signers().await;
716+
let total_registered_signers =
717+
registration_publisher_spy.get_total_registered_signers().await;
713718
assert_eq!(1, total_registered_signers);
714719

715720
runner
@@ -718,7 +723,7 @@ mod tests {
718723
.expect("registering a signer to the aggregator should not fail");
719724

720725
let last_registered_signer_second_registration =
721-
certificate_handler.get_last_registered_signer().await.unwrap();
726+
registration_publisher_spy.get_last_registered_signer().await.unwrap();
722727
let maybe_protocol_initializer_second_registration = protocol_initializer_store
723728
.get_protocol_initializer(current_epoch.offset_to_recording_epoch())
724729
.await
@@ -733,7 +738,8 @@ mod tests {
733738
"The signer registration should be the same and should have been registered twice"
734739
);
735740

736-
let total_registered_signers = certificate_handler.get_total_registered_signers().await;
741+
let total_registered_signers =
742+
registration_publisher_spy.get_total_registered_signers().await;
737743
assert_eq!(1, total_registered_signers);
738744
}
739745

@@ -769,10 +775,7 @@ mod tests {
769775

770776
#[tokio::test]
771777
async fn test_inform_epoch_setting_pass_available_signed_entity_types_to_epoch_service() {
772-
let mut services = init_services().await;
773-
let certificate_handler = Arc::new(DumbAggregatorClient::default());
774-
775-
services.certificate_handler = certificate_handler;
778+
let services = init_services().await;
776779
let runner = init_runner(Some(services), None).await;
777780

778781
let epoch = Epoch(1);

mithril-signer/src/runtime/state_machine.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ mod tests {
496496
use mithril_common::entities::{ChainPoint, Epoch, ProtocolMessage, SignedEntityType};
497497
use mithril_common::test::double::Dummy;
498498

499-
use crate::SignerEpochSettings;
499+
use crate::RegisteredSigners;
500500
use crate::runtime::runner::MockSignerRunner;
501501
use crate::test_tools::TestLogger;
502502

@@ -547,7 +547,7 @@ mod tests {
547547
#[tokio::test]
548548
async fn unregistered_epoch_settings_behind_known_epoch() {
549549
let mut runner = MockSignerRunner::new();
550-
let epoch_settings = SignerEpochSettings {
550+
let epoch_settings = RegisteredSigners {
551551
epoch: Epoch(3),
552552
current_signers: vec![],
553553
next_signers: vec![],
@@ -594,7 +594,7 @@ mod tests {
594594
runner
595595
.expect_get_signer_registrations_from_aggregator()
596596
.once()
597-
.returning(|| Ok(Some(SignerEpochSettings::dummy())));
597+
.returning(|| Ok(Some(RegisteredSigners::dummy())));
598598

599599
runner
600600
.expect_get_mithril_network_configuration()
@@ -646,7 +646,7 @@ mod tests {
646646
runner
647647
.expect_get_signer_registrations_from_aggregator()
648648
.once()
649-
.returning(|| Ok(Some(SignerEpochSettings::dummy())));
649+
.returning(|| Ok(Some(RegisteredSigners::dummy())));
650650

651651
runner
652652
.expect_get_mithril_network_configuration()
@@ -702,7 +702,7 @@ mod tests {
702702
runner
703703
.expect_get_signer_registrations_from_aggregator()
704704
.once()
705-
.returning(|| Ok(Some(SignerEpochSettings::dummy())));
705+
.returning(|| Ok(Some(RegisteredSigners::dummy())));
706706

707707
runner
708708
.expect_get_mithril_network_configuration()

0 commit comments

Comments
 (0)