Skip to content

Commit 0b32e3f

Browse files
committed
Refactor register single signature
And make it use a message argument.
1 parent 080c166 commit 0b32e3f

File tree

3 files changed

+42
-26
lines changed

3 files changed

+42
-26
lines changed

mithril-aggregator/src/http_server/routes/signatures_routes.rs

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ mod handlers {
2626
use crate::{
2727
dependency::MultiSignerWrapper, message_adapters::FromRegisterSingleSignatureAdapter,
2828
};
29+
use mithril_common::entities::SingleSignatures;
2930
use mithril_common::messages::RegisterSignatureMessage;
3031
use slog_scope::{debug, warn};
3132
use std::convert::Infallible;
@@ -37,10 +38,23 @@ mod handlers {
3738
multi_signer: MultiSignerWrapper,
3839
) -> Result<impl warp::Reply, Infallible> {
3940
debug!("⇄ HTTP SERVER: register_signatures/{:?}", message);
40-
let signature = FromRegisterSingleSignatureAdapter::adapt(message);
4141

42-
let mut multi_signer = multi_signer.write().await;
43-
match multi_signer.register_single_signature(&signature).await {
42+
async fn register_single_signature(
43+
multi_signer: MultiSignerWrapper,
44+
signature: SingleSignatures,
45+
) -> Result<(), ProtocolError> {
46+
let multi_signer = multi_signer.write().await;
47+
let message = multi_signer
48+
.get_current_message()
49+
.await
50+
.ok_or_else(ProtocolError::UnavailableMessage)?;
51+
multi_signer
52+
.register_single_signature(&message, &signature)
53+
.await
54+
}
55+
56+
let signature = FromRegisterSingleSignatureAdapter::adapt(message);
57+
match register_single_signature(multi_signer, signature).await {
4458
Err(ProtocolError::ExistingSingleSignature(party_id)) => {
4559
debug!("register_signatures::already_exist"; "party_id" => ?party_id);
4660
Ok(reply::empty(StatusCode::CONFLICT))
@@ -58,6 +72,7 @@ mod handlers {
5872
mod tests {
5973

6074
use crate::http_server::SERVER_BASE_PATH;
75+
use mithril_common::entities::ProtocolMessage;
6176
use mithril_common::messages::RegisterSignatureMessage;
6277
use mithril_common::test_utils::apispec::APISpec;
6378
use tokio::sync::RwLock;
@@ -85,11 +100,11 @@ mod tests {
85100
async fn test_register_signatures_post_ok() {
86101
let mut mock_multi_signer = MockMultiSigner::new();
87102
mock_multi_signer
88-
.expect_update_current_message()
89-
.return_once(|_| Ok(()));
103+
.expect_get_current_message()
104+
.return_once(|| Some(ProtocolMessage::new()));
90105
mock_multi_signer
91106
.expect_register_single_signature()
92-
.return_once(|_| Ok(()));
107+
.return_once(|_, _| Ok(()));
93108
let (mut dependency_manager, _) = initialize_dependencies().await;
94109
dependency_manager.multi_signer = Arc::new(RwLock::new(mock_multi_signer));
95110

@@ -118,9 +133,12 @@ mod tests {
118133
#[tokio::test]
119134
async fn test_register_signatures_post_ko_400() {
120135
let mut mock_multi_signer = MockMultiSigner::new();
136+
mock_multi_signer
137+
.expect_get_current_message()
138+
.return_once(|| Some(ProtocolMessage::new()));
121139
mock_multi_signer
122140
.expect_register_single_signature()
123-
.return_once(|_| Ok(()));
141+
.return_once(|_, _| Ok(()));
124142
let (mut dependency_manager, _) = initialize_dependencies().await;
125143
dependency_manager.multi_signer = Arc::new(RwLock::new(mock_multi_signer));
126144

@@ -153,11 +171,11 @@ mod tests {
153171
let party_id = message.party_id.clone();
154172
let mut mock_multi_signer = MockMultiSigner::new();
155173
mock_multi_signer
156-
.expect_update_current_message()
157-
.return_once(|_| Ok(()));
174+
.expect_get_current_message()
175+
.return_once(|| Some(ProtocolMessage::new()));
158176
mock_multi_signer
159177
.expect_register_single_signature()
160-
.return_once(move |_| Err(ProtocolError::ExistingSingleSignature(party_id)));
178+
.return_once(move |_, _| Err(ProtocolError::ExistingSingleSignature(party_id)));
161179
let (mut dependency_manager, _) = initialize_dependencies().await;
162180
dependency_manager.multi_signer = Arc::new(RwLock::new(mock_multi_signer));
163181

@@ -185,11 +203,11 @@ mod tests {
185203
async fn test_register_signatures_post_ko_500() {
186204
let mut mock_multi_signer = MockMultiSigner::new();
187205
mock_multi_signer
188-
.expect_update_current_message()
189-
.return_once(|_| Ok(()));
206+
.expect_get_current_message()
207+
.return_once(|| Some(ProtocolMessage::new()));
190208
mock_multi_signer
191209
.expect_register_single_signature()
192-
.return_once(|_| Err(ProtocolError::Core("an error occurred".to_string())));
210+
.return_once(|_, _| Err(ProtocolError::Core("an error occurred".to_string())));
193211
let (mut dependency_manager, _) = initialize_dependencies().await;
194212
dependency_manager.multi_signer = Arc::new(RwLock::new(mock_multi_signer));
195213

mithril-aggregator/src/multi_signer.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ pub trait MultiSigner: Sync + Send {
186186

187187
/// Registers a single signature
188188
async fn register_single_signature(
189-
&mut self,
189+
&self,
190+
message: &entities::ProtocolMessage,
190191
signatures: &entities::SingleSignatures,
191192
) -> Result<(), ProtocolError>;
192193

@@ -525,18 +526,15 @@ impl MultiSigner for MultiSignerImpl {
525526

526527
/// Registers a single signature
527528
async fn register_single_signature(
528-
&mut self,
529+
&self,
530+
message: &entities::ProtocolMessage,
529531
signatures: &entities::SingleSignatures,
530532
) -> Result<(), ProtocolError> {
531533
debug!(
532-
"Register single signature from {} at indexes {:?}",
533-
signatures.party_id, signatures.won_indexes
534+
"Register single signature from {} at indexes {:?} for message {:?}",
535+
signatures.party_id, signatures.won_indexes, message
534536
);
535537

536-
let message = &self
537-
.get_current_message()
538-
.await
539-
.ok_or_else(ProtocolError::UnavailableMessage)?;
540538
let protocol_parameters = self
541539
.get_protocol_parameters()
542540
.await?
@@ -902,7 +900,7 @@ mod tests {
902900
// Add some signatures but not enough to reach the quorum: multi-signer should not create the multi-signature
903901
for signature in signatures_to_almost_reach_quorum {
904902
multi_signer
905-
.register_single_signature(&signature)
903+
.register_single_signature(&message, &signature)
906904
.await
907905
.expect("register single signature should not fail");
908906
}
@@ -915,7 +913,7 @@ mod tests {
915913
// Add the remaining signatures to reach the quorum: multi-signer should create a multi-signature
916914
for signature in &signatures {
917915
multi_signer
918-
.register_single_signature(signature)
916+
.register_single_signature(&message, signature)
919917
.await
920918
.expect("register single signature should not fail");
921919
}

mithril-aggregator/tests/test_extensions/runtime_tester.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ macro_rules! cycle_err {
3737
$tester
3838
.cycle()
3939
.await
40-
.expect_err("cycle tick shoudl have returned an error");
40+
.expect_err("cycle tick should have returned an error");
4141
assert_eq!($expected_state, $tester.runtime.get_state());
4242
}};
4343
}
@@ -240,7 +240,7 @@ impl RuntimeTester {
240240

241241
/// "Send", actually register, the given single signatures in the multi-signers
242242
pub async fn send_single_signatures(&self, signers: &[SignerFixture]) -> Result<(), String> {
243-
let mut multisigner = self.deps.multi_signer.write().await;
243+
let multisigner = self.deps.multi_signer.read().await;
244244
let message = multisigner
245245
.get_current_message()
246246
.await
@@ -258,7 +258,7 @@ impl RuntimeTester {
258258
);
259259

260260
multisigner
261-
.register_single_signature(&single_signatures)
261+
.register_single_signature(&message, &single_signatures)
262262
.await
263263
.map_err(|e| {
264264
format!("registering a winning lottery signature should not fail: {e:?}")

0 commit comments

Comments
 (0)