Skip to content

Commit 94d2578

Browse files
committed
fix(aggregator): signer registration is sent at most once to aggregator
1 parent 33de45e commit 94d2578

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
@@ -205,37 +205,41 @@ impl Runner for SignerRunner {
205205
),
206206
None => None,
207207
};
208-
let protocol_initializer = MithrilProtocolInitializerBuilder::build(
209-
stake,
210-
&protocol_parameters,
211-
self.services.kes_signer.clone(),
212-
kes_period,
213-
)?;
214-
self.services
215-
.protocol_initializer_store
216-
.save_protocol_initializer(epoch_offset_to_recording_epoch, protocol_initializer)
217-
.await?;
218208

219209
let protocol_initializer = self
220210
.services
221211
.protocol_initializer_store
222212
.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(
213+
.await
214+
.with_context(
226215
|| "register_signer_to_aggregator can not retrieve protocol initializer from store",
227216
)?;
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?;
217+
218+
if protocol_initializer.is_none() {
219+
let protocol_initializer = MithrilProtocolInitializerBuilder::build(
220+
stake,
221+
&protocol_parameters,
222+
self.services.kes_signer.clone(),
223+
kes_period,
224+
)?;
225+
226+
let signer = Signer::new(
227+
self.services.single_signer.get_party_id(),
228+
protocol_initializer.verification_key().into(),
229+
protocol_initializer.verification_key_signature(),
230+
protocol_operational_certificate,
231+
kes_period,
232+
);
233+
self.services
234+
.certificate_handler
235+
.register_signer(epoch_offset_to_recording_epoch, &signer)
236+
.await?;
237+
238+
self.services
239+
.protocol_initializer_store
240+
.save_protocol_initializer(epoch_offset_to_recording_epoch, protocol_initializer)
241+
.await?;
242+
}
239243

240244
Ok(())
241245
}
@@ -703,6 +707,9 @@ mod tests {
703707
"A protocol initializer should have been registered at the 'Recording' epoch"
704708
);
705709

710+
let total_registered_signers = certificate_handler.get_total_registered_signers().await;
711+
assert_eq!(1, total_registered_signers);
712+
706713
runner
707714
.register_signer_to_aggregator()
708715
.await
@@ -723,6 +730,9 @@ mod tests {
723730
serde_json::to_string(&last_registered_signer_second_registration).unwrap(),
724731
"The signer registration should be the same and should have been registered twice"
725732
);
733+
734+
let total_registered_signers = certificate_handler.get_total_registered_signers().await;
735+
assert_eq!(1, total_registered_signers);
726736
}
727737

728738
#[tokio::test]

0 commit comments

Comments
 (0)