Invariants / DC-CONS-04
DC-CONS-04
DC derived enforcedPraos 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
Code
- crates/ade_core/src/consensus/praos_state.rs
- crates/ade_core/src/consensus/events.rs
- crates/ade_core/src/consensus/errors.rs
- crates/ade_core/src/consensus/encoding.rs
- crates/ade_core/src/consensus/nonce.rs
- crates/ade_core/src/consensus/op_cert.rs
- crates/ade_core/src/consensus/header_validate.rs
- crates/ade_core/src/consensus/header_summary.rs
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