CN-FORGE-04
CN derived enforcedProducer-side Praos VRF construction must match the Conway/Praos validator authority: the leader VRF proof alpha, the leader-schedule evidence, the LeaderScheduleAnswer.expected_vrf_input contract, and the self_accept header verification must all use ONE era-correct Praos construction. For Conway/Praos the producer alpha MUST equal the validator alpha (praos_vrf_input(slot, eta0) = blake2b256(slot||eta0) + vrfLeaderValue range-extension), NOT the TPraos role-tagged alpha (slot||eta0||0x4C). No verification/construction fallback may accept both TPraos and Praos VRF inputs — for a given era/protocol version there is exactly one VRF transcript authority.
- Source
docs/planning/phase4-n-w-praos-vrf-migration.md; docs/clusters/completed/PHASE4-N-V/CLOSURE.md
- Cluster
- PHASE4-N-W
- Introduced in
- PHASE4-N-W
Enforcement trace
Code
Tests 5
- forge_to_self_accept_succeeds
- praos_call_with_tpraos_answer_emits_vrf_input_mismatch
- tpraos_producer_forge_fails_closed_with_unsupported_era
- is_praos_only_babbage_and_conway
- query_uses_state_epoch_nonce_for_vrf_input
Cross-references
Attack rationale
A producer that builds leader VRF proofs with the wrong era's alpha forges blocks the network rejects (block-production silently fails). Worse, a both-alphas verification/construction fallback would be a dual-semantic VRF surface — two valid interpretations of the same transcript — a consensus-split vector. Exactly one era-correct Praos VRF authority is required.
Evidence notes
Enforced by PHASE4-N-W. The producer leader-eligibility VRF is built via the single era→construction authority leader_vrf_input (ade_core::consensus::vrf_cert): Praos eras take praos_vrf_input(slot,eta0) + the praos_leader_value threshold; the era-tagged ExpectedVrfInput enum makes a TPraos alpha in a Praos context unrepresentable. crates/ade_node/tests/forge_succeeds.rs::forge_to_self_accept_succeeds asserts ForgeSucceeded — the producer forges a Conway block its own validator accepts via the SAME verify_praos_vrf — and CN-FORGE-01 gained its 'ForgeSucceeded reachable' strengthening at the same time. ci/ci_check_producer_praos_vrf.sh enforces six guards (single authority; no bare vrf_input( on the producer path; TPraos vrf_input/VrfRole preserved for validation; UnsupportedProducerEra fail-closed; no both-alphas fallback outside vrf_cert; leader_value_for threshold).