Revert "chore: update libp2p to 0.52.1 (#14429)" (#14722)

* Revert "chore: update libp2p to 0.52.1 (#14429)"

This reverts commit 59d8b86450.

* Fix dependencies

* Update dependencies

* Update Cargo.lock
This commit is contained in:
Aaro Altonen
2023-08-16 13:06:13 +03:00
committed by GitHub
parent d160818a9f
commit dd1b29c2f8
39 changed files with 2171 additions and 1275 deletions
+39 -64
View File
@@ -55,7 +55,7 @@ use ip_network::IpNetwork;
use libp2p::{
core::{Endpoint, Multiaddr},
kad::{
self,
handler::KademliaHandler,
record::store::{MemoryStore, RecordStore},
GetClosestPeersError, GetRecordOk, Kademlia, KademliaBucketInserts, KademliaConfig,
KademliaEvent, QueryId, QueryResult, Quorum, Record, RecordKey,
@@ -65,10 +65,10 @@ use libp2p::{
swarm::{
behaviour::{
toggle::{Toggle, ToggleConnectionHandler},
DialFailure, ExternalAddrConfirmed, FromSwarm,
DialFailure, FromSwarm, NewExternalAddr,
},
ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, PollParameters,
StreamProtocol, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm,
ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, PollParameters, THandler,
THandlerInEvent, THandlerOutEvent, ToSwarm,
},
PeerId,
};
@@ -104,7 +104,7 @@ pub struct DiscoveryConfig {
discovery_only_if_under_num: u64,
enable_mdns: bool,
kademlia_disjoint_query_paths: bool,
kademlia_protocols: Vec<StreamProtocol>,
kademlia_protocols: Vec<Vec<u8>>,
kademlia_replication_factor: NonZeroUsize,
}
@@ -223,9 +223,6 @@ impl DiscoveryConfig {
let store = MemoryStore::new(local_peer_id);
let mut kad = Kademlia::with_config(local_peer_id, store, config);
// Always set the mode to server, so that any node can accept incoming Kademlia
// requests. Otherwise, the connectivity degrades significantly.
kad.set_mode(Some(kad::Mode::Server));
for (peer_id, addr) in &permanent_addresses {
kad.add_address(peer_id, addr.clone());
@@ -356,7 +353,7 @@ impl DiscoveryBehaviour {
pub fn add_self_reported_address(
&mut self,
peer_id: &PeerId,
supported_protocols: &[impl AsRef<str>],
supported_protocols: &[impl AsRef<[u8]>],
addr: Multiaddr,
) {
if let Some(kademlia) = self.kademlia.as_mut() {
@@ -375,7 +372,7 @@ impl DiscoveryBehaviour {
trace!(
target: "sub-libp2p",
"Adding self-reported address {} from {} to Kademlia DHT {}.",
addr, peer_id, matching_protocol.as_ref(),
addr, peer_id, String::from_utf8_lossy(matching_protocol.as_ref()),
);
kademlia.add_address(peer_id, addr.clone());
} else {
@@ -501,9 +498,8 @@ pub enum DiscoveryOut {
}
impl NetworkBehaviour for DiscoveryBehaviour {
type ConnectionHandler =
ToggleConnectionHandler<<Kademlia<MemoryStore> as NetworkBehaviour>::ConnectionHandler>;
type ToSwarm = DiscoveryOut;
type ConnectionHandler = ToggleConnectionHandler<KademliaHandler<QueryId>>;
type OutEvent = DiscoveryOut;
fn handle_established_inbound_connection(
&mut self,
@@ -631,11 +627,11 @@ impl NetworkBehaviour for DiscoveryBehaviour {
FromSwarm::ListenerError(e) => {
self.kademlia.on_swarm_event(FromSwarm::ListenerError(e));
},
FromSwarm::ExternalAddrExpired(e) => {
FromSwarm::ExpiredExternalAddr(e) => {
// We intentionally don't remove the element from `known_external_addresses` in
// order to not print the log line again.
self.kademlia.on_swarm_event(FromSwarm::ExternalAddrExpired(e));
self.kademlia.on_swarm_event(FromSwarm::ExpiredExternalAddr(e));
},
FromSwarm::NewListener(e) => {
self.kademlia.on_swarm_event(FromSwarm::NewListener(e));
@@ -643,19 +639,8 @@ impl NetworkBehaviour for DiscoveryBehaviour {
FromSwarm::ExpiredListenAddr(e) => {
self.kademlia.on_swarm_event(FromSwarm::ExpiredListenAddr(e));
},
FromSwarm::NewExternalAddrCandidate(e) => {
self.kademlia.on_swarm_event(FromSwarm::NewExternalAddrCandidate(e));
},
FromSwarm::AddressChange(e) => {
self.kademlia.on_swarm_event(FromSwarm::AddressChange(e));
},
FromSwarm::NewListenAddr(e) => {
self.kademlia.on_swarm_event(FromSwarm::NewListenAddr(e));
self.mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
},
FromSwarm::ExternalAddrConfirmed(e @ ExternalAddrConfirmed { addr }) => {
let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id));
FromSwarm::NewExternalAddr(e @ NewExternalAddr { addr }) => {
let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id.into()));
if Self::can_add_to_dht(addr) {
// NOTE: we might re-discover the same address multiple times
@@ -669,7 +654,14 @@ impl NetworkBehaviour for DiscoveryBehaviour {
}
}
self.kademlia.on_swarm_event(FromSwarm::ExternalAddrConfirmed(e));
self.kademlia.on_swarm_event(FromSwarm::NewExternalAddr(e));
},
FromSwarm::AddressChange(e) => {
self.kademlia.on_swarm_event(FromSwarm::AddressChange(e));
},
FromSwarm::NewListenAddr(e) => {
self.kademlia.on_swarm_event(FromSwarm::NewListenAddr(e));
self.mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
},
}
}
@@ -687,7 +679,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
&mut self,
cx: &mut Context,
params: &mut impl PollParameters,
) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>> {
) -> Poll<ToSwarm<Self::OutEvent, THandlerInEvent<Self>>> {
// Immediately process the content of `discovered`.
if let Some(ev) = self.pending_events.pop_front() {
return Poll::Ready(ToSwarm::GenerateEvent(ev))
@@ -898,17 +890,10 @@ impl NetworkBehaviour for DiscoveryBehaviour {
ToSwarm::Dial { opts } => return Poll::Ready(ToSwarm::Dial { opts }),
ToSwarm::NotifyHandler { peer_id, handler, event } =>
return Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event }),
ToSwarm::ReportObservedAddr { address, score } =>
return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }),
ToSwarm::CloseConnection { peer_id, connection } =>
return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }),
ToSwarm::NewExternalAddrCandidate(observed) =>
return Poll::Ready(ToSwarm::NewExternalAddrCandidate(observed)),
ToSwarm::ExternalAddrConfirmed(addr) =>
return Poll::Ready(ToSwarm::ExternalAddrConfirmed(addr)),
ToSwarm::ExternalAddrExpired(addr) =>
return Poll::Ready(ToSwarm::ExternalAddrExpired(addr)),
ToSwarm::ListenOn { opts } => return Poll::Ready(ToSwarm::ListenOn { opts }),
ToSwarm::RemoveListener { id } =>
return Poll::Ready(ToSwarm::RemoveListener { id }),
}
}
@@ -921,9 +906,8 @@ impl NetworkBehaviour for DiscoveryBehaviour {
continue
}
self.pending_events.extend(
list.into_iter().map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)),
);
self.pending_events
.extend(list.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)));
if let Some(ev) = self.pending_events.pop_front() {
return Poll::Ready(ToSwarm::GenerateEvent(ev))
}
@@ -936,17 +920,10 @@ impl NetworkBehaviour for DiscoveryBehaviour {
ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */
// enum with no
// variant
ToSwarm::ReportObservedAddr { address, score } =>
return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }),
ToSwarm::CloseConnection { peer_id, connection } =>
return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }),
ToSwarm::NewExternalAddrCandidate(observed) =>
return Poll::Ready(ToSwarm::NewExternalAddrCandidate(observed)),
ToSwarm::ExternalAddrConfirmed(addr) =>
return Poll::Ready(ToSwarm::ExternalAddrConfirmed(addr)),
ToSwarm::ExternalAddrExpired(addr) =>
return Poll::Ready(ToSwarm::ExternalAddrExpired(addr)),
ToSwarm::ListenOn { opts } => return Poll::Ready(ToSwarm::ListenOn { opts }),
ToSwarm::RemoveListener { id } =>
return Poll::Ready(ToSwarm::RemoveListener { id }),
}
}
@@ -955,23 +932,21 @@ impl NetworkBehaviour for DiscoveryBehaviour {
}
/// Legacy (fallback) Kademlia protocol name based on `protocol_id`.
fn legacy_kademlia_protocol_name(id: &ProtocolId) -> StreamProtocol {
let name = format!("/{}/kad", id.as_ref());
StreamProtocol::try_from_owned(name).expect("protocol name is valid. qed")
fn legacy_kademlia_protocol_name(id: &ProtocolId) -> Vec<u8> {
let mut v = vec![b'/'];
v.extend_from_slice(id.as_ref().as_bytes());
v.extend_from_slice(b"/kad");
v
}
/// Kademlia protocol name based on `genesis_hash` and `fork_id`.
fn kademlia_protocol_name<Hash: AsRef<[u8]>>(
genesis_hash: Hash,
fork_id: Option<&str>,
) -> StreamProtocol {
fn kademlia_protocol_name<Hash: AsRef<[u8]>>(genesis_hash: Hash, fork_id: Option<&str>) -> Vec<u8> {
let genesis_hash_hex = bytes2hex("", genesis_hash.as_ref());
let name = if let Some(fork_id) = fork_id {
format!("/{}/{}/kad", genesis_hash_hex, fork_id)
if let Some(fork_id) = fork_id {
format!("/{}/{}/kad", genesis_hash_hex, fork_id).as_bytes().into()
} else {
format!("/{}/kad", genesis_hash_hex)
};
StreamProtocol::try_from_owned(name).expect("protocol name is valid. qed")
format!("/{}/kad", genesis_hash_hex).as_bytes().into()
}
}
#[cfg(test)]
@@ -1102,7 +1077,7 @@ mod tests {
.add_self_reported_address(
&other,
&[protocol_name],
addr.clone(),
addr,
);
to_discover[swarm_n].remove(&other);