mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-17 21:51:06 +00:00
chore: update libp2p to 0.52.1 (#14429)
* update libp2p to 0.52.0 * proto name now must implement `AsRef<str>` * update libp2p version everywhere * ToSwarm, FromBehaviour, ToBehaviour also LocalProtocolsChange and RemoteProtocolsChange * new NetworkBehaviour invariants * replace `Vec<u8>` with `StreamProtocol` * rename ConnectionHandlerEvent::Custom to NotifyBehaviour * remove DialError & ListenError invariants also fix pending_events * use connection_limits::Behaviour See https://github.com/libp2p/rust-libp2p/pull/3885 * impl `void::Void` for `BehaviourOut` also use `Behaviour::with_codec` * KademliaHandler no longer public * fix StreamProtocol construction * update libp2p-identify to 0.2.0 * remove non-existing methods from PollParameters rename ConnectionHandlerUpgrErr to StreamUpgradeError * `P2p` now contains `PeerId`, not `Multihash` * use multihash-codetable crate * update Cargo.lock * reformat text * comment out tests for now * remove `.into()` from P2p * confirm observed addr manually See https://github.com/libp2p/rust-libp2p/blob/master/protocols/identify/CHANGELOG.md#0430 * remove SwarmEvent::Banned since we're not using `ban_peer_id`, this can be safely removed. we may want to introduce `libp2p::allow_block_list` module in the future. * fix imports * replace `libp2p` with smaller deps in network-gossip * bring back tests * finish rewriting tests * uncomment handler tests * Revert "uncomment handler tests" This reverts commit 720a06815887f4e10767c62b58864a7ec3a48e50. * add a fixme * update Cargo.lock * remove extra From * make void uninhabited * fix discovery test * use autonat protocols confirming external addresses manually is unsafe in open networks * fix SyncNotificationsClogged invariant * only set server mode manually in tests doubt that we need to set it on node since we're adding public addresses * address @dmitry-markin comments * remove autonat * removed unused var * fix EOL * update smallvec and sha2 in attempt to compile polkadot * bump k256 in attempt to build cumulus --------- Co-authored-by: parity-processbot <>
This commit is contained in:
@@ -55,7 +55,6 @@ use ip_network::IpNetwork;
|
||||
use libp2p::{
|
||||
core::{Endpoint, Multiaddr},
|
||||
kad::{
|
||||
handler::KademliaHandler,
|
||||
record::store::{MemoryStore, RecordStore},
|
||||
GetClosestPeersError, GetRecordOk, Kademlia, KademliaBucketInserts, KademliaConfig,
|
||||
KademliaEvent, QueryId, QueryResult, Quorum, Record, RecordKey,
|
||||
@@ -65,10 +64,10 @@ use libp2p::{
|
||||
swarm::{
|
||||
behaviour::{
|
||||
toggle::{Toggle, ToggleConnectionHandler},
|
||||
DialFailure, FromSwarm, NewExternalAddr,
|
||||
DialFailure, ExternalAddrConfirmed, FromSwarm,
|
||||
},
|
||||
ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, PollParameters, THandler,
|
||||
THandlerInEvent, THandlerOutEvent, ToSwarm,
|
||||
ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, PollParameters,
|
||||
StreamProtocol, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm,
|
||||
},
|
||||
PeerId,
|
||||
};
|
||||
@@ -104,7 +103,7 @@ pub struct DiscoveryConfig {
|
||||
discovery_only_if_under_num: u64,
|
||||
enable_mdns: bool,
|
||||
kademlia_disjoint_query_paths: bool,
|
||||
kademlia_protocols: Vec<Vec<u8>>,
|
||||
kademlia_protocols: Vec<StreamProtocol>,
|
||||
kademlia_replication_factor: NonZeroUsize,
|
||||
}
|
||||
|
||||
@@ -353,7 +352,7 @@ impl DiscoveryBehaviour {
|
||||
pub fn add_self_reported_address(
|
||||
&mut self,
|
||||
peer_id: &PeerId,
|
||||
supported_protocols: &[impl AsRef<[u8]>],
|
||||
supported_protocols: &[impl AsRef<str>],
|
||||
addr: Multiaddr,
|
||||
) {
|
||||
if let Some(kademlia) = self.kademlia.as_mut() {
|
||||
@@ -372,7 +371,7 @@ impl DiscoveryBehaviour {
|
||||
trace!(
|
||||
target: "sub-libp2p",
|
||||
"Adding self-reported address {} from {} to Kademlia DHT {}.",
|
||||
addr, peer_id, String::from_utf8_lossy(matching_protocol.as_ref()),
|
||||
addr, peer_id, matching_protocol.as_ref(),
|
||||
);
|
||||
kademlia.add_address(peer_id, addr.clone());
|
||||
} else {
|
||||
@@ -498,8 +497,9 @@ pub enum DiscoveryOut {
|
||||
}
|
||||
|
||||
impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
type ConnectionHandler = ToggleConnectionHandler<KademliaHandler<QueryId>>;
|
||||
type OutEvent = DiscoveryOut;
|
||||
type ConnectionHandler =
|
||||
ToggleConnectionHandler<<Kademlia<MemoryStore> as NetworkBehaviour>::ConnectionHandler>;
|
||||
type ToSwarm = DiscoveryOut;
|
||||
|
||||
fn handle_established_inbound_connection(
|
||||
&mut self,
|
||||
@@ -629,11 +629,11 @@ impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
FromSwarm::ListenerError(e) => {
|
||||
self.kademlia.on_swarm_event(FromSwarm::ListenerError(e));
|
||||
},
|
||||
FromSwarm::ExpiredExternalAddr(e) => {
|
||||
FromSwarm::ExternalAddrExpired(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::ExpiredExternalAddr(e));
|
||||
self.kademlia.on_swarm_event(FromSwarm::ExternalAddrExpired(e));
|
||||
},
|
||||
FromSwarm::NewListener(e) => {
|
||||
self.kademlia.on_swarm_event(FromSwarm::NewListener(e));
|
||||
@@ -641,8 +641,21 @@ impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
FromSwarm::ExpiredListenAddr(e) => {
|
||||
self.kademlia.on_swarm_event(FromSwarm::ExpiredListenAddr(e));
|
||||
},
|
||||
FromSwarm::NewExternalAddr(e @ NewExternalAddr { addr }) => {
|
||||
let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id.into()));
|
||||
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));
|
||||
|
||||
if let Some(ref mut mdns) = self.mdns {
|
||||
mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
|
||||
}
|
||||
},
|
||||
FromSwarm::ExternalAddrConfirmed(e @ ExternalAddrConfirmed { addr }) => {
|
||||
let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id));
|
||||
|
||||
if Self::can_add_to_dht(addr) {
|
||||
// NOTE: we might re-discover the same address multiple times
|
||||
@@ -656,17 +669,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
if let Some(ref mut mdns) = self.mdns {
|
||||
mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
|
||||
}
|
||||
self.kademlia.on_swarm_event(FromSwarm::ExternalAddrConfirmed(e));
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -684,7 +687,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
&mut self,
|
||||
cx: &mut Context,
|
||||
params: &mut impl PollParameters,
|
||||
) -> Poll<ToSwarm<Self::OutEvent, THandlerInEvent<Self>>> {
|
||||
) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>> {
|
||||
// Immediately process the content of `discovered`.
|
||||
if let Some(ev) = self.pending_events.pop_front() {
|
||||
return Poll::Ready(ToSwarm::GenerateEvent(ev))
|
||||
@@ -895,10 +898,17 @@ 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 }),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -912,8 +922,10 @@ impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
continue
|
||||
}
|
||||
|
||||
self.pending_events
|
||||
.extend(list.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)));
|
||||
self.pending_events.extend(
|
||||
list.into_iter()
|
||||
.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)),
|
||||
);
|
||||
if let Some(ev) = self.pending_events.pop_front() {
|
||||
return Poll::Ready(ToSwarm::GenerateEvent(ev))
|
||||
}
|
||||
@@ -926,10 +938,17 @@ 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 }),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -939,21 +958,23 @@ impl NetworkBehaviour for DiscoveryBehaviour {
|
||||
}
|
||||
|
||||
/// Legacy (fallback) Kademlia protocol name based on `protocol_id`.
|
||||
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
|
||||
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")
|
||||
}
|
||||
|
||||
/// Kademlia protocol name based on `genesis_hash` and `fork_id`.
|
||||
fn kademlia_protocol_name<Hash: AsRef<[u8]>>(genesis_hash: Hash, fork_id: Option<&str>) -> Vec<u8> {
|
||||
fn kademlia_protocol_name<Hash: AsRef<[u8]>>(
|
||||
genesis_hash: Hash,
|
||||
fork_id: Option<&str>,
|
||||
) -> StreamProtocol {
|
||||
let genesis_hash_hex = bytes2hex("", genesis_hash.as_ref());
|
||||
if let Some(fork_id) = fork_id {
|
||||
format!("/{}/{}/kad", genesis_hash_hex, fork_id).as_bytes().into()
|
||||
let name = if let Some(fork_id) = fork_id {
|
||||
format!("/{}/{}/kad", genesis_hash_hex, fork_id)
|
||||
} else {
|
||||
format!("/{}/kad", genesis_hash_hex).as_bytes().into()
|
||||
}
|
||||
format!("/{}/kad", genesis_hash_hex)
|
||||
};
|
||||
StreamProtocol::try_from_owned(name).expect("protocol name is valid. qed")
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -969,7 +990,7 @@ mod tests {
|
||||
upgrade,
|
||||
},
|
||||
identity::Keypair,
|
||||
noise,
|
||||
kad, noise,
|
||||
swarm::{Executor, Swarm, SwarmBuilder, SwarmEvent},
|
||||
yamux, Multiaddr,
|
||||
};
|
||||
@@ -1023,6 +1044,18 @@ mod tests {
|
||||
TokioExecutor(runtime),
|
||||
)
|
||||
.build();
|
||||
|
||||
// Set the Kademlia mode to server so that it can accept incoming requests.
|
||||
//
|
||||
// Note: the server mode is set automatically when the node learns its external
|
||||
// address, but that does not happen in tests => hence we set it manually.
|
||||
swarm
|
||||
.behaviour_mut()
|
||||
.kademlia
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.set_mode(Some(kad::Mode::Server));
|
||||
|
||||
let listen_addr: Multiaddr =
|
||||
format!("/memory/{}", rand::random::<u64>()).parse().unwrap();
|
||||
|
||||
@@ -1083,7 +1116,7 @@ mod tests {
|
||||
.add_self_reported_address(
|
||||
&other,
|
||||
&[protocol_name],
|
||||
addr,
|
||||
addr.clone(),
|
||||
);
|
||||
|
||||
to_discover[swarm_n].remove(&other);
|
||||
|
||||
Reference in New Issue
Block a user