@@ -48,6 +48,8 @@ enum CpuTask {
48
48
RBBlockValidated ( NodeId , Arc < Block > ) ,
49
49
/// An input block has been generated and is ready to propagate
50
50
IBBlockGenerated ( InputBlock ) ,
51
+ /// An IB header has been received and validated, and is ready to propagate
52
+ IBHeaderValidated ( NodeId , InputBlockHeader , bool ) ,
51
53
/// An input block has been received and validated, and is ready to propagate
52
54
IBBlockValidated ( NodeId , Arc < InputBlock > ) ,
53
55
/// An endorser block has been generated and is ready to propagate
@@ -64,14 +66,15 @@ impl CpuTask {
64
66
fn task_type ( & self ) -> String {
65
67
match self {
66
68
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" ,
75
78
}
76
79
. to_string ( )
77
80
}
@@ -82,6 +85,7 @@ impl CpuTask {
82
85
Self :: RBBlockGenerated ( _) => "" . to_string ( ) ,
83
86
Self :: RBBlockValidated ( _, _) => "" . to_string ( ) ,
84
87
Self :: IBBlockGenerated ( id) => id. header . id . to_string ( ) ,
88
+ Self :: IBHeaderValidated ( _, id, _) => id. id . to_string ( ) ,
85
89
Self :: IBBlockValidated ( _, id) => id. header . id . to_string ( ) ,
86
90
Self :: EBBlockGenerated ( _) => "" . to_string ( ) ,
87
91
Self :: EBBlockValidated ( _, _) => "" . to_string ( ) ,
@@ -329,9 +333,9 @@ impl Node {
329
333
vec ! [ time]
330
334
}
331
335
CpuTask :: IBBlockGenerated ( _) => vec ! [ cpu_times. ib_generation] ,
336
+ CpuTask :: IBHeaderValidated ( _, _, _) => vec ! [ cpu_times. ib_head_validation] ,
332
337
CpuTask :: IBBlockValidated ( _, ib) => vec ! [
333
- cpu_times. ib_head_validation
334
- + cpu_times. ib_body_validation_constant
338
+ cpu_times. ib_body_validation_constant
335
339
+ ( cpu_times. ib_body_validation_per_byte * ib. bytes( ) as u32 ) ,
336
340
] ,
337
341
CpuTask :: EBBlockGenerated ( _) => vec ! [ cpu_times. eb_generation] ,
@@ -394,6 +398,7 @@ impl Node {
394
398
CpuTask :: RBBlockGenerated ( block) => self . finish_generating_block( block) ?,
395
399
CpuTask :: RBBlockValidated ( from, block) => self . finish_validating_block( from, block) ?,
396
400
CpuTask :: IBBlockGenerated ( ib) => self . finish_generating_ib( ib) ?,
401
+ CpuTask :: IBHeaderValidated ( from, ib, has_body) => self . finish_validating_ib_header( from, ib, has_body) ?,
397
402
CpuTask :: IBBlockValidated ( from, ib) => self . finish_validating_ib( from, ib) ?,
398
403
CpuTask :: EBBlockGenerated ( eb) => self . finish_generating_eb( eb) ?,
399
404
CpuTask :: EBBlockValidated ( from, eb) => self . finish_validating_eb( from, eb) ?,
@@ -440,7 +445,7 @@ impl Node {
440
445
self . receive_request_ib_header ( from, id) ?;
441
446
}
442
447
SimulationMessage :: IBHeader ( header, has_body) => {
443
- self . receive_ib_header ( from, header, has_body) ? ;
448
+ self . receive_ib_header ( from, header, has_body) ;
444
449
}
445
450
446
451
// IB transmission
@@ -907,22 +912,29 @@ impl Node {
907
912
Ok ( ( ) )
908
913
}
909
914
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 ) {
916
916
let id = header. id ;
917
917
if self
918
918
. leios
919
919
. ibs
920
920
. get ( & id)
921
921
. is_some_and ( |ib| ib. header ( ) . is_some ( ) )
922
922
{
923
- return Ok ( ( ) ) ;
923
+ return ;
924
924
}
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 ;
926
938
// We haven't seen this header before, so propagate it to our neighbors
927
939
for peer in & self . consumers {
928
940
if * peer == from {
0 commit comments