Add a flag to disable peer scoring (#4135)
## Issue Addressed N/A ## Proposed Changes Adds a flag for disabling peer scoring. This is useful for local testing and testing small networks for new features.
This commit is contained in:
parent
4d17fb3af6
commit
3b117f4bf6
@ -155,6 +155,7 @@ pub async fn create_api_server_on_port<T: BeaconChainTypes>(
|
|||||||
None,
|
None,
|
||||||
meta_data,
|
meta_data,
|
||||||
vec![],
|
vec![],
|
||||||
|
false,
|
||||||
&log,
|
&log,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -101,6 +101,9 @@ pub struct Config {
|
|||||||
/// List of trusted libp2p nodes which are not scored.
|
/// List of trusted libp2p nodes which are not scored.
|
||||||
pub trusted_peers: Vec<PeerIdSerialized>,
|
pub trusted_peers: Vec<PeerIdSerialized>,
|
||||||
|
|
||||||
|
/// Disables peer scoring altogether.
|
||||||
|
pub disable_peer_scoring: bool,
|
||||||
|
|
||||||
/// Client version
|
/// Client version
|
||||||
pub client_version: String,
|
pub client_version: String,
|
||||||
|
|
||||||
@ -309,6 +312,7 @@ impl Default for Config {
|
|||||||
boot_nodes_multiaddr: vec![],
|
boot_nodes_multiaddr: vec![],
|
||||||
libp2p_nodes: vec![],
|
libp2p_nodes: vec![],
|
||||||
trusted_peers: vec![],
|
trusted_peers: vec![],
|
||||||
|
disable_peer_scoring: false,
|
||||||
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,
|
||||||
|
@ -1162,6 +1162,7 @@ mod tests {
|
|||||||
syncnets: Default::default(),
|
syncnets: Default::default(),
|
||||||
}),
|
}),
|
||||||
vec![],
|
vec![],
|
||||||
|
false,
|
||||||
&log,
|
&log,
|
||||||
);
|
);
|
||||||
Discovery::new(&keypair, &config, Arc::new(globals), &log)
|
Discovery::new(&keypair, &config, Arc::new(globals), &log)
|
||||||
|
@ -41,12 +41,14 @@ pub struct PeerDB<TSpec: EthSpec> {
|
|||||||
disconnected_peers: usize,
|
disconnected_peers: usize,
|
||||||
/// Counts banned peers in total and per ip
|
/// Counts banned peers in total and per ip
|
||||||
banned_peers_count: BannedPeersCount,
|
banned_peers_count: BannedPeersCount,
|
||||||
|
/// Specifies if peer scoring is disabled.
|
||||||
|
disable_peer_scoring: bool,
|
||||||
/// PeerDB's logger
|
/// PeerDB's logger
|
||||||
log: slog::Logger,
|
log: slog::Logger,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<TSpec: EthSpec> PeerDB<TSpec> {
|
impl<TSpec: EthSpec> PeerDB<TSpec> {
|
||||||
pub fn new(trusted_peers: Vec<PeerId>, log: &slog::Logger) -> Self {
|
pub fn new(trusted_peers: Vec<PeerId>, disable_peer_scoring: bool, log: &slog::Logger) -> Self {
|
||||||
// Initialize the peers hashmap with trusted peers
|
// Initialize the peers hashmap with trusted peers
|
||||||
let peers = trusted_peers
|
let peers = trusted_peers
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -56,6 +58,7 @@ impl<TSpec: EthSpec> PeerDB<TSpec> {
|
|||||||
log: log.clone(),
|
log: log.clone(),
|
||||||
disconnected_peers: 0,
|
disconnected_peers: 0,
|
||||||
banned_peers_count: BannedPeersCount::default(),
|
banned_peers_count: BannedPeersCount::default(),
|
||||||
|
disable_peer_scoring,
|
||||||
peers,
|
peers,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -704,7 +707,11 @@ impl<TSpec: EthSpec> PeerDB<TSpec> {
|
|||||||
warn!(log_ref, "Updating state of unknown peer";
|
warn!(log_ref, "Updating state of unknown peer";
|
||||||
"peer_id" => %peer_id, "new_state" => ?new_state);
|
"peer_id" => %peer_id, "new_state" => ?new_state);
|
||||||
}
|
}
|
||||||
PeerInfo::default()
|
if self.disable_peer_scoring {
|
||||||
|
PeerInfo::trusted_peer_info()
|
||||||
|
} else {
|
||||||
|
PeerInfo::default()
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ban the peer if the score is not already low enough.
|
// Ban the peer if the score is not already low enough.
|
||||||
@ -1300,7 +1307,7 @@ mod tests {
|
|||||||
|
|
||||||
fn get_db() -> PeerDB<M> {
|
fn get_db() -> PeerDB<M> {
|
||||||
let log = build_log(slog::Level::Debug, false);
|
let log = build_log(slog::Level::Debug, false);
|
||||||
PeerDB::new(vec![], &log)
|
PeerDB::new(vec![], false, &log)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -1999,7 +2006,7 @@ mod tests {
|
|||||||
fn test_trusted_peers_score() {
|
fn test_trusted_peers_score() {
|
||||||
let trusted_peer = PeerId::random();
|
let trusted_peer = PeerId::random();
|
||||||
let log = build_log(slog::Level::Debug, false);
|
let log = build_log(slog::Level::Debug, false);
|
||||||
let mut pdb: PeerDB<M> = PeerDB::new(vec![trusted_peer], &log);
|
let mut pdb: PeerDB<M> = PeerDB::new(vec![trusted_peer], false, &log);
|
||||||
|
|
||||||
pdb.connect_ingoing(&trusted_peer, "/ip4/0.0.0.0".parse().unwrap(), None);
|
pdb.connect_ingoing(&trusted_peer, "/ip4/0.0.0.0".parse().unwrap(), None);
|
||||||
|
|
||||||
@ -2018,4 +2025,28 @@ mod tests {
|
|||||||
Score::max_score().score()
|
Score::max_score().score()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_disable_peer_scoring() {
|
||||||
|
let peer = PeerId::random();
|
||||||
|
let log = build_log(slog::Level::Debug, false);
|
||||||
|
let mut pdb: PeerDB<M> = PeerDB::new(vec![], true, &log);
|
||||||
|
|
||||||
|
pdb.connect_ingoing(&peer, "/ip4/0.0.0.0".parse().unwrap(), None);
|
||||||
|
|
||||||
|
// Check trusted status and score
|
||||||
|
assert!(pdb.peer_info(&peer).unwrap().is_trusted());
|
||||||
|
assert_eq!(
|
||||||
|
pdb.peer_info(&peer).unwrap().score().score(),
|
||||||
|
Score::max_score().score()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Adding/Subtracting score should have no effect on a trusted peer
|
||||||
|
add_score(&mut pdb, &peer, -50.0);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
pdb.peer_info(&peer).unwrap().score().score(),
|
||||||
|
Score::max_score().score()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,6 +171,7 @@ impl<AppReqId: ReqId, TSpec: EthSpec> Network<AppReqId, TSpec> {
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|x| PeerId::from(x.clone()))
|
.map(|x| PeerId::from(x.clone()))
|
||||||
.collect(),
|
.collect(),
|
||||||
|
config.disable_peer_scoring,
|
||||||
&log,
|
&log,
|
||||||
);
|
);
|
||||||
Arc::new(globals)
|
Arc::new(globals)
|
||||||
|
@ -39,6 +39,7 @@ impl<TSpec: EthSpec> NetworkGlobals<TSpec> {
|
|||||||
listen_port_tcp6: Option<u16>,
|
listen_port_tcp6: Option<u16>,
|
||||||
local_metadata: MetaData<TSpec>,
|
local_metadata: MetaData<TSpec>,
|
||||||
trusted_peers: Vec<PeerId>,
|
trusted_peers: Vec<PeerId>,
|
||||||
|
disable_peer_scoring: bool,
|
||||||
log: &slog::Logger,
|
log: &slog::Logger,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
NetworkGlobals {
|
NetworkGlobals {
|
||||||
@ -48,7 +49,7 @@ impl<TSpec: EthSpec> NetworkGlobals<TSpec> {
|
|||||||
listen_port_tcp4,
|
listen_port_tcp4,
|
||||||
listen_port_tcp6,
|
listen_port_tcp6,
|
||||||
local_metadata: RwLock::new(local_metadata),
|
local_metadata: RwLock::new(local_metadata),
|
||||||
peers: RwLock::new(PeerDB::new(trusted_peers, log)),
|
peers: RwLock::new(PeerDB::new(trusted_peers, disable_peer_scoring, log)),
|
||||||
gossipsub_subscriptions: RwLock::new(HashSet::new()),
|
gossipsub_subscriptions: RwLock::new(HashSet::new()),
|
||||||
sync_state: RwLock::new(SyncState::Stalled),
|
sync_state: RwLock::new(SyncState::Stalled),
|
||||||
backfill_state: RwLock::new(BackFillState::NotRequired),
|
backfill_state: RwLock::new(BackFillState::NotRequired),
|
||||||
@ -144,6 +145,7 @@ impl<TSpec: EthSpec> NetworkGlobals<TSpec> {
|
|||||||
syncnets: Default::default(),
|
syncnets: Default::default(),
|
||||||
}),
|
}),
|
||||||
vec![],
|
vec![],
|
||||||
|
false,
|
||||||
log,
|
log,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -185,6 +185,7 @@ impl TestRig {
|
|||||||
None,
|
None,
|
||||||
meta_data,
|
meta_data,
|
||||||
vec![],
|
vec![],
|
||||||
|
false,
|
||||||
&log,
|
&log,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -233,6 +233,14 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
|
|||||||
.help("Disables the discv5 discovery protocol. The node will not search for new peers or participate in the discovery protocol.")
|
.help("Disables the discv5 discovery protocol. The node will not search for new peers or participate in the discovery protocol.")
|
||||||
.takes_value(false),
|
.takes_value(false),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("disable-peer-scoring")
|
||||||
|
.long("disable-peer-scoring")
|
||||||
|
.help("Disables peer scoring in lighthouse. WARNING: This is a dev only flag is only meant to be used in local testing scenarios \
|
||||||
|
Using this flag on a real network may cause your node to become eclipsed and see a different view of the network")
|
||||||
|
.takes_value(false)
|
||||||
|
.hidden(true),
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("trusted-peers")
|
Arg::with_name("trusted-peers")
|
||||||
.long("trusted-peers")
|
.long("trusted-peers")
|
||||||
|
@ -1008,6 +1008,10 @@ pub fn set_network_config(
|
|||||||
.collect::<Result<Vec<Multiaddr>, _>>()?;
|
.collect::<Result<Vec<Multiaddr>, _>>()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cli_args.is_present("disable-peer-scoring") {
|
||||||
|
config.disable_peer_scoring = true;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(trusted_peers_str) = cli_args.value_of("trusted-peers") {
|
if let Some(trusted_peers_str) = cli_args.value_of("trusted-peers") {
|
||||||
config.trusted_peers = trusted_peers_str
|
config.trusted_peers = trusted_peers_str
|
||||||
.split(',')
|
.split(',')
|
||||||
|
@ -1045,6 +1045,13 @@ fn disable_discovery_flag() {
|
|||||||
.with_config(|config| assert!(config.network.disable_discovery));
|
.with_config(|config| assert!(config.network.disable_discovery));
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
|
fn disable_peer_scoring_flag() {
|
||||||
|
CommandLineTest::new()
|
||||||
|
.flag("disable-peer-scoring", None)
|
||||||
|
.run_with_zero_port()
|
||||||
|
.with_config(|config| assert!(config.network.disable_peer_scoring));
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
fn disable_upnp_flag() {
|
fn disable_upnp_flag() {
|
||||||
CommandLineTest::new()
|
CommandLineTest::new()
|
||||||
.flag("disable-upnp", None)
|
.flag("disable-upnp", None)
|
||||||
|
Loading…
Reference in New Issue
Block a user