diff --git a/substrate/tendermint/client/src/tendermint.rs b/substrate/tendermint/client/src/tendermint.rs index 042a6902..c6b0140d 100644 --- a/substrate/tendermint/client/src/tendermint.rs +++ b/substrate/tendermint/client/src/tendermint.rs @@ -176,6 +176,16 @@ impl<T: TendermintValidator> TendermintImport<T> { &self, block: &mut BlockImportParams<T::Block, BT>, ) -> Result<(), Error> { + if block.finalized { + if block.fork_choice != Some(ForkChoiceStrategy::Custom(false)) { + // Since we alw1ays set the fork choice, this means something else marked the block as + // finalized, which shouldn't be possible. Ensuring nothing else is setting blocks as + // finalized helps ensure our security + panic!("block was finalized despite not setting the fork choice"); + } + return Ok(()); + } + // Set the block as a worse choice block.fork_choice = Some(ForkChoiceStrategy::Custom(false));