@@ -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
4850impl < 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}
0 commit comments