Invariants / DC-CONS-04

DC-CONS-04

DC derived enforced

Praos chain-dep state (evolving/candidate/epoch/previous_epoch/lab/last_epoch_block nonces, op-cert counters, last_slot) is owned by N-B consensus, not by the ledger, and evolves deterministically as a function of validated headers and epoch boundaries.

Source

Project constitution §3, ouroboros-consensus PraosChainDepState

Enforcement trace

Tests 49

  • consensus::praos_state::tests::op_cert_upsert_rejects_regression
  • consensus::praos_state::tests::op_cert_upsert_accepts_equal_counter_as_noop
  • consensus::praos_state::tests::op_cert_upsert_accepts_monotonic_increasing
  • consensus::praos_state::tests::genesis_state_is_well_formed
  • consensus::praos_state::tests::nonce_zero_constant_is_zero_bytes
  • consensus::encoding::tests::op_cert_counter_map_iteration_is_deterministic
  • layout_is_stable
  • roundtrip_empty_state
  • roundtrip_genesis_state
  • roundtrip_populated_state
  • roundtrip_chain_event_all_variants
  • roundtrip_chain_selection_reject_all_variants
  • decode_rejects_unknown_discriminant
  • decode_rejects_short_array
  • op_cert_counter_map_iteration_is_deterministic
  • consensus::nonce::tests::header_contribution_rejects_non_monotonic_slot
  • consensus::nonce::tests::header_contribution_advances_evolving_nonce_deterministically
  • consensus::nonce::tests::header_contribution_does_not_touch_epoch_nonce
  • consensus::nonce::tests::candidate_freeze_copies_evolving_to_candidate
  • consensus::nonce::tests::candidate_freeze_does_not_advance_slot
  • consensus::nonce::tests::epoch_boundary_promotes_candidate_to_epoch_nonce
  • consensus::nonce::tests::epoch_boundary_rotates_previous_epoch_nonce
  • consensus::nonce::tests::epoch_boundary_rejects_uninitialised_candidate
  • consensus::nonce::tests::epoch_boundary_preserves_op_cert_counters
  • consensus::nonce::tests::epoch_boundary_preserves_lab_nonce
  • consensus::nonce::tests::blake2b_input_order_is_evolving_then_vrf_output_first_32
  • within_epoch_evolving_nonce_matches_corpus
  • epoch_boundary_freezes_and_rotates_correctly
  • nonce_evolution_replay_is_deterministic
  • consensus::op_cert::tests::apply_op_cert_inserts_first_observation
  • consensus::op_cert::tests::apply_op_cert_advances_existing_strictly
  • consensus::op_cert::tests::apply_op_cert_accepts_equal_counter_as_noop
  • consensus::op_cert::tests::apply_op_cert_rejects_lower_counter
  • consensus::op_cert::tests::apply_op_cert_independent_kes_periods_dont_collide
  • consensus::op_cert::tests::apply_op_cert_independent_pools_dont_collide
  • consensus::op_cert::tests::apply_op_cert_does_not_touch_nonces
  • consensus::op_cert::tests::apply_op_cert_does_not_touch_last_slot_or_block_no
  • normal_progression_records_highest_counter_per_window
  • regression_after_progression_rejected_with_typed_error
  • op_cert_replay_is_deterministic
  • consensus::header_validate::tests::pipeline_short_circuits_on_first_failure
  • consensus::header_validate::tests::nonce_contribution_uses_nonce_role_vrf_output_not_leader_role
  • valid_header_accepted_advances_state
  • header_with_slot_regression_rejected
  • header_with_block_no_regression_rejected
  • header_with_op_cert_regression_rejected
  • header_with_invalid_vrf_proof_rejected
  • header_beyond_forecast_horizon_rejected
  • validate_replay_is_deterministic

Cross-references

Strengthened in