lidofinance / lidofinance/validator-ejector

Incomplete consensus batches advance the cursor past valid exit requests

Open
#196 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
16
Forks
19
Avg merge
1d 20h
Merged PRs (30d)
7

Description

Locations

Summary

A successful CL batch response may omit requested validators without failing validation. Events for omitted validators are treated as invalid and discarded before the execution-log cursor advances beyond them.

Root cause

validatePublicKeys accepts the partial result returned by fetchValidatorsBatch, logs each missing index, and returns a reduced set rather than reporting an indeterminate batch.

  • getValidatorExitRequestEvents filters events solely through that reduced set.
  • makeExitLogsService.getLogs cannot distinguish dependency omission from deterministic identity rejection and advances the block header unconditionally.

Impact

A stale, syncing, or otherwise incomplete CL response can suppress required validator exits even if another configured endpoint has complete state.

  • The HTTP 200 response does not activate endpoint fallback.
  • Any omitted subset of a batch can be lost for the lifetime of the process.
  • Recovery requires a restart within the configured lookback or an explicit historical rescan, supporting medium severity for temporary core ejection denial.

Scenario

  1. The EL returns a valid finalized ValidatorExitRequest whose index and pubkey match canonical CL state.
  2. The selected CL endpoint returns HTTP 200 but omits that index from the batch, for example while serving stale state.
  3. validatePublicKeys excludes the index without throwing, so the fetcher drops the event.
  4. The exit-log service treats the batch as successful and advances its header past the event's block.
  5. The CL endpoint later recovers, but ordinary cycles never reload the discarded request and no exit is dispatched.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the listed ranges in validator-ejector/src/services/consensus-api/service.ts, exit-logs/fetcher.ts, and exit-logs/service.ts, starting with validatePublicKeys and getValidatorExitRequestEvents. Trace how omitted validators reach makeExitLogsService.getLogs; done means an incomplete successful batch is not treated as complete, the cursor does not pass valid requests, and recovery or another configured endpoint can handle the omission.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.