Author Jose Storopoli
Owner Jose Storopoli
Due Date 2025-05-31
Target Audience Enginners/Protocol Developers
Status Draft

Introduction

The P2P library will be used as a scaffold to build P2P implementations either as a standalone binary or embedded in other binaries. The library is to be primarily used as a common set of P2P features and basal implementations that all P2P applications need to have in order to operate as a P2P node.

Hence, the P2P library is a basic library that provides easy-to-use abstractions for other libraries to implement specific P2P node use cases: we call these libraries "service libraries". Eventually a binary, either a standalone or a shared binary, will implement the specific P2P service libraries to run a P2P runtime.

The P2P library must be compatible with LibP2P’s protocols, libraries, and primitives. It is recommended that the P2P library use the LibP2P’s libraries directly which provides best guarantees for protocol compliance, code quality; and performance and security concerns.

Technical specifications

The P2P specification is composed of:

  1. Authentication: using only ed25519.
  2. Bring your own signer (BYOS) feature.
  3. Agnostic to serialization schema.
  4. Transports: TCP ipv4 and ipv6 (legacy/fallback) and QUIC ipv4 and ipv6 (default).
  5. Gossip: gossipsub with IWANT/IHAVE features.
  6. Distributed peer discovery.
  7. Request-response.

Authentication

LibP2P implementations must support Ed25519 ****keys and signatures. Ed25519 is the most well-implemented and supported authentication method in LibP2P; and the only one that is mandatory to be supported in the protocol.

Ed25519 is generally preferred over ECDSA on secp256k1 (what the v1 of this spec used) for authentication for several important reasons: