ChainSafe / ChainSafe/lodestar
Builder and proposer preferences are lost on beacon node restart
- Dominant language
- TypeScript
- Stars
- 1.4k
- Forks
- 483
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 156
Description
The validator client submits proposer preferences and builder preferences once per proposal slot within the `SUBMIT_BEFORE_PROPOSAL_SLOTS` window and tracks submissions per dependent root, so a successful submission is never repeated unless the proposer shuffling shifts.
The beacon node keeps preferences in memory only. A restart between the submission and the proposal empties the pool, and peers do not re-gossip preferences they already sent, so bid validation at the proposal fails with `No proposer preferences found` for gossip and builder api bids alike, forcing a self-build even though builders hold the preferences and are bidding.
Options, not mutually exclusive:
- resubmit every slot within the submission window and rely on pool dedup instead of tracking submitted slots in the validator client
- resubmit when the validator client detects a beacon node restart
- persist the preferences pools on the beacon node
Related to #9919 since a combined service would only need the fix once.
Contributor guide
Research direction
Start by tracing the validator client's proposer and builder preference submission tracking and the beacon node's in-memory preference pools. Compare the proposed resubmission, restart detection, and persistence approaches, including the relationship to #9919. Done means preferences remain available after a beacon node restart so gossip and builder API bids validate instead of producing “No proposer preferences found”.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- blockchain, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100