@@ -1437,17 +1437,24 @@ impl Worker {
14371437 }
14381438 } ;
14391439
1440- if !imported. is_empty ( ) {
1441- let mut height_changed = false ;
1440+ if let Some ( ( last, rest) ) = imported. split_last ( ) {
1441+ let ( imported, last_proposal_header) = {
1442+ let header =
1443+ c. block_header ( & last. clone ( ) . into ( ) ) . expect ( "ChainNotify is called after the block is imported" ) ;
1444+ let full_header = header. decode ( ) ;
1445+ if self . is_proposal ( full_header. number ( ) , full_header. hash ( ) ) {
1446+ ( rest, Some ( full_header) )
1447+ } else {
1448+ ( imported. as_slice ( ) , None )
1449+ }
1450+ } ;
1451+ let height_at_begin = self . height ;
14421452 for hash in imported {
14431453 // New Commit received, skip to next height.
1444- let header = c . block_header ( & hash . into ( ) ) . expect ( "ChainNotify is called after the block is imported" ) ;
1445-
1454+ let header =
1455+ c . block_header ( & hash . clone ( ) . into ( ) ) . expect ( "ChainNotify is called after the block is imported" ) ;
14461456 let full_header = header. decode ( ) ;
1447- if self . is_proposal ( full_header. number ( ) , full_header. hash ( ) ) {
1448- self . on_imported_proposal ( & full_header) ;
1449- } else if self . height < header. number ( ) {
1450- height_changed = true ;
1457+ if self . height < header. number ( ) {
14511458 cinfo ! ( ENGINE , "Received a commit: {:?}." , header. number( ) ) ;
14521459 let prev_block_view = TendermintSealView :: new ( full_header. seal ( ) )
14531460 . previous_block_view ( )
@@ -1456,11 +1463,14 @@ impl Worker {
14561463 self . save_last_confirmed_view ( prev_block_view) ;
14571464 }
14581465 }
1459- if height_changed {
1466+ if height_at_begin != self . height {
14601467 self . move_to_step ( Step :: Propose , false ) ;
1461- return
1468+ }
1469+ if let Some ( last_proposal_header) = last_proposal_header {
1470+ self . on_imported_proposal ( & last_proposal_header) ;
14621471 }
14631472 }
1473+
14641474 if !enacted. is_empty ( ) && self . can_move_from_commit_to_propose ( ) {
14651475 let new_height = self . height + 1 ;
14661476 self . move_to_height ( new_height) ;
0 commit comments