Skip to content

Commit 3b117f4

Browse files
committed
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.
1 parent 4d17fb3 commit 3b117f4

File tree

10 files changed

+65
-5
lines changed

10 files changed

+65
-5
lines changed

beacon_node/http_api/src/test_utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ pub async fn create_api_server_on_port<T: BeaconChainTypes>(
155155
None,
156156
meta_data,
157157
vec![],
158+
false,
158159
&log,
159160
));
160161

beacon_node/lighthouse_network/src/config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ pub struct Config {
101101
/// List of trusted libp2p nodes which are not scored.
102102
pub trusted_peers: Vec<PeerIdSerialized>,
103103

104+
/// Disables peer scoring altogether.
105+
pub disable_peer_scoring: bool,
106+
104107
/// Client version
105108
pub client_version: String,
106109

@@ -309,6 +312,7 @@ impl Default for Config {
309312
boot_nodes_multiaddr: vec![],
310313
libp2p_nodes: vec![],
311314
trusted_peers: vec![],
315+
disable_peer_scoring: false,
312316
client_version: lighthouse_version::version_with_platform(),
313317
disable_discovery: false,
314318
upnp_enabled: true,

beacon_node/lighthouse_network/src/discovery/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,6 +1162,7 @@ mod tests {
11621162
syncnets: Default::default(),
11631163
}),
11641164
vec![],
1165+
false,
11651166
&log,
11661167
);
11671168
Discovery::new(&keypair, &config, Arc::new(globals), &log)

beacon_node/lighthouse_network/src/peer_manager/peerdb.rs

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,14 @@ pub struct PeerDB<TSpec: EthSpec> {
4141
disconnected_peers: usize,
4242
/// Counts banned peers in total and per ip
4343
banned_peers_count: BannedPeersCount,
44+
/// Specifies if peer scoring is disabled.
45+
disable_peer_scoring: bool,
4446
/// PeerDB's logger
4547
log: slog::Logger,
4648
}
4749

4850
impl<TSpec: EthSpec> PeerDB<TSpec> {
49-
pub fn new(trusted_peers: Vec<PeerId>, log: &slog::Logger) -> Self {
51+
pub fn new(trusted_peers: Vec<PeerId>, disable_peer_scoring: bool, log: &slog::Logger) -> Self {
5052
// Initialize the peers hashmap with trusted peers
5153
let peers = trusted_peers
5254
.into_iter()
@@ -56,6 +58,7 @@ impl<TSpec: EthSpec> PeerDB<TSpec> {
5658
log: log.clone(),
5759
disconnected_peers: 0,
5860
banned_peers_count: BannedPeersCount::default(),
61+
disable_peer_scoring,
5962
peers,
6063
}
6164
}
@@ -704,7 +707,11 @@ impl<TSpec: EthSpec> PeerDB<TSpec> {
704707
warn!(log_ref, "Updating state of unknown peer";
705708
"peer_id" => %peer_id, "new_state" => ?new_state);
706709
}
707-
PeerInfo::default()
710+
if self.disable_peer_scoring {
711+
PeerInfo::trusted_peer_info()
712+
} else {
713+
PeerInfo::default()
714+
}
708715
});
709716

710717
// Ban the peer if the score is not already low enough.
@@ -1300,7 +1307,7 @@ mod tests {
13001307

13011308
fn get_db() -> PeerDB<M> {
13021309
let log = build_log(slog::Level::Debug, false);
1303-
PeerDB::new(vec![], &log)
1310+
PeerDB::new(vec![], false, &log)
13041311
}
13051312

13061313
#[test]
@@ -1999,7 +2006,7 @@ mod tests {
19992006
fn test_trusted_peers_score() {
20002007
let trusted_peer = PeerId::random();
20012008
let log = build_log(slog::Level::Debug, false);
2002-
let mut pdb: PeerDB<M> = PeerDB::new(vec![trusted_peer], &log);
2009+
let mut pdb: PeerDB<M> = PeerDB::new(vec![trusted_peer], false, &log);
20032010

20042011
pdb.connect_ingoing(&trusted_peer, "/ip4/0.0.0.0".parse().unwrap(), None);
20052012

@@ -2018,4 +2025,28 @@ mod tests {
20182025
Score::max_score().score()
20192026
);
20202027
}
2028+
2029+
#[test]
2030+
fn test_disable_peer_scoring() {
2031+
let peer = PeerId::random();
2032+
let log = build_log(slog::Level::Debug, false);
2033+
let mut pdb: PeerDB<M> = PeerDB::new(vec![], true, &log);
2034+
2035+
pdb.connect_ingoing(&peer, "/ip4/0.0.0.0".parse().unwrap(), None);
2036+
2037+
// Check trusted status and score
2038+
assert!(pdb.peer_info(&peer).unwrap().is_trusted());
2039+
assert_eq!(
2040+
pdb.peer_info(&peer).unwrap().score().score(),
2041+
Score::max_score().score()
2042+
);
2043+
2044+
// Adding/Subtracting score should have no effect on a trusted peer
2045+
add_score(&mut pdb, &peer, -50.0);
2046+
2047+
assert_eq!(
2048+
pdb.peer_info(&peer).unwrap().score().score(),
2049+
Score::max_score().score()
2050+
);
2051+
}
20212052
}

beacon_node/lighthouse_network/src/service/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ impl<AppReqId: ReqId, TSpec: EthSpec> Network<AppReqId, TSpec> {
171171
.iter()
172172
.map(|x| PeerId::from(x.clone()))
173173
.collect(),
174+
config.disable_peer_scoring,
174175
&log,
175176
);
176177
Arc::new(globals)

beacon_node/lighthouse_network/src/types/globals.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ impl<TSpec: EthSpec> NetworkGlobals<TSpec> {
3939
listen_port_tcp6: Option<u16>,
4040
local_metadata: MetaData<TSpec>,
4141
trusted_peers: Vec<PeerId>,
42+
disable_peer_scoring: bool,
4243
log: &slog::Logger,
4344
) -> Self {
4445
NetworkGlobals {
@@ -48,7 +49,7 @@ impl<TSpec: EthSpec> NetworkGlobals<TSpec> {
4849
listen_port_tcp4,
4950
listen_port_tcp6,
5051
local_metadata: RwLock::new(local_metadata),
51-
peers: RwLock::new(PeerDB::new(trusted_peers, log)),
52+
peers: RwLock::new(PeerDB::new(trusted_peers, disable_peer_scoring, log)),
5253
gossipsub_subscriptions: RwLock::new(HashSet::new()),
5354
sync_state: RwLock::new(SyncState::Stalled),
5455
backfill_state: RwLock::new(BackFillState::NotRequired),
@@ -144,6 +145,7 @@ impl<TSpec: EthSpec> NetworkGlobals<TSpec> {
144145
syncnets: Default::default(),
145146
}),
146147
vec![],
148+
false,
147149
log,
148150
)
149151
}

beacon_node/network/src/beacon_processor/tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ impl TestRig {
185185
None,
186186
meta_data,
187187
vec![],
188+
false,
188189
&log,
189190
));
190191

beacon_node/src/cli.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,14 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
233233
.help("Disables the discv5 discovery protocol. The node will not search for new peers or participate in the discovery protocol.")
234234
.takes_value(false),
235235
)
236+
.arg(
237+
Arg::with_name("disable-peer-scoring")
238+
.long("disable-peer-scoring")
239+
.help("Disables peer scoring in lighthouse. WARNING: This is a dev only flag is only meant to be used in local testing scenarios \
240+
Using this flag on a real network may cause your node to become eclipsed and see a different view of the network")
241+
.takes_value(false)
242+
.hidden(true),
243+
)
236244
.arg(
237245
Arg::with_name("trusted-peers")
238246
.long("trusted-peers")

beacon_node/src/config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,10 @@ pub fn set_network_config(
10081008
.collect::<Result<Vec<Multiaddr>, _>>()?;
10091009
}
10101010

1011+
if cli_args.is_present("disable-peer-scoring") {
1012+
config.disable_peer_scoring = true;
1013+
}
1014+
10111015
if let Some(trusted_peers_str) = cli_args.value_of("trusted-peers") {
10121016
config.trusted_peers = trusted_peers_str
10131017
.split(',')

lighthouse/tests/beacon_node.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,13 @@ fn disable_discovery_flag() {
10451045
.with_config(|config| assert!(config.network.disable_discovery));
10461046
}
10471047
#[test]
1048+
fn disable_peer_scoring_flag() {
1049+
CommandLineTest::new()
1050+
.flag("disable-peer-scoring", None)
1051+
.run_with_zero_port()
1052+
.with_config(|config| assert!(config.network.disable_peer_scoring));
1053+
}
1054+
#[test]
10481055
fn disable_upnp_flag() {
10491056
CommandLineTest::new()
10501057
.flag("disable-upnp", None)

0 commit comments

Comments
 (0)