Skip to content

Commit 958d07e

Browse files
committed
feat(signer): register stored protocol initializer with aggregator
This avoids creating multiple versions of the protocol initializer which is registered to the aggragator.
1 parent e59f44a commit 958d07e

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

mithril-signer/src/runtime/runner.rs

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,20 @@ impl Runner for SignerRunner {
211211
self.services.kes_signer.clone(),
212212
kes_period,
213213
)?;
214+
self.services
215+
.protocol_initializer_store
216+
.save_protocol_initializer(epoch_offset_to_recording_epoch, protocol_initializer)
217+
.await?;
218+
219+
let protocol_initializer = self
220+
.services
221+
.protocol_initializer_store
222+
.get_protocol_initializer(epoch_offset_to_recording_epoch)
223+
.await?.ok_or(RunnerError::NoValueError(
224+
format!("no protocol_initializer available in store for epoch {epoch_offset_to_recording_epoch}"),
225+
)).with_context(
226+
|| "register_signer_to_aggregator can not retrieve protocol initializer from store",
227+
)?;
214228
let signer = Signer::new(
215229
self.services.single_signer.get_party_id(),
216230
protocol_initializer.verification_key().into(),
@@ -222,10 +236,6 @@ impl Runner for SignerRunner {
222236
.certificate_handler
223237
.register_signer(epoch_offset_to_recording_epoch, &signer)
224238
.await?;
225-
self.services
226-
.protocol_initializer_store
227-
.save_protocol_initializer(epoch_offset_to_recording_epoch, protocol_initializer)
228-
.await?;
229239

230240
Ok(())
231241
}
@@ -682,15 +692,37 @@ mod tests {
682692
.await
683693
.expect("registering a signer to the aggregator should not fail");
684694

685-
assert!(certificate_handler.get_last_registered_signer().await.is_some());
686-
let maybe_protocol_initializer = protocol_initializer_store
695+
let last_registered_signer_first_registration =
696+
certificate_handler.get_last_registered_signer().await.unwrap();
697+
let maybe_protocol_initializer_first_registration = protocol_initializer_store
687698
.get_protocol_initializer(current_epoch.offset_to_recording_epoch())
688699
.await
689700
.expect("get_protocol_initializer should not fail");
690701
assert!(
691-
maybe_protocol_initializer.is_some(),
702+
maybe_protocol_initializer_first_registration.is_some(),
692703
"A protocol initializer should have been registered at the 'Recording' epoch"
693704
);
705+
706+
runner
707+
.register_signer_to_aggregator()
708+
.await
709+
.expect("registering a signer to the aggregator should not fail");
710+
711+
let last_registered_signer_second_registration =
712+
certificate_handler.get_last_registered_signer().await.unwrap();
713+
let maybe_protocol_initializer_second_registration = protocol_initializer_store
714+
.get_protocol_initializer(current_epoch.offset_to_recording_epoch())
715+
.await
716+
.expect("get_protocol_initializer should not fail");
717+
assert!(
718+
maybe_protocol_initializer_second_registration.is_some(),
719+
"A protocol initializer should have been registered at the 'Recording' epoch"
720+
);
721+
assert_eq!(
722+
serde_json::to_string(&last_registered_signer_first_registration).unwrap(),
723+
serde_json::to_string(&last_registered_signer_second_registration).unwrap(),
724+
"The signer registration should be the same and should have been registered twice"
725+
);
694726
}
695727

696728
#[tokio::test]

0 commit comments

Comments
 (0)