mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-19 21:04:41 +00:00
Remove the logic allowing lighthouse to update it's own ENR (#682)
* Set random port when zero-port option is set * Remove logic allowing lighthouse to update its own ENR * Discovery address is set to localhost by default * Return error if discovery-addr isn't explicit
This commit is contained in:
committed by
Age Manning
parent
647034b637
commit
7320f8497f
@@ -254,11 +254,6 @@ impl<TSubstream: AsyncRead + AsyncWrite> Behaviour<TSubstream> {
|
||||
pub fn peer_unbanned(&mut self, peer_id: &PeerId) {
|
||||
self.discovery.peer_unbanned(peer_id);
|
||||
}
|
||||
|
||||
/// Informs the discovery behaviour if a new IP/Port is set at the application layer
|
||||
pub fn update_local_enr_socket(&mut self, socket: std::net::SocketAddr, is_tcp: bool) {
|
||||
self.discovery.update_local_enr(socket, is_tcp);
|
||||
}
|
||||
}
|
||||
|
||||
/// The types of events than can be obtained from polling the behaviour.
|
||||
|
||||
@@ -110,24 +110,6 @@ impl<TSubstream> Discovery<TSubstream> {
|
||||
})
|
||||
}
|
||||
|
||||
/// Allows the application layer to update the `IP` and `port` of the local ENR. The second
|
||||
/// parameter defines whether the port is a TCP port. If false, this is interpreted as a UDP
|
||||
/// port.
|
||||
pub fn update_local_enr(&mut self, socket: std::net::SocketAddr, is_tcp: bool) {
|
||||
// discv5 checks to see if an update is necessary before performing it, so we do not
|
||||
// need to check here
|
||||
if self.discovery.update_local_enr_socket(socket, is_tcp) {
|
||||
let enr = self.discovery.local_enr();
|
||||
info!(
|
||||
self.log,
|
||||
"ENR Updated";
|
||||
"enr" => enr.to_base64(),
|
||||
"seq" => enr.seq(),
|
||||
"address" => format!("{:?}", socket));
|
||||
save_enr_to_disc(Path::new(&self.enr_dir), enr, &self.log)
|
||||
}
|
||||
}
|
||||
|
||||
/// Return the nodes local ENR.
|
||||
pub fn local_enr(&self) -> &Enr {
|
||||
self.discovery.local_enr()
|
||||
|
||||
@@ -42,9 +42,6 @@ pub struct Service {
|
||||
/// A list of timeouts after which peers become unbanned.
|
||||
peer_ban_timeout: DelayQueue<PeerId>,
|
||||
|
||||
/// Indicates if the listening address have been verified and compared to the expected ENR.
|
||||
verified_listen_address: bool,
|
||||
|
||||
/// The libp2p logger handle.
|
||||
pub log: slog::Logger,
|
||||
}
|
||||
@@ -141,7 +138,6 @@ impl Service {
|
||||
swarm,
|
||||
peers_to_ban: DelayQueue::new(),
|
||||
peer_ban_timeout: DelayQueue::new(),
|
||||
verified_listen_address: false,
|
||||
log,
|
||||
})
|
||||
}
|
||||
@@ -241,46 +237,10 @@ impl Stream for Service {
|
||||
}
|
||||
}
|
||||
|
||||
// swarm is not ready
|
||||
// check to see if the address is different to the config. If so, update our ENR
|
||||
if !self.verified_listen_address {
|
||||
let multiaddr = Swarm::listeners(&self.swarm).next();
|
||||
if let Some(multiaddr) = multiaddr {
|
||||
self.verified_listen_address = true;
|
||||
if let Some(socket_addr) = multiaddr_to_socket_addr(multiaddr) {
|
||||
self.swarm.update_local_enr_socket(socket_addr, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Async::NotReady)
|
||||
}
|
||||
}
|
||||
|
||||
/// Converts a multiaddr to a `SocketAddr` if the multiaddr has the TCP/IP form. Libp2p currently
|
||||
/// only supports TCP, so the UDP case is currently ignored.
|
||||
fn multiaddr_to_socket_addr(multiaddr: &Multiaddr) -> Option<std::net::SocketAddr> {
|
||||
let protocols = multiaddr.iter().collect::<Vec<_>>();
|
||||
// assume the IP protocol
|
||||
match protocols[0] {
|
||||
Protocol::Ip4(address) => {
|
||||
if let Protocol::Tcp(port) = protocols[1] {
|
||||
Some(std::net::SocketAddr::new(address.into(), port))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
Protocol::Ip6(address) => {
|
||||
if let Protocol::Tcp(port) = protocols[1] {
|
||||
Some(std::net::SocketAddr::new(address.into(), port))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// The implementation supports TCP/IP, WebSockets over TCP/IP, secio as the encryption layer, and
|
||||
/// mplex or yamux as the multiplexing layer.
|
||||
fn build_transport(local_private_key: Keypair) -> Boxed<(PeerId, StreamMuxerBox), Error> {
|
||||
|
||||
Reference in New Issue
Block a user