Skip to main content

RoundFloor

Trait RoundFloor 

Source
pub trait RoundFloor { }
Expand description

Lemma (Round floor). Let M denote

M = max( { ownership.first_round() }
       ∪ { ownership.next_round(timeout.round)  (or Round::Validator(u32::MAX) if none) }
       ∪ { locking_block.round() }
       ∪ { proposed.content.round }
       ∪ { signed_proposal.content.round } )

over whichever of the four optional fields are Some. Then the private ChainManager::update_current_round sets current_round to max(current_round, M), and resets round_timeout from ChainOwnership::round_timeout exactly when that raises the value.

Proof. Direct reading of the method: it builds an iterator over the four optional fields, mapping the timeout certificate through ownership.next_round(..).unwrap_or(Round::Validator( u32::MAX)), takes .max(), applies .unwrap_or_default() — and Round::default() is Round::Fast, the minimum (RoundOrder), so this adds nothing — and then .max(self.ownership.get().first_round()). That is M. It then returns early on current_round <= self.current_round(), and otherwise sets both round_timeout and current_round. ∎

Implementors§