From 65477d2e91593881cf42f141f319ccb31470a30f Mon Sep 17 00:00:00 2001 From: Nathan Whitaker Date: Mon, 21 Mar 2022 16:32:10 -0400 Subject: [PATCH 1/2] Don't ban peers for small duplicate requests --- client/network/src/block_request_handler.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/client/network/src/block_request_handler.rs b/client/network/src/block_request_handler.rs index 2f17cdac0744b..64b93bb009ef4 100644 --- a/client/network/src/block_request_handler.rs +++ b/client/network/src/block_request_handler.rs @@ -54,6 +54,10 @@ mod rep { /// Reputation change when a peer sent us the same request multiple times. pub const SAME_REQUEST: Rep = Rep::new_fatal("Same block request multiple times"); + + /// Reputation change when a peer sent us the same "small" request multiple times. + pub const SAME_SMALL_REQUEST: Rep = + Rep::new(-(1 << 10), "same small block request multiple times"); } /// Generates a [`ProtocolConfig`] for the block request protocol, refusing incoming requests. @@ -200,8 +204,15 @@ impl BlockRequestHandler { Some(SeenRequestsValue::Fulfilled(ref mut requests)) => { *requests = requests.saturating_add(1); + let small_request = + attributes == BlockAttributes::HEADER | BlockAttributes::JUSTIFICATION; + if *requests > MAX_NUMBER_OF_SAME_REQUESTS_PER_PEER { - reputation_change = Some(rep::SAME_REQUEST); + reputation_change = Some(if small_request { + rep::SAME_SMALL_REQUEST + } else { + rep::SAME_REQUEST + }); } }, None => { From b6e7bf3fd0859af18c4df0d6a83b6a86d76aa6f3 Mon Sep 17 00:00:00 2001 From: Nathan Whitaker Date: Mon, 21 Mar 2022 18:27:20 -0400 Subject: [PATCH 2/2] Address review comment --- client/network/src/block_request_handler.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/network/src/block_request_handler.rs b/client/network/src/block_request_handler.rs index 64b93bb009ef4..e1fe9ebf8d060 100644 --- a/client/network/src/block_request_handler.rs +++ b/client/network/src/block_request_handler.rs @@ -204,8 +204,9 @@ impl BlockRequestHandler { Some(SeenRequestsValue::Fulfilled(ref mut requests)) => { *requests = requests.saturating_add(1); - let small_request = - attributes == BlockAttributes::HEADER | BlockAttributes::JUSTIFICATION; + let small_request = attributes + .difference(BlockAttributes::HEADER | BlockAttributes::JUSTIFICATION) + .is_empty(); if *requests > MAX_NUMBER_OF_SAME_REQUESTS_PER_PEER { reputation_change = Some(if small_request {