From 8420b5f082b5eb394dfd66beae79c6de3da463ed Mon Sep 17 00:00:00 2001 From: grumbach Date: Tue, 19 Jul 2022 15:37:21 +0200 Subject: [PATCH] chore: improve readability --- src/knowledge.rs | 13 +++++-------- src/sdkg.rs | 15 ++++++--------- src/state.rs | 24 ++++++++---------------- 3 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/knowledge.rs b/src/knowledge.rs index efbdf8d..e37afe0 100644 --- a/src/knowledge.rs +++ b/src/knowledge.rs @@ -49,12 +49,12 @@ impl Knowledge { Ok(knowledge) } - pub fn got_all_acks(&self, participants_len: usize) -> bool { - self.part_acks.len() == participants_len + pub fn got_all_acks(&self, num_participants: usize) -> bool { + self.part_acks.len() == num_participants && self .part_acks .iter() - .all(|(_, a)| a.len() == participants_len) + .all(|(_, a)| a.len() == num_participants) } fn handle_vote(&mut self, vote: DkgVote, id: NodeId) -> Result<(), KnowledgeFault> { @@ -74,11 +74,8 @@ impl Knowledge { return Err(KnowledgeFault::IncompatibleParts); } for (id_part, ack) in acked_parts { - if let Some(entry) = self.part_acks.get_mut(&id_part) { - entry.insert((id, ack)); - } else { - self.part_acks.insert(id_part, BTreeSet::from([(id, ack)])); - } + let acks = self.part_acks.entry(id_part).or_default(); + acks.insert((id, ack)); } } DkgVote::AllAcks(all_acks) => { diff --git a/src/sdkg.rs b/src/sdkg.rs index af2cdf6..bea1479 100644 --- a/src/sdkg.rs +++ b/src/sdkg.rs @@ -84,7 +84,6 @@ use std::{ fmt::{self, Debug, Formatter}, hash::Hash, ops::{AddAssign, Mul}, - sync::Arc, }; use thiserror::Error; @@ -92,8 +91,8 @@ use thiserror::Error; pub trait NodeIdT: Eq + Ord + Clone + Debug + Hash + Send + Sync {} impl NodeIdT for N where N: Eq + Ord + Clone + Debug + Hash + Send + Sync {} -/// A map assigning to each node ID a public key, wrapped in an `Arc`. -pub type PubKeyMap = Arc>; +/// A map assigning to each node ID a public key +pub type PubKeyMap = BTreeMap; /// Returns a `PubKeyMap` corresponding to the given secret keys. /// @@ -104,7 +103,7 @@ where I: IntoIterator, { let to_pub = |(id, sk): I::Item| (id.borrow().clone(), sk.public_key()); - Arc::new(sec_keys.into_iter().map(to_pub).collect()) + sec_keys.into_iter().map(to_pub).collect() } /// A local error while handling an `Ack` or `Part` message, that was not caused by that message @@ -506,7 +505,6 @@ mod tests { use super::{AckOutcome, PartOutcome, SyncKeyGen}; use bls::{PublicKey, SecretKey, SignatureShare}; use std::collections::BTreeMap; - use std::sync::Arc; #[test] fn test_dkg() { @@ -531,10 +529,9 @@ mod tests { let mut parts = Vec::new(); for (id, sk) in sec_keys.into_iter().enumerate() { let (sync_key_gen, opt_part) = - SyncKeyGen::new(id, sk, Arc::new(pub_keys.clone()), threshold, &mut rng) - .unwrap_or_else(|_| { - panic!("Failed to create `SyncKeyGen` instance for node #{}", id) - }); + SyncKeyGen::new(id, sk, pub_keys.clone(), threshold, &mut rng).unwrap_or_else( + |_| panic!("Failed to create `SyncKeyGen` instance for node #{}", id), + ); nodes.insert(id, sync_key_gen); parts.push((id, opt_part.unwrap())); // Would be `None` for observer nodes. } diff --git a/src/state.rs b/src/state.rs index 75cac1a..21a0e32 100644 --- a/src/state.rs +++ b/src/state.rs @@ -8,7 +8,6 @@ use bls::{PublicKey, PublicKeySet, SecretKey, SecretKeyShare}; use std::collections::{BTreeMap, BTreeSet}; -use std::sync::Arc; use crate::error::{Error, Result}; use crate::knowledge::{Knowledge, KnowledgeFault}; @@ -54,13 +53,8 @@ impl DkgState { threshold: usize, rng: &mut R, ) -> Result { - let (sync_key_gen, opt_part) = SyncKeyGen::new( - our_id, - secret_key.clone(), - Arc::new(pub_keys.clone()), - threshold, - rng, - )?; + let (sync_key_gen, opt_part) = + SyncKeyGen::new(our_id, secret_key.clone(), pub_keys.clone(), threshold, rng)?; Ok(DkgState { id: our_id, secret_key, @@ -103,16 +97,16 @@ impl DkgState { Ok(k) => k, }; - let participants_len = self.pub_keys.len(); - if knowledge.agreed_with_all_acks.len() == participants_len { + let num_participants = self.pub_keys.len(); + if knowledge.agreed_with_all_acks.len() == num_participants { DkgCurrentState::Termination(knowledge.part_acks) } else if !knowledge.agreed_with_all_acks.is_empty() { DkgCurrentState::WaitingForTotalAgreement - } else if knowledge.got_all_acks(participants_len) { + } else if knowledge.got_all_acks(num_participants) { DkgCurrentState::GotAllAcks(knowledge.part_acks) } else if !knowledge.part_acks.is_empty() { DkgCurrentState::WaitingForMoreAcks - } else if knowledge.parts.len() == participants_len { + } else if knowledge.parts.len() == num_participants { DkgCurrentState::GotAllParts(knowledge.parts) } else { DkgCurrentState::WaitingForMoreParts @@ -134,8 +128,7 @@ impl DkgState { let outcome = self.keygen.handle_ack(&sender_id, ack.clone())?; if let AckOutcome::Invalid(fault) = outcome { return Err(Error::FaultyVote(format!( - "Ack fault: {:?} by {:?} for part by {:?}", - fault, sender_id, part_id + "Ack fault: {fault:?} by {sender_id:?} for part by {part_id:?}" ))); } } @@ -156,8 +149,7 @@ impl DkgState { } PartOutcome::Invalid(fault) => { return Err(Error::FaultyVote(format!( - "Part fault: {:?} by {:?}", - fault, sender_id + "Part fault: {fault:?} by {sender_id:?}" ))); } PartOutcome::Valid(None) => {