Skip to content

Commit 0228f0f

Browse files
jpraynaudAlenarghubertpalo
committed
Remove 'register_signer' from multi-signer in Aggregator
Co-authored-by: Denis Jouenne <[email protected]> Co-authored-by: Grégoire HUBERT <[email protected]>
1 parent c7d3f68 commit 0228f0f

File tree

4 files changed

+13
-160
lines changed

4 files changed

+13
-160
lines changed

mithril-aggregator/src/command_args.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ fn setup_genesis_dependencies(
4545
);
4646
let immutable_file_observer = Arc::new(ImmutableFileSystemObserver::new(&config.db_directory));
4747
let beacon_provider = Arc::new(BeaconProviderImpl::new(
48-
chain_observer.clone(),
48+
chain_observer,
4949
immutable_file_observer,
5050
config.get_network()?,
5151
));
@@ -85,7 +85,6 @@ fn setup_genesis_dependencies(
8585
stake_store,
8686
single_signature_store,
8787
protocol_parameters_store.clone(),
88-
chain_observer,
8988
)));
9089
let dependencies = GenesisToolsDependency {
9190
beacon_provider,
@@ -365,7 +364,6 @@ impl ServeCommand {
365364
stake_store.clone(),
366365
single_signature_store.clone(),
367366
protocol_parameters_store.clone(),
368-
chain_observer.clone(),
369367
)));
370368
let certificate_verifier = Arc::new(MithrilCertificateVerifier::new(slog_scope::logger()));
371369
let genesis_verification_key = key_decode_hex(&config.genesis_verification_key)?;

mithril-aggregator/src/dependency.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,13 +320,11 @@ pub mod tests {
320320
Box::new(MemoryAdapter::new(None).unwrap()),
321321
None,
322322
));
323-
let chain_observer = Arc::new(FakeObserver::default());
324323
let multi_signer = MultiSignerImpl::new(
325324
verification_key_store.clone(),
326325
stake_store.clone(),
327326
single_signature_store.clone(),
328327
protocol_parameters_store.clone(),
329-
chain_observer,
330328
);
331329
let multi_signer = Arc::new(RwLock::new(multi_signer));
332330
let immutable_file_observer = Arc::new(DumbImmutableFileObserver::default());

mithril-aggregator/src/multi_signer.rs

Lines changed: 12 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@ use std::sync::Arc;
44
use async_trait::async_trait;
55
use chrono::prelude::*;
66
use hex::ToHex;
7-
use mithril_common::chain_observer::ChainObserver;
87
use slog_scope::{debug, trace, warn};
98
use thiserror::Error;
109

1110
use mithril_common::crypto_helper::{
12-
key_decode_hex, key_encode_hex, KESPeriod, ProtocolAggregateVerificationKey,
13-
ProtocolAggregationError, ProtocolClerk, ProtocolKeyRegistration, ProtocolMultiSignature,
14-
ProtocolParameters, ProtocolPartyId, ProtocolRegistrationError, ProtocolSignerVerificationKey,
11+
key_decode_hex, key_encode_hex, ProtocolAggregateVerificationKey, ProtocolAggregationError,
12+
ProtocolClerk, ProtocolKeyRegistration, ProtocolMultiSignature, ProtocolParameters,
13+
ProtocolPartyId, ProtocolRegistrationError, ProtocolSignerVerificationKey,
1514
ProtocolSingleSignature, ProtocolStakeDistribution,
1615
};
17-
use mithril_common::entities::{self, Signer, SignerWithStake};
16+
use mithril_common::entities::{self, SignerWithStake};
1817
use mithril_common::store::{StakeStore, StakeStorer, StoreError};
1918
use mithril_common::{
2019
NEXT_SIGNER_EPOCH_RETRIEVAL_OFFSET, SIGNER_EPOCH_RECORDING_OFFSET,
@@ -79,10 +78,6 @@ pub enum ProtocolError {
7978
/// Beacon error.
8079
#[error("beacon error: '{0}'")]
8180
Beacon(#[from] entities::EpochError),
82-
83-
/// Chain observer error.
84-
#[error("chaim observer error: '{0}'")]
85-
ChainObserver(String),
8681
}
8782

8883
/// MultiSigner is the cryptographic engine in charge of producing multi signatures from individual signatures
@@ -178,9 +173,6 @@ pub trait MultiSigner: Sync + Send {
178173
}
179174
}
180175

181-
/// Register a signer
182-
async fn register_signer(&mut self, signer: &Signer) -> Result<(), ProtocolError>;
183-
184176
/// Get signer
185177
async fn get_signer_verification_key(
186178
&self,
@@ -253,9 +245,6 @@ pub struct MultiSignerImpl {
253245

254246
/// Protocol parameters store
255247
protocol_parameters_store: Arc<ProtocolParametersStore>,
256-
257-
/// Chain observer
258-
chain_observer: Arc<dyn ChainObserver>,
259248
}
260249

261250
impl MultiSignerImpl {
@@ -265,7 +254,6 @@ impl MultiSignerImpl {
265254
stake_store: Arc<StakeStore>,
266255
single_signature_store: Arc<SingleSignatureStore>,
267256
protocol_parameters_store: Arc<ProtocolParametersStore>,
268-
chain_observer: Arc<dyn ChainObserver>,
269257
) -> Self {
270258
debug!("New MultiSignerImpl created");
271259
Self {
@@ -279,7 +267,6 @@ impl MultiSignerImpl {
279267
stake_store,
280268
single_signature_store,
281269
protocol_parameters_store,
282-
chain_observer,
283270
}
284271
}
285272

@@ -525,70 +512,6 @@ impl MultiSigner for MultiSignerImpl {
525512
}
526513
}
527514

528-
/// Register a signer
529-
async fn register_signer(&mut self, signer: &Signer) -> Result<(), ProtocolError> {
530-
debug!("Register signer {}", signer.party_id);
531-
532-
let epoch = self
533-
.current_beacon
534-
.as_ref()
535-
.ok_or_else(ProtocolError::UnavailableBeacon)?
536-
.epoch
537-
.offset_by(SIGNER_EPOCH_RECORDING_OFFSET)?;
538-
539-
let stake_distribution = self
540-
.get_stake_distribution_with_epoch_offset(SIGNER_EPOCH_RECORDING_OFFSET)
541-
.await?;
542-
let mut key_registration = ProtocolKeyRegistration::init(&stake_distribution);
543-
let party_id_register = match signer.party_id.as_str() {
544-
"" => None,
545-
party_id => Some(party_id.to_string()),
546-
};
547-
let verification_key =
548-
key_decode_hex(&signer.verification_key).map_err(ProtocolError::Codec)?;
549-
let verification_key_signature = match &signer.verification_key_signature {
550-
Some(verification_key_signature) => {
551-
Some(key_decode_hex(verification_key_signature).map_err(ProtocolError::Codec)?)
552-
}
553-
_ => None,
554-
};
555-
let operational_certificate = match &signer.operational_certificate {
556-
Some(operational_certificate) => {
557-
Some(key_decode_hex(operational_certificate).map_err(ProtocolError::Codec)?)
558-
}
559-
_ => None,
560-
};
561-
let kes_period = match &operational_certificate {
562-
Some(operational_certificate) => Some(
563-
self.chain_observer
564-
.get_current_kes_period(operational_certificate)
565-
.await
566-
.map_err(|e| ProtocolError::ChainObserver(e.to_string()))?
567-
.unwrap_or_default()
568-
- operational_certificate.start_kes_period as KESPeriod,
569-
),
570-
None => None,
571-
};
572-
let party_id_save = key_registration.register(
573-
party_id_register.clone(),
574-
operational_certificate,
575-
verification_key_signature,
576-
kes_period,
577-
verification_key,
578-
)?;
579-
let mut signer_save = signer.to_owned();
580-
signer_save.party_id = party_id_save;
581-
582-
match self
583-
.verification_key_store
584-
.save_verification_key(epoch, signer_save)
585-
.await?
586-
{
587-
Some(_) => Err(ProtocolError::ExistingSigner()),
588-
None => Ok(()),
589-
}
590-
}
591-
592515
/// Get signer verification key
593516
async fn get_signer_verification_key(
594517
&self,
@@ -804,7 +727,6 @@ mod tests {
804727
use crate::store::{SingleSignatureStore, VerificationKeyStore};
805728
use crate::ProtocolParametersStore;
806729

807-
use mithril_common::chain_observer::FakeObserver;
808730
use mithril_common::crypto_helper::tests_setup::*;
809731
use mithril_common::fake_data;
810732
use mithril_common::store::adapter::MemoryAdapter;
@@ -859,13 +781,11 @@ mod tests {
859781
),
860782
None,
861783
);
862-
let chain_observer = FakeObserver::default();
863784
let mut multi_signer = MultiSignerImpl::new(
864785
Arc::new(verification_key_store),
865786
Arc::new(stake_store),
866787
Arc::new(single_signature_store),
867788
Arc::new(protocol_parameters_store),
868-
Arc::new(chain_observer),
869789
);
870790

871791
multi_signer
@@ -992,76 +912,11 @@ mod tests {
992912
assert_eq!(stake_distribution_next_expected, stake_distribution);
993913
}
994914

995-
#[tokio::test]
996-
async fn test_multi_signer_register_signer_ok() {
997-
let mut multi_signer = setup_multi_signer().await;
998-
999-
let protocol_parameters_expected = setup_protocol_parameters();
1000-
multi_signer
1001-
.update_protocol_parameters(&protocol_parameters_expected)
1002-
.await
1003-
.expect("update protocol parameters failed");
1004-
1005-
let signers = setup_signers(5, &protocol_parameters_expected);
1006-
1007-
let stake_distribution_expected: ProtocolStakeDistribution = signers
1008-
.iter()
1009-
.map(|(signer_with_stake, _, _)| {
1010-
(
1011-
signer_with_stake.party_id.to_owned(),
1012-
signer_with_stake.stake,
1013-
)
1014-
})
1015-
.collect::<_>();
1016-
multi_signer
1017-
.update_stake_distribution(&stake_distribution_expected)
1018-
.await
1019-
.expect("update stake distribution failed");
1020-
1021-
for (signer_with_stake, _, _) in &signers {
1022-
multi_signer
1023-
.register_signer(&signer_with_stake.to_owned().into())
1024-
.await
1025-
.expect("register should have succeeded")
1026-
}
1027-
1028-
offset_epoch(
1029-
&mut multi_signer,
1030-
(SIGNER_EPOCH_RECORDING_OFFSET - SIGNER_EPOCH_RETRIEVAL_OFFSET) as i64,
1031-
)
1032-
.await;
1033-
1034-
let mut signers_with_stake_all_expected = Vec::new();
1035-
for (signer_with_stake, _, _) in &signers {
1036-
signers_with_stake_all_expected.push(signer_with_stake.to_owned());
1037-
}
1038-
signers_with_stake_all_expected.sort_by_key(|signer| signer.party_id.to_owned());
1039-
let signers_all_expected = signers_with_stake_all_expected
1040-
.clone()
1041-
.into_iter()
1042-
.map(|signer| signer.into())
1043-
.collect::<Vec<entities::Signer>>();
1044-
1045-
let mut signers_with_stake_all = multi_signer
1046-
.get_signers_with_stake()
1047-
.await
1048-
.expect("get signers with stake should have been succeeded");
1049-
signers_with_stake_all.sort_by_key(|signer| signer.party_id.to_owned());
1050-
1051-
assert_eq!(signers_with_stake_all_expected, signers_with_stake_all);
1052-
1053-
let mut signers_all = multi_signer
1054-
.get_signers()
1055-
.await
1056-
.expect("get signers should have been succeeded");
1057-
signers_all.sort_by_key(|signer| signer.party_id.to_owned());
1058-
1059-
assert_eq!(signers_all_expected, signers_all);
1060-
}
1061-
1062915
#[tokio::test]
1063916
async fn test_multi_signer_multi_signature_ok() {
1064917
let mut multi_signer = setup_multi_signer().await;
918+
let verification_key_store = multi_signer.verification_key_store.clone();
919+
let start_epoch = multi_signer.current_beacon.as_ref().unwrap().epoch;
1065920

1066921
let message = setup_message();
1067922
let protocol_parameters = setup_protocol_parameters();
@@ -1086,10 +941,13 @@ mod tests {
1086941
.await
1087942
.expect("update stake distribution failed");
1088943
for (signer_with_stake, _, _) in &signers {
1089-
multi_signer
1090-
.register_signer(&signer_with_stake.to_owned().into())
944+
verification_key_store
945+
.save_verification_key(
946+
start_epoch.offset_to_recording_epoch().unwrap(),
947+
signer_with_stake.to_owned().into(),
948+
)
1091949
.await
1092-
.expect("register should have succeeded")
950+
.expect("register should have succeeded");
1093951
}
1094952

1095953
offset_epoch(

mithril-aggregator/tests/test_extensions/dependency.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ pub async fn initialize_dependencies(
7474
stake_store.clone(),
7575
single_signature_store.clone(),
7676
protocol_parameters_store.clone(),
77-
chain_observer.clone(),
7877
);
7978
let multi_signer = Arc::new(RwLock::new(multi_signer));
8079
let beacon_provider = Arc::new(BeaconProviderImpl::new(

0 commit comments

Comments
 (0)