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
{{ message }}
Repository navigation
Sync committee duties missed for exited validators still in the committee period #4711
When a validator exits, Charon immediately stops performing its sync committee duties — even though sync committee membership is fixed for the whole ~27h period and an exited validator remains obligated to produce sync committee messages (and contributions) until that period ends. The beacon node keeps assigning it sync duties, so these are actively missed.
Root cause
Charon filters validators by ValidatorState.IsActive() (true only for active_ongoing/active_exiting/active_slashed). Once a validator reaches exited_unslashed/exited_slashed, it is dropped at every sync-committee gate:
core/validatorapi.SubmitSyncCommitteeMessages — rejects the VC's message with validator not found. This is the primary miss: sync messages are VC-pushed and never touch the scheduler, so this gate alone breaks them.
core/validatorapi.SubmitSyncCommitteeContributions and SyncCommitteeSelections — same rejection for the aggregation path.
core/scheduler.resolveActiveValidators — excludes exited validators, so DutySyncContribution is never scheduled.
Note the VC still learns it is in the committee, because Charon proxies SyncCommitteeDuties straight to the beacon node unfiltered — so the VC dutifully signs and pushes messages that Charon then rejects.
Expected behaviour
Sync committee duties (messages, contributions, selections) should be performed for validators that have exited but are still within their sync committee period (state exited_*, not yet withdrawal_*). Attestation and proposal duties must remain active-only — an exited validator must not attest or propose.
Affected versions
All released versions with sync committee support. Fix targeted at v1.11.1.
Activity