From ea8e26eca318968a31ec3cf8072e7ba3521d25dd Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Thu, 24 Aug 2023 20:35:50 -0400 Subject: [PATCH] Use an empty key for Batch's SignId --- coordinator/src/tributary/handle.rs | 6 +++--- processor/src/substrate_signer.rs | 5 +++-- processor/src/tests/substrate_signer.rs | 10 ++++------ tests/processor/src/tests/batch.rs | 14 ++++++-------- tests/processor/src/tests/send.rs | 4 ++-- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/coordinator/src/tributary/handle.rs b/coordinator/src/tributary/handle.rs index 86611b1c..51fbb647 100644 --- a/coordinator/src/tributary/handle.rs +++ b/coordinator/src/tributary/handle.rs @@ -467,7 +467,7 @@ pub async fn handle_application_tx< .send( spec.set().network, CoordinatorMessage::Coordinator(coordinator::CoordinatorMessage::BatchPreprocesses { - id: SignId { key: todo!(), id: data.plan, attempt: data.attempt }, + id: SignId { key: vec![], id: data.plan, attempt: data.attempt }, preprocesses, }), ) @@ -489,9 +489,9 @@ pub async fn handle_application_tx< .send( spec.set().network, CoordinatorMessage::Coordinator(coordinator::CoordinatorMessage::BatchShares { - id: SignId { key: todo!(), id: data.plan, attempt: data.attempt }, + id: SignId { key: vec![], id: data.plan, attempt: data.attempt }, shares: shares - .drain() + .into_iter() .map(|(validator, share)| (validator, share.try_into().unwrap())) .collect(), }), diff --git a/processor/src/substrate_signer.rs b/processor/src/substrate_signer.rs index 92766864..9361f258 100644 --- a/processor/src/substrate_signer.rs +++ b/processor/src/substrate_signer.rs @@ -6,7 +6,6 @@ use rand_core::OsRng; use scale::Encode; use transcript::{Transcript, RecommendedTranscript}; -use ciphersuite::group::GroupEncoding; use frost::{ curve::Ristretto, ThresholdKeys, @@ -179,7 +178,9 @@ impl SubstrateSigner { // Update the attempt number self.attempt.insert(id, attempt); - let id = SignId { key: self.keys.group_key().to_bytes().to_vec(), id, attempt }; + // Doesn't set key since there's only one key active at a time + // TODO: BatchSignId + let id = SignId { key: vec![], id, attempt }; info!("signing batch {} #{}", hex::encode(id.id), id.attempt); // If we reboot mid-sign, the current design has us abort all signs and wait for latter diff --git a/processor/src/tests/substrate_signer.rs b/processor/src/tests/substrate_signer.rs index fa5f9523..583e5ca8 100644 --- a/processor/src/tests/substrate_signer.rs +++ b/processor/src/tests/substrate_signer.rs @@ -20,14 +20,13 @@ use crate::substrate_signer::{SubstrateSignerEvent, SubstrateSigner}; #[tokio::test] async fn test_substrate_signer() { - let mut keys = key_gen::<_, Ristretto>(&mut OsRng); + let keys = key_gen::<_, Ristretto>(&mut OsRng); let participant_one = Participant::new(1).unwrap(); let id: u32 = 5; let block = BlockHash([0xaa; 32]); - let mut actual_id = - SignId { key: keys[&participant_one].group_key().to_bytes().to_vec(), id: [0; 32], attempt: 0 }; + let mut actual_id = SignId { key: vec![], id: [0; 32], attempt: 0 }; let batch = Batch { network: NetworkId::Monero, @@ -50,7 +49,7 @@ async fn test_substrate_signer() { let mut t = 0; for i in 1 ..= keys.len() { let i = Participant::new(u16::try_from(i).unwrap()).unwrap(); - let keys = keys.remove(&i).unwrap(); + let keys = keys.get(&i).unwrap().clone(); t = keys.params().t(); let mut signer = SubstrateSigner::::new(NetworkId::Monero, keys); @@ -62,7 +61,6 @@ async fn test_substrate_signer() { signers.insert(i, signer); dbs.insert(i, db); } - drop(keys); let mut signing_set = vec![]; while signing_set.len() < usize::from(t) { @@ -144,7 +142,7 @@ async fn test_substrate_signer() { signers.get_mut(i).unwrap().events.pop_front().unwrap() { assert_eq!(signed_batch.batch, batch); - assert!(Public::from_raw(actual_id.key.clone().try_into().unwrap()) + assert!(Public::from_raw(keys[&participant_one].group_key().to_bytes()) .verify(&batch_message(&batch), &signed_batch.signature)); } else { panic!("didn't get signed batch back"); diff --git a/tests/processor/src/tests/batch.rs b/tests/processor/src/tests/batch.rs index a843cb99..71fd2a53 100644 --- a/tests/processor/src/tests/batch.rs +++ b/tests/processor/src/tests/batch.rs @@ -18,7 +18,6 @@ use crate::{*, tests::*}; pub(crate) async fn recv_batch_preprocesses( coordinators: &mut [Coordinator], - key: [u8; 32], attempt: u32, ) -> (SignId, HashMap>) { let mut id = None; @@ -37,7 +36,7 @@ pub(crate) async fn recv_batch_preprocesses( }, ) => { if id.is_none() { - assert_eq!(&this_id.key, &key); + assert!(this_id.key.is_empty()); assert_eq!(this_id.attempt, attempt); id = Some(this_id.clone()); block = Some(this_block); @@ -66,6 +65,7 @@ pub(crate) async fn recv_batch_preprocesses( pub(crate) async fn sign_batch( coordinators: &mut [Coordinator], + key: [u8; 32], id: SignId, preprocesses: HashMap>, ) -> SignedBatch { @@ -125,7 +125,7 @@ pub(crate) async fn sign_batch( batch: this_batch, }) => { if batch.is_none() { - assert!(PublicKey::from_raw(id.key.clone().try_into().unwrap()) + assert!(PublicKey::from_raw(key) .verify(&batch_message(&this_batch.batch), &this_batch.signature)); batch = Some(this_batch.clone()); @@ -232,8 +232,7 @@ fn batch_test() { tokio::time::sleep(Duration::from_secs(10)).await; // Make sure the proceessors picked it up by checking they're trying to sign a batch for it - let (mut id, mut preprocesses) = - recv_batch_preprocesses(&mut coordinators, key_pair.0 .0, 0).await; + let (mut id, mut preprocesses) = recv_batch_preprocesses(&mut coordinators, 0).await; // Trigger a random amount of re-attempts for attempt in 1 ..= u32::try_from(OsRng.next_u64() % 4).unwrap() { // TODO: Double check how the processor handles this ID field @@ -246,12 +245,11 @@ fn batch_test() { }) .await; } - (id, preprocesses) = - recv_batch_preprocesses(&mut coordinators, key_pair.0 .0, attempt).await; + (id, preprocesses) = recv_batch_preprocesses(&mut coordinators, attempt).await; } // Continue with signing the batch - let batch = sign_batch(&mut coordinators, id, preprocesses).await; + let batch = sign_batch(&mut coordinators, key_pair.0 .0, id, preprocesses).await; // Check it assert_eq!(batch.batch.network, network); diff --git a/tests/processor/src/tests/send.rs b/tests/processor/src/tests/send.rs index d0aa8643..6a32a8ae 100644 --- a/tests/processor/src/tests/send.rs +++ b/tests/processor/src/tests/send.rs @@ -187,10 +187,10 @@ fn send_test() { tokio::time::sleep(Duration::from_secs(10)).await; // Make sure the proceessors picked it up by checking they're trying to sign a batch for it - let (id, preprocesses) = recv_batch_preprocesses(&mut coordinators, key_pair.0 .0, 0).await; + let (id, preprocesses) = recv_batch_preprocesses(&mut coordinators, 0).await; // Continue with signing the batch - let batch = sign_batch(&mut coordinators, id, preprocesses).await; + let batch = sign_batch(&mut coordinators, key_pair.0 .0, id, preprocesses).await; // Check it assert_eq!(batch.batch.network, network);