* Add `Kademlia::put_record_to` for storing a record at specific nodes, e.g. for write-back caching after a successful read. In that context, peers that were queried in a successful `Kademlia::get_record` operation but did not return a record are now returned in the `GetRecordOk::no_record` list of peer IDs. Closes https://github.com/libp2p/rust-libp2p/issues/1577. * Update protocols/kad/src/behaviour.rs Co-authored-by: Max Inden <mail@max-inden.de> * Refine implementation. Rather than returning the peers that are cache candidates in a `Vec` in an arbitrary order, use a `BTreeMap`. Furthermore, make the caching configurable, being enabled by default with `max_peers` of 1. By configuring it with `max_peers` > 1 it is now also possible to control at how many nodes the record is cached automatically after a lookup with quorum 1. When enabled, successful lookups will always return `cache_candidates`, which can be used explicitly with `Kademlia::put_record_to` after lookups with a quorum > 1. * Re-export KademliaCaching * Update protocols/kad/CHANGELOG.md Co-authored-by: Max Inden <mail@max-inden.de> * Clarify changelog. Co-authored-by: Max Inden <mail@max-inden.de>
Central repository for work on libp2p
This repository is the central place for Rust development of the libp2p spec.
Warning: While we are trying our best to be compatible with other libp2p implementations, we cannot guarantee that this is the case considering the lack of a precise libp2p specifications.
Documentation
How to use the library?
- Main documentation: https://docs.rs/libp2p
Where to ask questions?
- In the Rust section of https://discuss.libp2p.io.
- In the #libp2p IRC channel on freenode.
- By opening an issue in this repository.
Repository Structure
The main components of this repository are structured as follows:
-
core/
: The implementation oflibp2p-core
with itsNetwork
,Transport
andStreamMuxer
API on which almost all other crates depend. -
transports/
: Implementations of transport protocols (e.g. TCP) and protocol upgrades (e.g. for authenticated encryption, compression, ...) based on thelibp2p-core
Transport
API . -
muxers/
: Implementations of theStreamMuxer
interface oflibp2p-core
, e.g. (sub)stream multiplexing protocols on top of (typically TCP) connections. Multiplexing protocols are (mandatory)Transport
upgrades. -
swarm/
: The implementation oflibp2p-swarm
building onlibp2p-core
with the central interfacesNetworkBehaviour
andProtocolsHandler
used to implement application protocols (seeprotocols/
). -
protocols/
: Implementations of application protocols based on thelibp2p-swarm
APIs. -
misc/
: Utility libraries. -
examples/
: Worked examples of built-in application protocols (seeprotocols/
) with commonTransport
configurations.
Notable users
(open a pull request if you want your project to be added here)
- https://github.com/paritytech/polkadot
- https://github.com/paritytech/substrate
- https://github.com/sigp/lighthouse
- https://github.com/golemfactory/golem-libp2p
- https://github.com/comit-network
- https://github.com/rs-ipfs/rust-ipfs
- https://github.com/marcopoloprotocol/marcopolo
- https://github.com/ChainSafe/forest