pub trait ConfirmationNeedsValidatedCertificate: VoteConstructionSites + ProposalGate { }Expand description
Lemma (A non-fast confirmation requires a validated certificate in the same round). If a
correct validator casts a confirmation vote for block A in a round r other than
Round::Fast, then a ValidatedBlockCertificate
for A in round r, valid for the committee of its epoch, existed at that moment.
Code correspondence.
| transition | ChainManager::create_final_vote |
| reads | locking_block, current_round, ownership |
| writes | locking_block, locking_blobs, current_round, round_timeout, confirmed_vote, validated_vote |
| precondition | certificate.check(committee) and ChainManager::check_validated_block both succeeded (ProposalGate) |
| preserves | LockRoundMonotone, ConfirmedVoteRoundMonotone, CastValidationRoundFloor |
Proof. By VoteConstructionSites a confirmation vote in a non-fast round comes from
ChainManager::create_final_vote, whose vote round is validated.round for its
ValidatedBlockCertificate argument validated, and whose voted value is
ConfirmedBlock::new(validated.inner().block().clone()) — the same block. By
ProposalGate the caller verified certificate.check(&committee) before passing it in. ∎