@@ -48,6 +48,8 @@ enum CpuTask {
4848 RBBlockValidated ( NodeId , Arc < Block > ) ,
4949 /// An input block has been generated and is ready to propagate
5050 IBBlockGenerated ( InputBlock ) ,
51+ /// An IB header has been received and validated, and is ready to propagate
52+ IBHeaderValidated ( NodeId , InputBlockHeader , bool ) ,
5153 /// An input block has been received and validated, and is ready to propagate
5254 IBBlockValidated ( NodeId , Arc < InputBlock > ) ,
5355 /// An endorser block has been generated and is ready to propagate
@@ -64,14 +66,15 @@ impl CpuTask {
6466 fn task_type ( & self ) -> String {
6567 match self {
6668 Self :: TransactionValidated ( _, _) => "TransactionValidated" ,
67- Self :: RBBlockGenerated ( _) => "PraosBlockGenerated" ,
68- Self :: RBBlockValidated ( _, _) => "PraosBlockValidated" ,
69- Self :: IBBlockGenerated ( _) => "InputBlockGenerated" ,
70- Self :: IBBlockValidated ( _, _) => "InputBlockValidated" ,
71- Self :: EBBlockGenerated ( _) => "EndorserBlockGenerated" ,
72- Self :: EBBlockValidated ( _, _) => "EndorserBlockValidated" ,
73- Self :: VTBundleGenerated ( _) => "VoteBundleGenerated" ,
74- Self :: VTBundleValidated ( _, _) => "VoteBundleValidated" ,
69+ Self :: RBBlockGenerated ( _) => "RBBlockGenerated" ,
70+ Self :: RBBlockValidated ( _, _) => "RBBlockValidated" ,
71+ Self :: IBBlockGenerated ( _) => "IBBlockGenerated" ,
72+ Self :: IBHeaderValidated ( _, _, _) => "IBHeaderValidated" ,
73+ Self :: IBBlockValidated ( _, _) => "IBBlockValidated" ,
74+ Self :: EBBlockGenerated ( _) => "EBBlockGenerated" ,
75+ Self :: EBBlockValidated ( _, _) => "EBBlockValidated" ,
76+ Self :: VTBundleGenerated ( _) => "VTBundleGenerated" ,
77+ Self :: VTBundleValidated ( _, _) => "VTBundleValidated" ,
7578 }
7679 . to_string ( )
7780 }
@@ -82,6 +85,7 @@ impl CpuTask {
8285 Self :: RBBlockGenerated ( _) => "" . to_string ( ) ,
8386 Self :: RBBlockValidated ( _, _) => "" . to_string ( ) ,
8487 Self :: IBBlockGenerated ( id) => id. header . id . to_string ( ) ,
88+ Self :: IBHeaderValidated ( _, id, _) => id. id . to_string ( ) ,
8589 Self :: IBBlockValidated ( _, id) => id. header . id . to_string ( ) ,
8690 Self :: EBBlockGenerated ( _) => "" . to_string ( ) ,
8791 Self :: EBBlockValidated ( _, _) => "" . to_string ( ) ,
@@ -329,9 +333,9 @@ impl Node {
329333 vec ! [ time]
330334 }
331335 CpuTask :: IBBlockGenerated ( _) => vec ! [ cpu_times. ib_generation] ,
336+ CpuTask :: IBHeaderValidated ( _, _, _) => vec ! [ cpu_times. ib_head_validation] ,
332337 CpuTask :: IBBlockValidated ( _, ib) => vec ! [
333- cpu_times. ib_head_validation
334- + cpu_times. ib_body_validation_constant
338+ cpu_times. ib_body_validation_constant
335339 + ( cpu_times. ib_body_validation_per_byte * ib. bytes( ) as u32 ) ,
336340 ] ,
337341 CpuTask :: EBBlockGenerated ( _) => vec ! [ cpu_times. eb_generation] ,
@@ -394,6 +398,7 @@ impl Node {
394398 CpuTask :: RBBlockGenerated ( block) => self . finish_generating_block( block) ?,
395399 CpuTask :: RBBlockValidated ( from, block) => self . finish_validating_block( from, block) ?,
396400 CpuTask :: IBBlockGenerated ( ib) => self . finish_generating_ib( ib) ?,
401+ CpuTask :: IBHeaderValidated ( from, ib, has_body) => self . finish_validating_ib_header( from, ib, has_body) ?,
397402 CpuTask :: IBBlockValidated ( from, ib) => self . finish_validating_ib( from, ib) ?,
398403 CpuTask :: EBBlockGenerated ( eb) => self . finish_generating_eb( eb) ?,
399404 CpuTask :: EBBlockValidated ( from, eb) => self . finish_validating_eb( from, eb) ?,
@@ -440,7 +445,7 @@ impl Node {
440445 self . receive_request_ib_header ( from, id) ?;
441446 }
442447 SimulationMessage :: IBHeader ( header, has_body) => {
443- self . receive_ib_header ( from, header, has_body) ? ;
448+ self . receive_ib_header ( from, header, has_body) ;
444449 }
445450
446451 // IB transmission
@@ -907,22 +912,29 @@ impl Node {
907912 Ok ( ( ) )
908913 }
909914
910- fn receive_ib_header (
911- & mut self ,
912- from : NodeId ,
913- header : InputBlockHeader ,
914- has_body : bool ,
915- ) -> Result < ( ) > {
915+ fn receive_ib_header ( & mut self , from : NodeId , header : InputBlockHeader , has_body : bool ) {
916916 let id = header. id ;
917917 if self
918918 . leios
919919 . ibs
920920 . get ( & id)
921921 . is_some_and ( |ib| ib. header ( ) . is_some ( ) )
922922 {
923- return Ok ( ( ) ) ;
923+ return ;
924924 }
925- self . leios . ibs . insert ( id, InputBlockState :: Pending ( header) ) ;
925+ self . leios
926+ . ibs
927+ . insert ( id, InputBlockState :: Pending ( header. clone ( ) ) ) ;
928+ self . schedule_cpu_task ( CpuTask :: IBHeaderValidated ( from, header, has_body) ) ;
929+ }
930+
931+ fn finish_validating_ib_header (
932+ & mut self ,
933+ from : NodeId ,
934+ header : InputBlockHeader ,
935+ has_body : bool ,
936+ ) -> Result < ( ) > {
937+ let id = header. id ;
926938 // We haven't seen this header before, so propagate it to our neighbors
927939 for peer in & self . consumers {
928940 if * peer == from {
0 commit comments