Skip to main content

DeterministicExecution

Trait DeterministicExecution 

Source
pub trait DeterministicExecution { }
Expand description

Assumption (Deterministic execution). For a fixed chain state at a height, a fixed ProposedBlock, a fixed set of published blobs and a fixed multi-leader round argument, block execution returns a unique BlockExecutionOutcome.

This is what makes ConflictingBlocks a property of the proposal in the cases where the protocol re-executes rather than re-uses a certified outcome. Two correct validators handed the same proposal at the same height therefore compute the same Block.

Residual obligation. The round argument is Round::multi_leader, so an outcome may in principle depend on the round — the round is readable as an oracle (OracleResponse::Round). This matters in exactly one place, FastRetryPreservesBlock, where a block confirmed in Round::Fast is re-executed in a later round. The gap is closed there by the fast round’s own restriction (WorkerError::FastBlockUsingOracles rejects a fast block that recorded any oracle response), plus determinism: an execution that never queried the round oracle cannot diverge on the round’s value. Note that the restriction is checked only when the proposal’s round is fast, so the retry itself is not re-checked; the argument leans on determinism of the execution engine rather than on a runtime check at the retry.

Implementors§