Add privacy option (#2016)

Adds a `--privacy` CLI flag to the beacon node that users may opt into. 

This does two things:
- Removes client identifying information from the identify libp2p protocol
- Changes the default graffiti to "" if no graffiti is set.
This commit is contained in:
Age Manning 2020-11-30 22:55:08 +00:00
parent 77f3539654
commit c718e81eaf
4 changed files with 30 additions and 5 deletions

View File

@ -151,11 +151,19 @@ impl<TSpec: EthSpec> Behaviour<TSpec> {
) -> error::Result<Self> { ) -> error::Result<Self> {
let behaviour_log = log.new(o!()); let behaviour_log = log.new(o!());
let identify = Identify::new( let identify = if net_conf.private {
Identify::new(
"".into(),
"".into(),
local_key.public(), // Still send legitimate public key
)
} else {
Identify::new(
"lighthouse/libp2p".into(), "lighthouse/libp2p".into(),
lighthouse_version::version_with_platform(), lighthouse_version::version_with_platform(),
local_key.public(), local_key.public(),
); )
};
let enr_fork_id = network_globals let enr_fork_id = network_globals
.local_enr() .local_enr()

View File

@ -88,6 +88,10 @@ pub struct Config {
/// runtime. /// runtime.
pub import_all_attestations: bool, pub import_all_attestations: bool,
/// Indicates if the user has set the network to be in private mode. Currently this
/// prevents sending client identifying information over identify.
pub private: bool,
/// List of extra topics to initially subscribe to as strings. /// List of extra topics to initially subscribe to as strings.
pub topics: Vec<GossipKind>, pub topics: Vec<GossipKind>,
} }
@ -188,6 +192,7 @@ impl Default for Config {
client_version: lighthouse_version::version_with_platform(), client_version: lighthouse_version::version_with_platform(),
disable_discovery: false, disable_discovery: false,
upnp_enabled: true, upnp_enabled: true,
private: false,
subscribe_all_subnets: false, subscribe_all_subnets: false,
import_all_attestations: false, import_all_attestations: false,
topics: Vec::new(), topics: Vec::new(),

View File

@ -97,6 +97,12 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.help("Disables UPnP support. Setting this will prevent Lighthouse from attempting to automatically establish external port mappings.") .help("Disables UPnP support. Setting this will prevent Lighthouse from attempting to automatically establish external port mappings.")
.takes_value(false), .takes_value(false),
) )
.arg(
Arg::with_name("private")
.long("private")
.help("Prevents sending various client identification information.")
.takes_value(false),
)
.arg( .arg(
Arg::with_name("enr-udp-port") Arg::with_name("enr-udp-port")
.long("enr-udp-port") .long("enr-udp-port")

View File

@ -305,6 +305,8 @@ pub fn get_config<E: EthSpec>(
} }
graffiti.as_bytes() graffiti.as_bytes()
} else if cli_args.is_present("private") {
b""
} else { } else {
lighthouse_version::VERSION.as_bytes() lighthouse_version::VERSION.as_bytes()
}; };
@ -577,6 +579,10 @@ pub fn set_network_config(
config.upnp_enabled = false; config.upnp_enabled = false;
} }
if cli_args.is_present("private") {
config.private = true;
}
Ok(()) Ok(())
} }