@@ -1516,17 +1516,24 @@ impl Worker {
1516
1516
}
1517
1517
}
1518
1518
1519
- if !imported. is_empty ( ) {
1520
- let mut height_changed = false ;
1519
+ if let Some ( ( last, rest) ) = imported. split_last ( ) {
1520
+ let ( imported, last_proposal_header) = {
1521
+ let header =
1522
+ c. block_header ( & last. clone ( ) . into ( ) ) . expect ( "ChainNotify is called after the block is imported" ) ;
1523
+ let full_header = header. decode ( ) ;
1524
+ if self . is_proposal ( full_header. number ( ) , full_header. hash ( ) ) {
1525
+ ( rest, Some ( full_header) )
1526
+ } else {
1527
+ ( imported. as_slice ( ) , None )
1528
+ }
1529
+ } ;
1530
+ let height_at_begin = self . height ;
1521
1531
for hash in imported {
1522
1532
// New Commit received, skip to next height.
1523
- let header = c . block_header ( & hash . into ( ) ) . expect ( "ChainNotify is called after the block is imported" ) ;
1524
-
1533
+ let header =
1534
+ c . block_header ( & hash . clone ( ) . into ( ) ) . expect ( "ChainNotify is called after the block is imported" ) ;
1525
1535
let full_header = header. decode ( ) ;
1526
- if self . is_proposal ( full_header. number ( ) , full_header. hash ( ) ) {
1527
- self . on_imported_proposal ( & full_header) ;
1528
- } else if self . height < header. number ( ) {
1529
- height_changed = true ;
1536
+ if self . height < header. number ( ) {
1530
1537
cinfo ! ( ENGINE , "Received a commit: {:?}." , header. number( ) ) ;
1531
1538
let prev_block_view = TendermintSealView :: new ( full_header. seal ( ) )
1532
1539
. previous_block_view ( )
@@ -1535,9 +1542,11 @@ impl Worker {
1535
1542
self . save_last_confirmed_view ( prev_block_view) ;
1536
1543
}
1537
1544
}
1538
- if height_changed {
1545
+ if height_at_begin != self . height {
1539
1546
self . move_to_step ( TendermintState :: Propose , false ) ;
1540
- return
1547
+ }
1548
+ if let Some ( last_proposal_header) = last_proposal_header {
1549
+ self . on_imported_proposal ( & last_proposal_header) ;
1541
1550
}
1542
1551
}
1543
1552
}
0 commit comments