diff --git a/core/src/client/importer.rs b/core/src/client/importer.rs index b010b5e06b..d039b36e22 100644 --- a/core/src/client/importer.rs +++ b/core/src/client/importer.rs @@ -144,7 +144,10 @@ impl Importer { }; { - if !imported_blocks.is_empty() && is_empty { + if !imported_blocks.is_empty() { + if !is_empty { + ctrace!(CLIENT, "Call new_blocks even though block verification queue is not empty"); + } let (enacted, retracted) = self.calculate_enacted_retracted(&import_results); self.miner.chain_new_blocks(client, &imported_blocks, &invalid_blocks, &enacted, &retracted); client.new_blocks(&imported_blocks, &invalid_blocks, &enacted, &retracted, &[], duration); diff --git a/core/src/consensus/tendermint/worker.rs b/core/src/consensus/tendermint/worker.rs index a71b069ac0..2593031fef 100644 --- a/core/src/consensus/tendermint/worker.rs +++ b/core/src/consensus/tendermint/worker.rs @@ -1312,7 +1312,11 @@ impl Worker { view, } => { cinfo!(ENGINE, "Commit timeout."); - if self.client().block(&block_hash.into()).is_none() { + + let proposal_imported = self.client().block(&block_hash.into()).is_some(); + let best_block_header = self.client().best_block_header(); + + if !proposal_imported || best_block_header.hash() != block_hash { cwarn!(ENGINE, "Best chain is not updated yet, wait until imported"); self.step = TendermintState::CommitTimedout { block_hash,