@@ -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