- Use new provider record update strategy to prevent Sybil attack. See PR 5536.
- Included multiaddresses of found peers alongside peer IDs in
GetClosestPeers
query results. See PR 5475 - Changed
FIND_NODE
response: now includes a list of closest peers when querying the recipient peer ID. Previously, this request yielded an empty response. See PR 5270. - Update to DHT republish interval and expiration time defaults to 22h and 48h respectively, rationale in libp2p/specs#451. See PR 3230.
- Use default dial conditions more consistently. See PR 4957
- QueryClose progress whenever closer in range, instead of having to be the closest. See PR 4934.
- Add periodic and automatic bootstrap. See PR 4838.
- Make it mandatory to provide protocol names when creating a
kad::Config
. Deprecatekad::Config::default()
, replaced bykad::Config::new(StreamProtocol)
. See PR 5122. - Compute
jobs_query_capacity
accurately. See PR 5148. - Derive
Copy
forkbucket::key::Key<T>
. See PR 5317. ⁻KBucket
size can now be modified without changing theK_VALUE
. See PR 5414. - Use
web-time
instead ofinstant
. See PR 5347.
- Correctly handle the
NoKnownPeers
error on automatic bootstrap. See PR 5349. - Improve automatic bootstrap triggering conditions:
trigger when the routing table is updated and we have less that
K_VALUE
peers in it, trigger when a new listen address is discovered and we have no connected peers. See PR 5474.
- The progress of the close query iterator shall be decided by ANY of the new peers. See PR 4932.
- Ensure
Multiaddr
handled and returned byBehaviour
are/p2p
terminated. See PR 4596.
- Fix a bug where calling
Behaviour::remove_address
with an address not in the peer's bucket would remove the peer from the routing table if the bucket has only one address left. See PR 4816 - Add
std::fmt::Display
implementation onQueryId
. See PR 4814.
- Remove deprecated
kad::Config::set_connection_idle_timeout
in favor ofSwarmBuilder::idle_connection_timeout
. See PR 4659. - Emit
ModeChanged
event whenever we automatically reconfigure the mode. See PR 4503. - Make previously "deprecated"
record
module private. See PR 4035. - Expose hashed bytes of KBucketKey. See PR 4698.
- Remove previously deprecated type-aliases.
Users should follow the convention of importing the
libp2p::kad
module and referring to symbols askad::Behaviour
etc. See PR 4733.
- Rename
Kademlia
symbols to follow naming convention. See PR 4547. - Fix a bug where we didn't detect a remote peer moving into client-state. See PR 4639.
- Re-export
NodeStatus
. See PR 4645. - Deprecate
kad::Config::set_connection_idle_timeout
in favor ofSwarmBuilder::idle_connection_timeout
. See PR 4675.
- Migrate to
quick-protobuf-codec
crate for codec logic. See PR 4501.
- Implement common traits on
RoutingUpdate
. See PR 4270. - Reduce noise of "remote supports our protocol" log. See PR 4278.
- Prevent simultaneous dials to peers. See PR 4224.
- Rename missed
KademliaEvent::OutboundQueryCompleted
toKademliaEvent::OutboundQueryProgressed
in documentation. See PR 4257.
- Allow to explicitly set
Mode::{Client,Server}
. See PR 4132
- Expose
KBucketDistance
. See PR 4109.
-
Raise MSRV to 1.65. See PR 3715.
-
Remove deprecated public modules
handler
,protocol
andkbucket
. See PR 3896. -
Automatically configure client/server mode based on external addresses. If we have or learn about an external address of our node, e.g. through
Swarm::add_external_address
or automated throughlibp2p-autonat
, we operate in server-mode and thus allow inbound requests. By default, a node is in client-mode and only allows outbound requests. If you want to maintain the status quo, i.e. always operate in server mode, make sure to add at least one external address throughSwarm::add_external_address
. See also Kademlia specification for an introduction to Kademlia client/server mode. See PR 3877.
- Preserve existing
KeepAlive::Until
timeout instead of continuously setting newKeepAlive::Until(Instant::now() + self.config.idle_timeout)
. See PR 3801.
- Export pub enum
RoutingUpdate
. See PR 3739. - Deprecate
handler
,kbucket
,protocol
,record
modules to make them private. See PR 3738.
- Migrate from
prost
toquick-protobuf
. This removesprotoc
dependency. See PR 3312.
-
Update to
libp2p-core
v0.39.0
. -
Update to
libp2p-swarm
v0.42.0
. -
Remove lifetime from
RecordStore
and use GATs instead. See PR 3239. -
Limit number of active outbound streams to 32. See PR 3287.
-
Bump MSRV to 1.65.0.
- Skip unparsable multiaddr in
Peer::addrs
. See PR 3280.
-
Update to
libp2p-core
v0.38.0
. -
Update to
libp2p-swarm
v0.41.0
. -
Replace
Kademlia
'sNetworkBehaviour
implementationinject_*
methods with the newon_*
methods. See PR 3011. -
Replace
KademliaHandler
'sConnectionHandler
implementationinject_*
methods with the newon_*
methods. See PR 3085. -
Update
rust-version
to reflect the actual MSRV: 1.62.0. See PR 3090. -
Fix bad state transition on incoming
AddProvider
messages. This would eventually lead to warning that says: "New inbound substream to PeerId exceeds inbound substream limit. No older substream waiting to be reused." See PR 3152. -
Refactor APIs to be streaming.
- Renamed
KademliaEvent::OutboundQueryCompleted
toKademliaEvent::OutboundQueryProgressed
- Instead of a single event
OutboundQueryCompleted
, there are now multiple events emitted, allowing the user to process them as they come in (via the newOutboundQueryProgressed
). SeeProgressStep
to identify the finalOutboundQueryProgressed
of a single query. - To finish a query early, i.e. before the final
OutboundQueryProgressed
of the query, a caller needs to callquery.finish()
. - There is no more automatic caching of records. The user has to manually call
put_record_to
on theQueryInfo::GetRecord.cache_candidates
to cache a record to a close peer that did not return the record on the foregone query. See PR 2712.
- Renamed
-
Remove deprecated
set_protocol_name()
fromKademliaConfig
&KademliaProtocolConfig
. Useset_protocol_names()
instead. See PR 2866. -
Bump rand to 0.8 and quickcheck to 1. See PR 2857.
-
Update to
libp2p-core
v0.37.0
. -
Update to
libp2p-swarm
v0.40.0
.
-
Add support for multiple protocol names. Update
Kademlia
,KademliaConfig
, andKademliaProtocolConfig
accordingly. See Issue 2837. See PR 2846. -
Update to
libp2p-swarm
v0.39.0
. -
Update to
libp2p-core
v0.36.0
.
-
Update prost requirement from 0.10 to 0.11 which no longer installs the protoc Protobuf compiler. Thus you will need protoc installed locally. See PR 2788.
-
Update to
libp2p-swarm
v0.38.0
. -
Update to
libp2p-core
v0.35.0
.
-
Update to
libp2p-core
v0.34.0
. -
Update to
libp2p-swarm
v0.37.0
.
- Limit # of inbound streams to 32. [See PR 2699].
-
Update to
libp2p-core
v0.33.0
. -
Update to
libp2p-swarm
v0.36.0
. -
Derive
Error
forGetRecordError
(see PR 2614).
- Update to
libp2p-swarm
v0.35.0
.
-
Update to
libp2p-core
v0.32.0
. -
Update to
libp2p-swarm
v0.34.0
. -
Require owned key in
get_record()
method (see PR 2477). -
Merge NetworkBehaviour's inject_* paired methods (see PR 2445).
-
Update dependencies.
-
Migrate to Rust edition 2021 (see PR 2339).
-
Derive
Clone
forKademliaEvent
(see PR 2411) -
Derive
Serialize
,Deserialize
forstore::record::Key
(see PR 2408) -
Add
get_closest_local_peers
toKademlia
(see PR 2436)
-
Use
instant
andfutures-timer
instead ofwasm-timer
(see PR 2245). -
Rename
KademliaEvent::InboundRequestServed
toKademliaEvent::InboundRequest
and moveInboundPutRecordRequest
intoInboundRequest::PutRecord
andInboundAddProviderRequest
intoInboundRequest::AddProvider
(see PR 2297). -
Populate the
key
field when convertingKadRequestMsg::PutValue
toproto::Message
(see PR 2309). -
Update dependencies.
-
Make default features of
libp2p-core
optional. PR 2181 -
Update dependencies.
-
Introduce
KademliaStoreInserts
option, which allows to filter records (see PR 2163). -
Check local store when calling
Kademlia::get_providers
(see PR 2221).
-
Update dependencies.
-
Expose inbound request information (see PR 2087). Note:
KademliaEvent::QueryResult
is renamed toKademliaEvent::OutboundQueryCompleted
. -
Expose whether
KademliaEvent::RoutingUpdated
is triggered with new peer (see PR 2087). -
Expose kbucket range on
KademliaEvent::RoutingUpdated
(see PR 2087). -
Remove false
debug_assert
onconnected_peers
(see PR 2120). -
Return correct number of remaining bootstrap requests (see PR 2125).
- Update
libp2p-swarm
.
-
Add
KademliaCaching
andKademliaConfig::set_caching
to configure whether Kademlia should track, in lookups, the closest nodes to a key that did not return a record, viaGetRecordOk::cache_candidates
. As before, if a lookup used a quorum of 1, these candidates will automatically be sent the found record. Otherwise, with a lookup quorum of > 1, the candidates can be used withKademlia::put_record_to
after selecting one of the return records to cache. As is the current behaviour, caching is enabled by default with amax_peers
of 1, i.e. it only tracks the closest node to the key that did not return a record. -
Add
Kademlia::put_record_to
for storing a record at specific nodes, e.g. for write-back caching after a successful read with quorum > 1. -
Update
libp2p-swarm
. -
Update dependencies.
- Update dependencies.
- Update dependencies.
- Add From impls for
kbucket::Key
. PR 1909.
- Update
libp2p-core
andlibp2p-swarm
.
-
Update
libp2p-core
andlibp2p-swarm
. -
Have two
ProviderRecord
s be equal iff theirkey
andprovider
fields are equal. PR 1850.
-
Upon newly established connections, delay routing table updates until after the configured protocol name has been confirmed by the connection handler, i.e. until after at least one substream has been successfully negotiated. In configurations with different protocol names, this avoids undesirable nodes being included in the local routing table at least temporarily. PR 1821.
-
Update dependencies.
-
Update
libp2p-core
andlibp2p-swarm
. -
Update
sha2
dependency.
-
Increase default max packet size from 4KiB to 16KiB. See issue 1622.
-
Add
Distance::log2
(PR 1719). -
Update
libp2p-swarm
andlibp2p-core
.
- Explicitly convert from u8 to usize in
BucketIndex::range
to prevent type inference issues (PR 1716).
-
Store addresses in provider records. See PR 1708.
-
Update
libp2p-core
andlibp2p-swarm
dependencies. -
Add
KBucketRef::range
exposing the minimum inclusive and maximum inclusiveDistance
for the bucket (PR 1680). -
Add
NetworkBehaviour::inject_address_change
implementation (PR 1649).
-
Remove
KademliaEvent::Discovered
(PR 1632) -
More control and insight for k-buckets (PR 1628). In particular,
Kademlia::kbuckets_entries
has been removed and replaced byKademlia::kbuckets
/Kademlia::kbucket
which provide more information than just the peer IDs. FurthermoreKademlia::add_address
now returns a result and two new events,KademliaEvent::RoutablePeer
andKademliaEvent::PendingRoutablePeer
are introduced (but are not required to be acted upon in order to retain existing behaviour). For more details, see the PR description.
- Maintenance release (PR 1623).