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