libp2p is a Peer-to-Peer networking stack, with implementations in multiple languages derived from the same specifications.
Building large scale peer-to-peer systems has been complex and difficult in the last 15 years and libp2p is a way to fix that. It's striving to be a modular stack, with sane and secure defaults, useful protocols, while remain open and extensible. This implementation in native Nim, relying on chronos for async. It's used in production by a few projects
Learn more about libp2p at libp2p.io and follow libp2p's documentation docs.libp2p.io.
Prerequisite
The currently supported Nim version is 1.6.18.
nimble install libp2p
You'll find the nim-libp2p documentation here.
Remember you'll need to build the go-libp2p-daemon
binary to run the nim-libp2p
tests.
To do so, please follow the installation instructions in daemonapi.md.
List of packages modules implemented in nim-libp2p:
Name | Description |
---|---|
Libp2p | |
libp2p | The core of the project |
connmanager | Connection manager |
identify / push identify | Identify protocol |
ping | Ping protocol |
libp2p-daemon-client | go-daemon nim wrapper |
interop-libp2p | Interop tests |
Transports | |
libp2p-tcp | TCP transport |
libp2p-ws | WebSocket & WebSocket Secure transport |
libp2p-tor | Tor Transport |
Secure Channels | |
libp2p-noise | Noise secure channel |
libp2p-plaintext | Plain Text for development purposes |
Stream Multiplexers | |
libp2p-mplex | MPlex multiplexer |
libp2p-yamux | Yamux multiplexer |
Data Types | |
peer-id | Cryptographic identifiers |
peer-store | "Address book" of known peers |
multiaddress | Composable network addresses |
signed envelope | Signed generic data container |
routing record | Signed peer dialing informations |
discovery manager | Discovery Manager |
Utilities | |
libp2p-crypto | Cryptographic backend |
libp2p-crypto-secp256k1 | |
Pubsub | |
libp2p-pubsub | Pub-Sub generic interface |
libp2p-floodsub | FloodSub implementation |
libp2p-gossipsub | GossipSub implementation |
nim-libp2p is used by:
nim-libp2p has been used in production for over a year in high-stake scenarios, so its core is considered stable. Some modules are more recent and less stable.
The versioning follows semver, with some additions:
.public.
, they will remain compatible during each MAJOR
versionMINOR
version (but remain compatible for each new PATCH
)We aim to be compatible at all time with at least 2 Nim MINOR
versions, currently 1.6 & 2.0
Clone and Install dependencies:
git clone https://github.com/vacp2p/nim-libp2p
cd nim-libp2p
# to use dependencies computed by nimble
nimble install -dy
# OR to install the dependencies versions used in CI
nimble install_pinned
Run unit tests:
# run all the unit tests
nimble test
This requires the go daemon to be available. To only run native tests, use nimble testnative
.
Or use nimble tasks
to show all available tasks.
The libp2p implementation in Nim is a work in progress. We welcome contributors to help out! Specifically, you can:
Tanguy (Menduist) |
Ludovic |
Diego |
Enable expensive metrics (ie, metrics with per-peer cardinality):
nim c -d:libp2p_expensive_metrics some_file.nim
Set list of known libp2p agents for metrics:
nim c -d:libp2p_agents_metrics -d:KnownLibP2PAgents=nimbus,lighthouse,lodestar,prysm,teku some_file.nim
Specify gossipsub specific topics to measure in the metrics:
nim c -d:KnownLibP2PTopics=topic1,topic2,topic3 some_file.nim
Licensed and distributed under either of
or
at your option. These files may not be copied, modified, or distributed except according to those terms.