mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 00:31:07 +00:00
* 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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user