Skip to content

Force the proposer to reorg late payloads - #5210

Merged
jtraglia merged 9 commits into
ethereum:masterfrom
potuz:payload_reorg
Jun 1, 2026
Merged

Force the proposer to reorg late payloads#5210
jtraglia merged 9 commits into
ethereum:masterfrom
potuz:payload_reorg

Conversation

@potuz

@potuz potuz commented May 6, 2026

Copy link
Copy Markdown
Contributor

Requires #5186

This makes the proposer reorg late payloads.

⚠️ We may want to add the conditions of the current honest reorg features to this PR, that is, we may want to short circuit this when the chain is not finalizing, when the head is not from the previous slot, etc. Leaving this as a placeholder until a decision is made on 5186 to revisit here.

potuz added 3 commits May 6, 2026 09:45
In the event the proposer has seen the payload timely and its local view
of DA passes, the node will have the payload verified. However, if the
PTC is signalling that the Payload blob data is not available, the proposer MUST
reorg the payload.

This PR implements this mechanism with a few caveats.

- Most importantly, currently it is very aggressive and if there are no
  PTC attestations the proposer will be forced to reorg the payload.
There are many solutions to this problem like simply counting the PTC
attestations (which is also a way of counting the NAY votes) or using
5180. If we go with 5180 this PR needs to be accomodated to that and
actually count the NAY votes.
- The threshold could be different than 50%.
- The proposer may have all the data available locally and decide to
  build on full even though the PTC voted no. I think it's better to
leave that unspecified.
@github-actions github-actions Bot added the gloas label May 6, 2026
@jtraglia

jtraglia commented May 6, 2026

Copy link
Copy Markdown
Member

@potuz please give this PR a better title & run make lint.

Comment thread specs/gloas/fork-choice.md Outdated
Comment thread specs/gloas/fork-choice.md Outdated
@jtraglia jtraglia changed the title Payload reorg Force the proposer to reorg late payloads May 15, 2026
@tbenr

tbenr commented May 26, 2026

Copy link
Copy Markdown
Contributor

what are the interactions with get_proposer_head?
I mean: if we do a full beacon block reorg, should we apply should_build_on_full on top of parent as well?
So can we be in a situation that we will build on top of parent's EMPTY, essentially reorging 2 payloads?

@potuz

potuz commented May 26, 2026

Copy link
Copy Markdown
Contributor Author

what are the interactions with get_proposer_head? I mean: if we do a full beacon block reorg, should we apply should_build_on_full on top of parent as well? So can we be in a situation that we will build on top of parent's EMPTY, essentially reorging 2 payloads?

I would rather not make get_proposer_head a mandatory specified thing so I did not want to make it explicit here. One argument to always apply it is that it is rational to do so and so we may see forks that do so. Another would be to also punish the builder in the case that a consensus client struggling to execute a late payload that sends its CL block late because of this and is therefore reorged (admittedly a stretch/bug).

Arguments to not use this would be to restrict to one payload reorgs instead of two.

At any rate I wouldn't want to be mentioning get_proposer_head here and would rather leave that to implementers instead. Neither type of reorgs can be enforced either way because attesters will anyway follow the proposer.

@tbenr

tbenr commented May 26, 2026

Copy link
Copy Markdown
Contributor

I'm leaning to apply it no matter what, which is what is in our current PR (which triggered me on the question).
It makes total sense to do what you would have done if you were the proposer of reorged beacon block (which is weak by definition).

@nflaig nflaig left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assuming we merge #5309, this looks good to me

@jtraglia jtraglia left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM & makes sense. I feel like the get_proposer_head question is resolved or no longer relevant, but if for whatever reason that is not true, we can follow up later with tweaks.

@jtraglia
jtraglia merged commit 268cd2b into ethereum:master Jun 1, 2026
15 checks passed
mergify Bot pushed a commit to sigp/lighthouse that referenced this pull request Jun 15, 2026
Changes implemented

Ensure bids are for a higher slot than their parent (ethereum/consensus-specs#5302)
Ignore PTC attestations for empty assigned slots (ethereum/consensus-specs#5281)
Limit should_build_on_full checks to the previous slot (ethereum/consensus-specs#5309)
Apply proposer boost if dependent roots match (ethereum/consensus-specs#5306)
Exclude slashed validators from proposing (EIP-8045) (ethereum/consensus-specs#5115)
Force the proposer to reorg late payloads (ethereum/consensus-specs#5210)
Remove support for old deposit mechanism in Fulu (ethereum/consensus-specs#4704)


  


Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>

Co-Authored-By: Eitan Seri-Levi <eserilev@gmail.com>

Co-Authored-By: Michael Sproul <michael@sigmaprime.io>

Co-Authored-By: Michael Sproul <michaelsproul@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants