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