Skip to content

Commit 6d42a4f

Browse files
committed
fix(aggregator): signer registration is sent at most once to aggregator
1 parent bed0c1c commit 6d42a4f

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

mithril-signer/src/runtime/runner.rs

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -207,37 +207,41 @@ impl Runner for SignerRunner {
207207
),
208208
None => None,
209209
};
210-
let protocol_initializer = MithrilProtocolInitializerBuilder::build(
211-
stake,
212-
&protocol_parameters,
213-
self.services.kes_signer.clone(),
214-
kes_period,
215-
)?;
216-
self.services
217-
.protocol_initializer_store
218-
.save_protocol_initializer(epoch_offset_to_recording_epoch, protocol_initializer)
219-
.await?;
220210

221211
let protocol_initializer = self
222212
.services
223213
.protocol_initializer_store
224214
.get_protocol_initializer(epoch_offset_to_recording_epoch)
225-
.await?.ok_or(RunnerError::NoValueError(
226-
format!("no protocol_initializer available in store for epoch {epoch_offset_to_recording_epoch}"),
227-
)).with_context(
215+
.await
216+
.with_context(
228217
|| "register_signer_to_aggregator can not retrieve protocol initializer from store",
229218
)?;
230-
let signer = Signer::new(
231-
self.services.single_signer.get_party_id(),
232-
protocol_initializer.verification_key().into(),
233-
protocol_initializer.verification_key_signature(),
234-
protocol_operational_certificate,
235-
kes_period,
236-
);
237-
self.services
238-
.certificate_handler
239-
.register_signer(epoch_offset_to_recording_epoch, &signer)
240-
.await?;
219+
220+
if protocol_initializer.is_none() {
221+
let protocol_initializer = MithrilProtocolInitializerBuilder::build(
222+
stake,
223+
&protocol_parameters,
224+
self.services.kes_signer.clone(),
225+
kes_period,
226+
)?;
227+
228+
let signer = Signer::new(
229+
self.services.single_signer.get_party_id(),
230+
protocol_initializer.verification_key().into(),
231+
protocol_initializer.verification_key_signature(),
232+
protocol_operational_certificate,
233+
kes_period,
234+
);
235+
self.services
236+
.certificate_handler
237+
.register_signer(epoch_offset_to_recording_epoch, &signer)
238+
.await?;
239+
240+
self.services
241+
.protocol_initializer_store
242+
.save_protocol_initializer(epoch_offset_to_recording_epoch, protocol_initializer)
243+
.await?;
244+
}
241245

242246
Ok(())
243247
}
@@ -705,6 +709,9 @@ mod tests {
705709
"A protocol initializer should have been registered at the 'Recording' epoch"
706710
);
707711

712+
let total_registered_signers = certificate_handler.get_total_registered_signers().await;
713+
assert_eq!(1, total_registered_signers);
714+
708715
runner
709716
.register_signer_to_aggregator()
710717
.await
@@ -725,6 +732,9 @@ mod tests {
725732
serde_json::to_string(&last_registered_signer_second_registration).unwrap(),
726733
"The signer registration should be the same and should have been registered twice"
727734
);
735+
736+
let total_registered_signers = certificate_handler.get_total_registered_signers().await;
737+
assert_eq!(1, total_registered_signers);
728738
}
729739

730740
#[tokio::test]

0 commit comments

Comments
 (0)