diff --git a/coordinator/tributary/tendermint/src/lib.rs b/coordinator/tributary/tendermint/src/lib.rs index e5193908e..d9ecd2533 100644 --- a/coordinator/tributary/tendermint/src/lib.rs +++ b/coordinator/tributary/tendermint/src/lib.rs @@ -708,9 +708,17 @@ impl TendermintMachine { if let Data::Proposal(_, block) = &msg.data { match self.network.validate(block).await { Ok(()) => {} - Err(BlockError::Temporal) => return Err(TendermintError::Temporal), + Err(BlockError::Temporal) => { + if self.block.round().step == Step::Propose { + self.broadcast(Data::Prevote(None)); + } + Err(TendermintError::Temporal)?; + } Err(BlockError::Fatal) => { log::warn!(target: "tendermint", "validator proposed a fatally invalid block"); + if self.block.round().step == Step::Propose { + self.broadcast(Data::Prevote(None)); + } self .slash( msg.sender, @@ -729,6 +737,9 @@ impl TendermintMachine { target: "tendermint", "proposed proposed with a syntactically invalid valid round", ); + if self.block.round().step == Step::Propose { + self.broadcast(Data::Prevote(None)); + } self .slash(msg.sender, SlashEvent::WithEvidence(Evidence::InvalidValidRound(msg.encode()))) .await;