mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-28 17:57:56 +00:00
libp2p-next (#5278)
* Adapt to rust-libp2p#1440. * Further adapt to libp2p/master. * Update to libp2p-0.17 * Finishing touches. * Remove stray TODO. * Incorporate review feedback. * Remove unused import.
This commit is contained in:
@@ -37,9 +37,10 @@ use crate::{
|
||||
transport, ReputationChange,
|
||||
};
|
||||
use futures::prelude::*;
|
||||
use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender, TracingUnboundedReceiver};
|
||||
use libp2p::{PeerId, Multiaddr};
|
||||
use libp2p::core::{Executor, connection::PendingConnectionError};
|
||||
use libp2p::kad::record;
|
||||
use libp2p::swarm::{NetworkBehaviour, SwarmBuilder, SwarmEvent};
|
||||
use libp2p::{kad::record, Multiaddr, PeerId};
|
||||
use log::{error, info, trace, warn};
|
||||
use parking_lot::Mutex;
|
||||
use prometheus_endpoint::{
|
||||
@@ -51,6 +52,7 @@ use sp_runtime::{
|
||||
traits::{Block as BlockT, NumberFor},
|
||||
ConsensusEngineId,
|
||||
};
|
||||
use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender, TracingUnboundedReceiver};
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
collections::{HashMap, HashSet},
|
||||
@@ -322,9 +324,16 @@ impl<B: BlockT + 'static, H: ExHashT> NetworkWorker<B, H> {
|
||||
};
|
||||
transport::build_transport(local_identity, config_mem, config_wasm, flowctrl)
|
||||
};
|
||||
let mut builder = SwarmBuilder::new(transport, behaviour, local_peer_id.clone());
|
||||
let mut builder = SwarmBuilder::new(transport, behaviour, local_peer_id.clone())
|
||||
.peer_connection_limit(crate::MAX_CONNECTIONS_PER_PEER);
|
||||
if let Some(spawner) = params.executor {
|
||||
builder = builder.executor_fn(spawner);
|
||||
struct SpawnImpl<F>(F);
|
||||
impl<F: Fn(Pin<Box<dyn Future<Output = ()> + Send>>)> Executor for SpawnImpl<F> {
|
||||
fn exec(&self, f: Pin<Box<dyn Future<Output = ()> + Send>>) {
|
||||
(self.0)(f)
|
||||
}
|
||||
}
|
||||
builder = builder.executor(Box::new(SpawnImpl(spawner)));
|
||||
}
|
||||
(builder.build(), bandwidth)
|
||||
};
|
||||
@@ -1038,13 +1047,13 @@ impl<B: BlockT + 'static, H: ExHashT> Future for NetworkWorker<B, H> {
|
||||
metrics.update_with_network_event(&ev);
|
||||
}
|
||||
},
|
||||
Poll::Ready(SwarmEvent::Connected(peer_id)) => {
|
||||
Poll::Ready(SwarmEvent::ConnectionEstablished { peer_id, .. }) => {
|
||||
trace!(target: "sub-libp2p", "Libp2p => Connected({:?})", peer_id);
|
||||
if let Some(metrics) = this.metrics.as_ref() {
|
||||
metrics.connections.inc();
|
||||
}
|
||||
},
|
||||
Poll::Ready(SwarmEvent::Disconnected(peer_id)) => {
|
||||
Poll::Ready(SwarmEvent::ConnectionClosed { peer_id, .. }) => {
|
||||
trace!(target: "sub-libp2p", "Libp2p => Disconnected({:?})", peer_id);
|
||||
if let Some(metrics) = this.metrics.as_ref() {
|
||||
metrics.connections.dec();
|
||||
@@ -1054,9 +1063,7 @@ impl<B: BlockT + 'static, H: ExHashT> Future for NetworkWorker<B, H> {
|
||||
trace!(target: "sub-libp2p", "Libp2p => NewListenAddr({})", addr),
|
||||
Poll::Ready(SwarmEvent::ExpiredListenAddr(addr)) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => ExpiredListenAddr({})", addr),
|
||||
Poll::Ready(SwarmEvent::UnreachableAddr { peer_id, address, error }) => {
|
||||
let error = error.to_string();
|
||||
|
||||
Poll::Ready(SwarmEvent::UnreachableAddr { peer_id, address, error, .. }) => {
|
||||
trace!(
|
||||
target: "sub-libp2p", "Libp2p => Failed to reach {:?} through {:?}: {}",
|
||||
peer_id,
|
||||
@@ -1064,21 +1071,34 @@ impl<B: BlockT + 'static, H: ExHashT> Future for NetworkWorker<B, H> {
|
||||
error,
|
||||
);
|
||||
|
||||
if let Some(peer_id) = peer_id {
|
||||
if this.boot_node_ids.contains(&peer_id)
|
||||
&& error.contains("Peer ID mismatch")
|
||||
{
|
||||
if this.boot_node_ids.contains(&peer_id) {
|
||||
if let PendingConnectionError::InvalidPeerId = error {
|
||||
error!(
|
||||
"💔 Connecting to bootnode with peer id `{}` and address `{}` failed \
|
||||
because it returned a different peer id!",
|
||||
"💔 Invalid peer ID from bootnode, expected `{}` at address `{}`.",
|
||||
peer_id,
|
||||
address,
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
Poll::Ready(SwarmEvent::StartConnect(peer_id)) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => StartConnect({:?})", peer_id),
|
||||
}
|
||||
Poll::Ready(SwarmEvent::Dialing(peer_id)) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => Dialing({:?})", peer_id),
|
||||
Poll::Ready(SwarmEvent::IncomingConnection { local_addr, send_back_addr }) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => IncomingConnection({},{}))",
|
||||
local_addr, send_back_addr),
|
||||
Poll::Ready(SwarmEvent::IncomingConnectionError { local_addr, send_back_addr, error }) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => IncomingConnectionError({},{}): {}",
|
||||
local_addr, send_back_addr, error),
|
||||
Poll::Ready(SwarmEvent::BannedPeer { peer_id, endpoint }) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => BannedPeer({}). Connected via {:?}.",
|
||||
peer_id, endpoint),
|
||||
Poll::Ready(SwarmEvent::UnknownPeerUnreachableAddr { address, error }) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => UnknownPeerUnreachableAddr({}): {}",
|
||||
address, error),
|
||||
Poll::Ready(SwarmEvent::ListenerClosed { reason, addresses: _ }) =>
|
||||
warn!(target: "sub-libp2p", "Libp2p => ListenerClosed: {:?}", reason),
|
||||
Poll::Ready(SwarmEvent::ListenerError { error }) =>
|
||||
trace!(target: "sub-libp2p", "Libp2p => ListenerError: {}", error),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user