You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[r3.4] cl/gossip: fix conditions forwarding, ENR lifecycle, and epoch-mismatch (#20777)
## Summary
Cherry-pick of #20772 to `release/3.4`.
- **Root cause fix**: `registerGossipService` silently dropped
`conditions` (including `waitReady`), causing gossip messages to be
processed when the node was behind — leading to false committee
membership rejections and legitimate peers being banned via
`ValidationReject`
- **ENR lifecycle**: Fix redundant `UpdateENR*` calls on every expiry
renewal (caused `[Sentinel] Updated subnet` log flooding), and add
missing ENR bit clearing in `Remove()`/`Unsubscribe()`
- **Epoch-mismatch guard**: Early `ErrIgnore` return when head state
epoch differs from attestation/aggregate epoch, preventing stale RANDAO
committee computations
- **Log noise**: Demote `[Sentinel] Updated subnet` from `Info` to
`Debug`
- **Regression test**: Verify conditions are forwarded in
`registerGossipService`
## Test plan
- [x] `go build ./cl/...` compiles on release/3.4
- [x] `TestAttestation`, `TestAggregate*`, gossip tests all pass
- [ ] Deploy on Hoodi testnet and verify no more false rejections or ENR
log flooding
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
// [IGNORE] the epoch of aggregate.data.slot is either the current or previous epoch (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) -- i.e. compute_epoch_at_slot(aggregate.data.slot) in (get_previous_epoch(state), get_current_epoch(state))
//return errors.New("attester is not a member of the committee")
257
264
returnfmt.Errorf("attester is not a member of the committee. attester index %d committeeIndex %v", att.SingleAttestation.AttesterIndex, committeeIndex)
0 commit comments