Serving range
eth/69 and later peers advertise the inclusive range of full blocks and receipts that they can serve. Headers are assumed to remain available from genesis.
Status carries the initial earliest, latest, and latest-hash. The
latest hash binds the upper number to a chain branch.
BlockRangeUpdate sends the same three fields when the range changes. A node
does not need to send one for every head. The specification recommends an
update about every two minutes.
Peer selection
A syncing node chooses peers whose ranges cover the required bodies and receipts. It can still request headers from a peer whose body range starts later.
The range is an advertisement. Successful GetBlockBodies and GetReceipts
responses provide evidence that the peer can serve it.
Validation
A receiver disconnects when earliest is greater than latest. It also checks
that latest-hash identifies the advertised latest block.
A client does not disconnect every syncing peer only because its latest value lags. It keeps enough peers that can advance the local sync.
Failure handling
- Reject an inverted range.
- Treat out-of-range empty responses as normal.
- Track repeated in-range failures as a peer-quality signal.
- Account for reorgs before treating a changed latest hash as false data.
- Do not infer body or receipt availability outside the advertised range.
Design rationale
History expiry makes peer storage heterogeneous. An explicit range lets a requester select peers without probing many old block hashes.
History
eth/69 added the range to Status and introduced BlockRangeUpdate.