libp2p implementation in Nim https://status-im.github.io/nim-libp2p/docs/
Go to file
Ludovic Chenut 79611638f9
[noci] try something new
2023-01-02 13:58:40 +01:00
.assets Documentation (#716) 2022-07-01 20:19:57 +02:00
.github Reuseable install_nim action (#803) 2022-11-21 16:56:04 +01:00
examples Limit number of streams per protocol per peer (#811) 2022-12-01 12:20:40 +01:00
libp2p [noci] try something new 2023-01-02 13:58:40 +01:00
scripts Enable gh actions to run on multiple platforms (#479) 2020-12-22 18:12:02 -06:00
tests Add Autonat timeout (#829) 2022-12-22 19:29:31 +00:00
tools Fix pinning system on devel (#820) 2022-12-14 12:10:00 +01:00
.appveyor.yml Gossip one one (#240) 2020-09-21 11:16:29 +02:00
.gitignore Docs rework (#776) 2022-09-28 10:40:53 +02:00
.pinned Fix pinning system on devel (#820) 2022-12-14 12:10:00 +01:00
LICENSE Initial commit 2018-11-19 03:58:31 +02:00
LICENSE-APACHEv2 Initialize travis and licenses. 2018-11-19 04:04:47 +02:00
LICENSE-MIT Initialize travis and licenses. 2018-11-19 04:04:47 +02:00
README.md Update README (#798) 2022-11-10 13:47:41 +01:00
codecov.yml Fix Codecov (#802) 2022-11-16 14:33:42 +01:00
config.nims Configuration refactoring (#732) 2022-09-01 14:00:22 +02:00
libp2p.nim Tron example (#775) 2022-10-30 08:49:02 +01:00
libp2p.nimble Fix pinning system on devel (#820) 2022-12-14 12:10:00 +01:00
mkdocs.yml Fix website (#812) 2022-12-01 12:20:17 +01:00
nimble.lock Fix pinning system on devel (#820) 2022-12-14 12:10:00 +01:00
nimdoc.cfg Documentation (#716) 2022-07-01 20:19:57 +02:00

README.md

nim-libp2p logo

The Nim implementation of the libp2p Networking Stack.

Table of Contents

Background

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.

Install

Prerequisite

nimble install libp2p

Getting Started

You'll find the nim-libp2p documentation here.

Go Daemon: Please find the installation and usage intructions in daemonapi.md.

Modules

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-secio Secio secure channel
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

Users

nim-libp2p is used by:

  • Nimbus, an Ethereum client
  • nwaku, a decentralized messaging application
  • nim-codex, a decentralized storage application
  • (open a pull request if you want to be included here)

Stability

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:

  • Some of libp2p procedures are marked as .public., they will remain compatible during each MAJOR version
  • The rest of the procedures are considered internal, and can change at any MINOR 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.2 & 1.6

Development

Clone and Install dependencies:

git clone https://github.com/status-im/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.

Contribute

The libp2p implementation in Nim is a work in progress. We welcome contributors to help out! Specifically, you can:

  • Go through the modules and check out existing issues. This would be especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it.
  • Perform code reviews. Feel free to let us know if you found anything that can a) speed up the project development b) ensure better quality and c) reduce possible future bugs.
  • Add tests. Help nim-libp2p to be more robust by adding more tests to the tests folder.

The code follows the Status Nim Style Guide.

Contributors

nim-libp2p contributors

Core Maintainers

Tanguy
Tanguy (Menduist)
Ludovic
Ludovic
Diego
Diego

Compile time flags

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

License

Licensed and distributed under either of

or

at your option. These files may not be copied, modified, or distributed except according to those terms.