Expand description
The safety proof: at most one block is ever committed per chain and height.
The argument has one non-trivial step, LockPreservation, an induction over rounds showing
that once a block is committed no later round can validate anything else. Everything before
it is local implementation properties and per-round uniqueness; everything after it is
bookkeeping.
Nothing in this module depends on synchrony, on message delivery, or on any validator being
responsive. Safety holds in every execution permitted by
MaxByzantineWeight, including ones where
the protocol makes no progress at all.
Traits§
- Accountability
- Remark (Agreement failure is attributable). The converse of
CommitAgreement: when it fails, the failure is not silent. Two conflicting confirmed certificates are self-contained evidence convicting validators of at leastvalidity_thresholdweight, and no correct validator is ever convictable. - Commit
Agreement - Theorem (Commit agreement). For a given chain and height, all valid
ConfirmedBlockCertificates certify the same block. Equivalently: no two conflicting blocks (ConflictingBlocks) are ever both committed. - Fast
Retry Preserves Block - Lemma (A fast retry cannot change the block). Let a block
Abe confirmed inRound::Fast, and let a correct validator later cast a validation vote for a blockBon a proposal whoseOriginalProposal::FastretriesA’s proposal. ThenB = A. - Lock
Preservation - Theorem (Lock preservation). Suppose a valid
ConfirmedBlockCertificatefor a blockAis certified in roundr, at some height of some chain. Then for every rounds ≥ r, every validValidatedBlockCertificateat that height and roundscertifiesA. - Safety
Scope - Remark (What safety does not claim). Three exclusions are worth stating explicitly,
because each is a property a reader may expect
CommitAgreementto carry and it does not. - Unique
Chain - Theorem (The committed chain is unique). For each chain there is at most one sequence of
committed blocks: the committed blocks at heights
0, 1, 2, …form a single hash-linked list, and any two correct validators’block_hashesagree wherever both are defined. In particular the committed prefixes observed by correct validators are always compatible — one is a prefix of the other. - Unlocking
Justification - Lemma (Unlocking justification). Let a correct validator cast a validation vote for
Bin rounds, and let(A, p)be its stored confirmation vote immediately before, withA ≠ B. Then a validValidatedBlockCertificateforBexists in some roundtwithp < t < s.