Invariants / DC-CINPUT-03

DC-CINPUT-03

DC derived enforced

The producer Praos VRF leader/header input is praos_vrf_input(slot, eta0) = blake2b256(slot_be8 ‖ eta0_32) (= cardano mkInputVRF), where eta0 is the Cardano epoch nonce carried by the recovered SeedEpochConsensusInputs and overlaid onto chain_dep at WarmStart (T-REC-04). A forged Conway header therefore verifies under a real peer's mkInputVRF(slot, eta0). The VRF variant is UNCHANGED -- IETF draft-03, 80-byte proof (verified against real mainnet + preprod Conway headers, both draft-03); the fix is the recovered eta0 SOURCING, not the crypto. No draft-13/batch-compat migration, no C1-only branch, no genesis-derived nonce.

Source

docs/clusters/PHASE4-N-F-G-N/cluster.md

Cluster
PHASE4-N-F-G-N
Introduced in
PHASE4-N-F-G-N

Enforcement trace

Tests 3

  • warm_start_overlays_recovered_eta0_onto_chain_dep_g_n
  • pinning_praos_vrf_input_and_threshold_match_fixture
  • recovered_surface_projects_pooldistrview_and_expected_vrf_input

Cross-references

Evidence notes

PHASE4-N-F-G-N S1 (2026-06-04). The Praos VRF input construction (praos_vrf_input) + the draft-03 crypto were PROVEN correct against real Conway headers (Ade's verify_praos_vrf verifies real mainnet Conway-576 + preprod headers; both 80-byte draft-03 -- the draft-13/batch-compat theory was measured dead). So the only defect was the eta0 SOURCING: the forge signed over the snapshot's ZERO placeholder instead of the recovered seed-epoch eta0. DC-CINPUT-03 binds the VRF input to the recovered-and-overlaid sidecar eta0 (T-REC-04). pinning_praos_vrf_input_and_threshold_match_fixture pins praos_vrf_input(slot, recovered chain_dep.epoch_nonce) against the genesis fixture; warm_start_overlays_recovered_eta0_onto_chain_dep_g_n proves the recovered eta0 reaching chain_dep is the sidecar's. Operator-gated live confirmation under RO-LIVE-01 (CE-G-N-2).