Skip to content

Do not apply proposer boost to equivocated blocks in Gloas - #5535

Closed
twoeths wants to merge 1 commit into
ethereum:masterfrom
twoeths:te/withhold_proposer_boost_on_proposer_equivocation_post_gloas
Closed

Do not apply proposer boost to equivocated blocks in Gloas#5535
twoeths wants to merge 1 commit into
ethereum:masterfrom
twoeths:te/withhold_proposer_boost_on_proposer_equivocation_post_gloas

Conversation

@twoeths

@twoeths twoeths commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Motivation

  • in glamsterdam-devnet-7, there are 2 blocks from the same proposer at slot 182523, lodestar received the orphaned first and boosted it. Nodes were stuck for a while then some slots later, this node built on this orphaned block. I think in this case, node should make a fair computation to know which block is head based on attestation scores only (not on proposer score).
  • unbundling attack is not an issue post-gloas anymore, because the payload needs to commit to the block bid, so we don't need Apply proposer boost to first block in case of equivocation #3352 for gloas

Description

  • for gloas forkchoice, should_apply_proposer_boost() should return false if proposer is equivocation
  • add comments to still process and track equivocated blocks in forkchoice

Related to #3352

@github-actions github-actions Bot added testing CI, actions, tests, testing infra phase0 gloas labels Aug 12, 2026
@twoeths
twoeths marked this pull request as ready for review August 12, 2026 07:34
@twoeths

twoeths commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

discussed again with @nflaig and figured out it's not really an issue

Screenshot 2026-08-12 at 18 08 13

the notes in the p2p could be helpful anyway (lodestar actually missed that, it's handled in ChainSafe/lodestar#9805)

@twoeths twoeths closed this Aug 12, 2026
@twoeths
twoeths deleted the te/withhold_proposer_boost_on_proposer_equivocation_post_gloas branch August 12, 2026 11:10
Comment on lines +640 to 644
# Note: Implementations SHOULD still pass this block to `on_block` so both blocks enter
# `store.blocks` and `is_proposer_equivocation()` can observe the equivocation.
proposer_slot_key = (block.slot, block.proposer_index)
if proposer_slot_key in seen.proposer_slots:
raise GossipIgnore("block is not the first valid block for this slot and proposer")

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.

the executable gossip spec could do this now, ie. add equivocating blocks to fork choice store, this is required in several places in fork choice, eg. should_apply_proposer_boost or get_proposer_head

but doing this here seems wrong to me, so the comment says first block with valid signature but at that point, there was no signature check yet

the signature check is done further below on line 651 and also noticed we do the signature check before the proposer check itself, it seems same in lodestar but need to double check why that is

but if we wanna add a equivocating block via on_block it probably has to be done at the end of gossip validation unless we are fine with skipping some gossip checks

cc @jtraglia

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gloas phase0 testing CI, actions, tests, testing infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants