Skip to main content
netspecsEthereum networking

4.1.4.History serving

Stage
Current
Validity
Active non-fork protocol.
Sources
2 pinned sources

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.