Skip to content

Commit e6c6f95

Browse files
committed
Update the best block when best proposal header is updated
In Tendermint best block needs precommits in the next header. Currently, the best block is updated when the best proposal header's previous block is imported. However, the best block is not updated when a proposal block's next header is imported. This commit updates best block when the next header is imported.
1 parent 91794d6 commit e6c6f95

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

core/src/client/importer.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ impl Importer {
318318
_importer_lock: &MutexGuard<()>,
319319
) -> usize {
320320
let prev_best_proposal_header_hash = client.block_chain().best_proposal_header().hash();
321+
let prev_best_block_hash = client.block_chain().best_block_hash();
321322

322323
let mut bad = HashSet::new();
323324
let mut imported = Vec::new();
@@ -350,7 +351,8 @@ impl Importer {
350351
self.header_queue.mark_as_bad(&bad.drain().collect::<Vec<_>>());
351352
let (enacted, retracted) = self.calculate_enacted_retracted(&routes);
352353

353-
let new_best_proposal_header_hash = client.block_chain().best_proposal_header().hash();
354+
let new_best_proposal_header = client.block_chain().best_proposal_header();
355+
let new_best_proposal_header_hash = new_best_proposal_header.hash();
354356
let best_proposal_header_changed = if prev_best_proposal_header_hash != new_best_proposal_header_hash {
355357
Some(new_best_proposal_header_hash)
356358
} else {
@@ -367,6 +369,14 @@ impl Importer {
367369
best_proposal_header_changed,
368370
);
369371

372+
let maybe_new_best_block_hash = new_best_proposal_header.parent_hash();
373+
if best_proposal_header_changed.is_some()
374+
&& prev_best_block_hash != maybe_new_best_block_hash
375+
&& client.block(&BlockId::Hash(maybe_new_best_block_hash)).is_some()
376+
{
377+
client.update_best_as_committed(maybe_new_best_block_hash);
378+
}
379+
370380
client.db().flush().expect("DB flush failed.");
371381

372382
imported.len()

0 commit comments

Comments
 (0)