Don't answer peers with a low reputation (#9008)

* Init architecture for not answering peers with a low reputation

* Get reputation inside of RequestResponsesBehaviour::poll

* Filter reputation in RequestResponsesBehaviour

* Pass PeersetHandle to RequestResponsesBehaviour

* Add more docs

* Fix tests compilation

* Fix compiler warnings (still FIXME)

* Fix tests

* Fmt code
This commit is contained in:
Roman
2021-09-21 14:32:13 +03:00
committed by GitHub
parent 0930948580
commit f6ab53f3c3
4 changed files with 192 additions and 47 deletions
@@ -38,6 +38,7 @@ use libp2p::{
use log::debug;
use prost::Message;
use sc_consensus::import_queue::{IncomingBlock, Origin};
use sc_peerset::PeersetHandle;
use sp_consensus::BlockOrigin;
use sp_runtime::{
traits::{Block as BlockT, NumberFor},
@@ -206,6 +207,7 @@ impl<B: BlockT> Behaviour<B> {
light_client_request_protocol_config: request_responses::ProtocolConfig,
// All remaining request protocol configs.
mut request_response_protocols: Vec<request_responses::ProtocolConfig>,
peerset: PeersetHandle,
) -> Result<Self, request_responses::RegisterError> {
// Extract protocol name and add to `request_response_protocols`.
let block_request_protocol_name = block_request_protocol_config.name.to_string();
@@ -229,6 +231,7 @@ impl<B: BlockT> Behaviour<B> {
bitswap: bitswap.into(),
request_responses: request_responses::RequestResponsesBehaviour::new(
request_response_protocols.into_iter(),
peerset,
)?,
light_client_request_sender,
events: VecDeque::new(),