Skip to main content

FirstRoundSoundness

Trait FirstRoundSoundness 

Source
pub trait FirstRoundSoundness:
    UnforgeableSignatures
    + VoteConstructionSites
    + ConfirmationOnlyInCurrentRound
    + RoundFloor
    + LeaderEligibility
    + ConsensusInstance { }
Expand description

Lemma (First-round attestations are never honestly contradicted). No correct validator is named by an accepted FirstRoundViolation proof.

Proof. An accepted proof exhibits v’s confirmation vote at round a carrying the attestation, and v’s confirmation vote at a round b < a on the same chain and height; by UnforgeableSignatures a correct v cast both, in the same instance.

Both sites that set the attestation — the fast branch of ChainManager::create_vote and ChainManager::create_final_vote (VoteConstructionSites) — compute it as round == self.ownership.get().first_round(). The ownership register has exactly one writer, ChainManager::reset, which by ConsensusInstance begins the instance, so first_round() is a constant φ throughout. The attestation at a therefore gives a = φ.

Now consider the vote at b < a = φ. By VoteConstructionSites it is either:

Implementors§