Skip to content

Implement proposer-equivocation reorg in getProposerHead #9764

Description

@nflaig

Description

The current phase0 fork-choice spec adds another branch to get_proposer_head that reorgs a weak previous-slot head when the proposer equivocated:

elif all([head_weak, current_time_ok, proposer_equivocation]):
    return parent_node

This base behavior applies across forks. The Gloas version retains the same equivocation branch, but additionally preserves the selected parent's payload status.

Lodestar's current getProposerHead() only follows the regular proposer-reorg path. It does not check for proposer equivocation and still requires the normal conditions, including isParentStrong().

This is related to the Gloas should_apply_proposer_boost rule: when the next proposer sees a weak equivocating head, it is expected to build on the parent. Unlike should_apply_proposer_boost, this get_proposer_head branch considers any known equivocation and does not apply a PTC-timeliness filter.

Specs:

Related:

Expected behavior

Across forks, return the parent when:

  • the head is weak
  • the head is from the previous slot (current_time_ok)
  • another block from the same proposer and slot is known

For Gloas, preserve the correct parent payload status when returning the parent.

Add coverage for the equivocation branch. If #9757 provides the underlying observation data, keep its builder-facing semantics separate from the fork-choice integration and define whether this rule should consume signature-verified roots or only blocks imported into fork choice. The spec currently checks store.blocks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    spec-gloasIssues targeting the Glamsterdam spec version

    Type

    No type

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions