Expand description
Leaders, round timeouts, and how a height leaves a round it cannot finish in.
Nothing here is needed for safety — CommitAgreement holds however rounds advance, and
indeed whether or not they advance at all. These results exist to be consumed by the progress
lemmas in linera_core::proof::progress, and to record precisely which rounds can be left by
which means. The last statement, RoundsWithoutTimeout, is a caveat rather than a
guarantee, and is the main reason the liveness theorem is conditional in the way it is.
Round advancement is not autonomous. A validator never advances a round on its own initiative:
it signs a timeout vote only when a client asks it to, through
ChainInfoQuery::request_leader_timeout, and it never proposes a block at all. Round
advancement is therefore driven entirely from linera_core::client, which is why the
corresponding assumption (ActiveCorrectDriver) lives in that crate.
Traits§
- Fallback
Vote - Lemma (Fallback).
ChainManager::vote_fallbacksigns a timeout vote in the fixed roundRound::SingleLeader(u32::MAX), at most once per instance, and only whileChainManager::current_roundis belowRound::Validator(0). A quorum of such votes forms aTimeoutCertificatewhosenext_roundisRound::Validator(0), moving the height into validator-led rounds. - Leader
Eligibility - Lemma (Leader eligibility). In a
SingleLeaderorValidatorround, exactly one owner may propose, namelyChainManager::round_leader(round); in aMultiLeaderround any chain owner may (or anyone, whenopen_multi_leader_rounds); inRound::Fastonly a super owner may. A super owner may additionally propose in any non-Validatorround. - Multi
Leader Rounds AreLocal - Remark (In a multi-leader round, the round a validator is in is its own). Above the fast
round, the protocol has two ways to leave a round, and they differ in kind rather than only in
trigger. A
TimeoutCertificateis quorum-signed, compact, and convinces anyone who receives it. A skipped multi-leader round leaves no artifact at all: bySingleLeaderRoundsNeedTimeoutit ends when some owner proposes higher, which is a unilateral act, and byRoundsWithoutTimeoutno timeout certificate for it can ever exist. - Rounds
Without Timeout - Caveat (Rounds that never time out).
ChainOwnership::round_timeoutreturnsNone— so thatChainManager::create_timeout_votefails withChainError::RoundDoesNotTimeOutand no timeout certificate can ever form — in three cases: - Single
Leader Rounds Need Timeout - Lemma (Which rounds can be skipped without a timeout). For a correct validator:
- Timeout
Certificate Advances Round - Lemma (A timeout certificate advances the round). After a correct validator processes a
valid
TimeoutCertificatefor roundrat its pending height, itsChainManager::current_roundis at leastChainOwnership::next_round(r), orRound::Validator(u32::MAX)if that isNone. - Timeout
Certificate Proves Round Reached - Lemma (A timeout certificate proves a correct validator’s round expired). If a valid
TimeoutCertificateis certified in roundrfor a chain and height, then some correct validator was in roundrat that height, with a configured round timeout that had elapsed. - Timeout
Vote Conditions - Lemma (Timeout vote conditions). A correct validator signs a
Timeoutvote in roundronly if, at that moment: