pub trait SingleLeaderRoundsNeedTimeout: RoundFloor + CertificateCarriesCorrectVote { }Expand description
Lemma (Which rounds can be skipped without a timeout). For a correct validator:
- a
SingleLeaderround aboveSingleLeader(0), and anyValidatorround, is left only via aTimeoutCertificateor a locking block in a higher round; Round::FastandMultiLeaderrounds are additionally left by any authenticated proposal in a higher round.
Proof. By RoundFloor the round can rise only from a timeout certificate, the lock, or
proposed / signed_proposal. For the proposal inputs:
ChainManager::update_signed_proposalreturnsfalseimmediately forproposal.content.round > Round::SingleLeader(0), sosigned_proposalnever carries a higher round;proposedis written only by the privateupdate_proposed, called fromChainManager::create_vote, which byProposalGateruns only afterChainManager::check_proposed_blockreturnedAccept; and that method requiresnew_round == current_roundon theRound::SingleLeader(_) | Round::Validator(_)arm, so it cannot raise the round either. On theMultiLeader(_) | SingleLeader(0)arm it requires onlynew_round >= current_round, which can raise it.
The lock case is not an exception to the intent: a LockingBlock::Regular in round r is a
ValidatedBlockCertificate, hence by CertificateCarriesCorrectVote evidence that a
quorum — including a correct validator — was already in round r. So the validator is
following the round the chain has demonstrably reached, not being pushed past a leader’s turn.
∎