Skip to content

Remove should_override_forkchoice_update#5174

Merged
jihoonsong merged 4 commits into
ethereum:masterfrom
ensi321:nc/remove-fcu-override
Jun 1, 2026
Merged

Remove should_override_forkchoice_update#5174
jihoonsong merged 4 commits into
ethereum:masterfrom
ensi321:nc/remove-fcu-override

Conversation

@ensi321

@ensi321 ensi321 commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

Currently with proposer boost reorg enabled, proposer of next slot can suppress fcu call (as laid out by should_override_forkchoice_update), if it thinks there is a chance the current head block can be reorged out. This is done so because EL could previously skip processing an engine_forkchoiceUpdated call if headBlockHash referenced any ancestor of the EL's current canonical head.

With ethereum/execution-apis#786, the EL can only skip an fcU if headBlockHash is an ancestor of the finalized block. Since reorg targets are always within the unfinalized chain, the EL must now process them. This makes should_override_forkchoice_update unnecessary. We can just rely on get_proposer_head to reorg without doing any prediction before hand.

This PR removes should_override_forkchoice_update itself and anything references it.

@github-actions github-actions Bot added testing CI, actions, tests, testing infra bellatrix labels Apr 27, 2026
@ensi321 ensi321 force-pushed the nc/remove-fcu-override branch from d003b9a to 4749210 Compare April 27, 2026 10:12
@michaelsproul

Copy link
Copy Markdown
Contributor

Amazing, I support this 100%. As the original author of should_override_forkchoice_update I always wished the ELs would be a bit more flexible in which blocks they allowed us to build on (ethereum/execution-apis#313).

@ensi321 ensi321 marked this pull request as ready for review April 27, 2026 12:42

@mkalinin mkalinin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! 👍

The corresponding Engine API change is applied since Paris/Bellatrix, so should_override_forkchoice_update may be completely dropped from the spec regardless of any forks.

One of the concerns is client update coordination. Using EL client that doesn’t yet support reorgs ancestors with CL client that dropped should_override_forkchoice_update support might cause issues. So, it’s probably better to include both changes into Gloas mainnet release and leverage on that natural point of coordination.

@jtraglia

jtraglia commented May 9, 2026

Copy link
Copy Markdown
Member

Hey @ensi321, there are some helper functions which only exist because of this deleted function. We should delete them too. Eg get_proposer_head, is_head_late, is_head_weak, is_parent_strong, and maybe more.

cc @mkalinin & @jihoonsong.

@mkalinin

Copy link
Copy Markdown
Contributor

Hey @ensi321, there are some helper functions which only exist because of this deleted function. We should delete them too. Eg get_proposer_head, is_head_late, is_head_weak, is_parent_strong, and maybe more.

cc @mkalinin & @jihoonsong.

I think should_override_forkchoice_update existed because of get_proposer_head. After this clean up the existence of latter will still be the case at least for some implementations. @potuz said it is fine to remove it from the spec though, I am doubtful and want to hear from others as well. cc @michaelsproul

@michaelsproul

michaelsproul commented May 11, 2026

Copy link
Copy Markdown
Contributor

I replied above 😅

I never wanted to have to write should_override_forkchoice_update, it was a necessity because of the (now relaxed) limitations of EL fcU handling.

LH will have to keep our implementation of should_override around for a while to maintain backwards compatibility, but we will relish the opportunity to delete it as soon as we can guarantee all the ELs have updated (probably our first post-Gloas release).

EDIT: misread, see below

@michaelsproul

Copy link
Copy Markdown
Contributor

Ohh my bad, I misread your comment. You wanted my take on deleting get_proposer_head?

It's not clear to me why it isn't necessary post-Gloas. If a beacon block is revealed late and gets 0 attestations don't we still want to be able to reorg it? And its payload?

@nflaig

nflaig commented May 11, 2026

Copy link
Copy Markdown
Member

It's not clear to me why it isn't necessary post-Gloas. If a beacon block is revealed late and gets 0 attestations don't we still want to be able to reorg it? And its payload?

I don't see why that would change with gloas, you can still earn more money by delaying the beacon block and give you more time before committing to a payload, timing games still exist

also you wanna punish the proposer for publishing late and not the honest attesters that missed the head vote?

@ensi321

ensi321 commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

imo we should keep get_proposer_head (and thus all other small helper functions like is_head_late) post-gloas because we still want to re-org out the late blocks. Proposers can pick a higher value bid by delaying publishing their blocks.

This PR is just to simplify the proposer boost re-org by no longer needing to override fcu.

@jtraglia

Copy link
Copy Markdown
Member

Okay, sounds good. Will let @jihoonsong review/merge this one, if and when he thinks it's ready.

@jihoonsong

Copy link
Copy Markdown
Member

Will take a good look next week.

@jihoonsong jihoonsong enabled auto-merge (squash) June 1, 2026 16:54
@jihoonsong jihoonsong merged commit e34dbbb into ethereum:master Jun 1, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bellatrix testing CI, actions, tests, testing infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants