/// This crate contains the main link for lighthouse to rust-libp2p. It therefore re-exports /// all required libp2p functionality. /// /// This crate builds and manages the libp2p services required by the beacon node. #[macro_use] extern crate lazy_static; pub mod behaviour; mod config; pub mod discovery; mod metrics; mod peer_manager; pub mod rpc; mod service; pub mod types; use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use std::str::FromStr; /// Wrapper over a libp2p `PeerId` which implements `Serialize` and `Deserialize` #[derive(Clone, Debug)] pub struct PeerIdSerialized(libp2p::PeerId); impl From for PeerId { fn from(peer_id: PeerIdSerialized) -> Self { peer_id.0 } } impl FromStr for PeerIdSerialized { type Err = String; fn from_str(s: &str) -> Result { Ok(Self( PeerId::from_str(s).map_err(|e| format!("Invalid peer id: {}", e))?, )) } } impl Serialize for PeerIdSerialized { fn serialize(&self, serializer: S) -> Result where S: Serializer, { serializer.serialize_str(&self.0.to_string()) } } impl<'de> Deserialize<'de> for PeerIdSerialized { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { let s: String = Deserialize::deserialize(deserializer)?; Ok(Self(PeerId::from_str(&s).map_err(|e| { de::Error::custom(format!("Failed to deserialise peer id: {:?}", e)) })?)) } } pub use crate::types::{error, Enr, GossipTopic, NetworkGlobals, PubsubMessage, SubnetDiscovery}; pub use behaviour::{BehaviourEvent, PeerRequestId, Request, Response}; pub use config::Config as NetworkConfig; pub use discovery::{CombinedKeyExt, EnrExt, Eth2Enr}; pub use discv5; pub use libp2p::gossipsub::{Gossipsub, MessageAcceptance, MessageId, Topic, TopicHash}; pub use libp2p::{core::ConnectedPoint, PeerId, Swarm}; pub use libp2p::{multiaddr, Multiaddr}; pub use metrics::scrape_discovery_metrics; pub use peer_manager::{ client::Client, score::PeerAction, PeerDB, PeerInfo, PeerSyncStatus, SyncInfo, }; pub use service::{load_private_key, Libp2pEvent, Service, NETWORK_KEY_FILENAME};