AlertSourceDiscuss
Skip to content

EIP-7542: eth/69 - available-blocks-extended protocol

Adds more info in the handshake about available block range and adds message types to request block ranges and the send them

⚠️ DraftNetworking

Draft Notice

This EIP is in the process of being drafted. The content of this EIP is not final and can change at any time; this EIP is not yet suitable for use in production. Thank you!

AuthorsAhmad Bitar <smartprogrammer@windowslive.com> (@smartprogrammer93)
Created2023-10-21

Abstract

The purpose of this EIP is to introduce a method that allows an Ethereum node to communicate the range of blocks it has available. By knowing the block range a node can serve, peers can make more informed decisions when choosing whom to connect to, especially when looking for specific block ranges. This can lead to more efficient network behavior.

This EIP proposes extending the Ethereum wire protocol (eth) handshake, introducing a new version, eth/69, which will contain information regarding the block range a node can serve. Furthermore, it extends the protocol with 2 new message types to share the updated block ranges when requested.

Motivation

There are scenarios where nodes might be interested in specific block ranges, such as when syncing historical data or analyzing past transactions. Currently, nodes need to connect to peers and request specific blocks to determine if a peer has the required data. This can be inefficient, leading to unnecessary data requests and wasting both bandwidth and time.

This also can count as a step towards implementing EIP-4444.

Specification

  • Advertise a new eth protocol capability (version) at eth/69.

    • The old eth/68 protocol should still be kept alive side-by-side, until eth/69 is sufficiently adopted by implementors.
  • Modify the Status (0x00) message for eth/69 to add an additional blockRange field right after the forkid:

    • Current packet for eth/64: [protocolVersion, networkId, td, bestHash, genesisHash, forkid]
    • New packet for eth/69: [protocolVersion, networkId, td, bestHash, genesisHash, forkid, blockRange], where blockRange is [startBlock: uint64, endBlock: uint64].
  • Introduce two new message types:

    • RequestBlockRange (0x0b) - A message from a node to request the current block range of a peer.
    • SendBlockRange (0x0c): [startBlock: uint64, endBlock: uint64] - The response to RequestBlockRange, informing the requesting node of the current available block range of the peer.

Upon connecting using eth/69, nodes should exchange the Status message. Afterwards, they can use the RequestBlockRange and SendBlockRange messages to keep informed about peer block range changes.

Nodes must retain connections regardless of a peer's available block range, with an exception, if a node's peer slots are full and it lacks connections to peers with the necessary block range, it may disconnect to seek such peers.

Rationale

Including the available block range in the eth handshake allows for immediate understanding of peer capabilities. This can lead to more efficient networking as nodes can prioritize connections based on the data they need. The new message types are introduced to allow nodes to reuqest updated available block range from other nodes since the range can change by the node syncing or pruning blocks. Maintaining connections with peers that dont have the desired range ensures network resilience, while the exception facilitates efficient block sync under full peer capacity.

Backwards Compatibility

This EIP extends the eth protocol handshake in a backwards incompatible manner and proposes the introduction of a new version, eth/69. However, devp2p allows for multiple versions of the same wire protocol to run concurrently. Hence, nodes that have not been updated can continue using older versions like eth/68 or eth/67.

This EIP doesn't affect the consensus engine and doesn't necessitate a hard fork.

Test Cases

Testing will involve ensuring that nodes can correctly communicate and understand the block range information during the handshake. Additionally, it will involve ensuring nodes can correcly request and share updated block range when requested.

Security Considerations

None

Copyright and related rights waived via CC0.

Citation

Please cite this document as:

Ahmad Bitar, "EIP-7542: eth/69 - available-blocks-extended protocol[DRAFT]," Ethereum Improvement Proposals, no. 7542, 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7542.