diff --git a/consensus/safety-rules/src/safety_rules_2chain.rs b/consensus/safety-rules/src/safety_rules_2chain.rs index e93d2cd1874..8033ffb2c06 100644 --- a/consensus/safety-rules/src/safety_rules_2chain.rs +++ b/consensus/safety-rules/src/safety_rules_2chain.rs @@ -197,8 +197,8 @@ impl SafetyRules { let block1 = proposed_block.round(); let block0 = proposed_block.quorum_cert().certified_block().round(); - // verify 2-chain rule - let commit = next_round(block0)? == block1; + // verify 2-chain rule, no commit on genesis block (round 0) + let commit = next_round(block0)? == block1 && block0 > 0; // create a ledger info let commit_info = if commit { diff --git a/consensus/safety-rules/src/tests/suite.rs b/consensus/safety-rules/src/tests/suite.rs index e8f96e69c65..22d04d0aa46 100644 --- a/consensus/safety-rules/src/tests/suite.rs +++ b/consensus/safety-rules/src/tests/suite.rs @@ -701,8 +701,10 @@ fn test_2chain_rules(constructor: &Callback) { result.unwrap_err(); } }; - // block == qc + 1, commit - expect(&a1, None, true, true); + + // block == qc + 1, but no commit because qc points to genesis (round 0) + expect(&a1, None, true, false); + // block != qc + 1 && block != tc + 1 expect( &b1,