pub trait ConflictingBlocks { }Expand description
Definition (Conflicting blocks). Two Blocks conflict when they have the same
chain_id and height but different hashes. Certificates certify ConfirmedBlock and
ValidatedBlock values, each of which wraps a Block and hashes to that block’s hash,
so “certificates for conflicting blocks” is well defined.
Note that a Block is a ProposedBlock together with its
BlockExecutionOutcome. Two blocks with the same proposal but different outcomes therefore
conflict. This is deliberate: they lead to different chain states, so agreement must exclude
them, and the exclusion is discharged by DeterministicExecution.
Ancestry needs no separate definition here: ChainTipState::verify_block_chaining requires
a proposal’s height to equal the tip’s next height and its previous_block_hash to equal the
tip’s block hash, so the committed blocks of a chain form a hash-linked list, one per height.