From b673cbca9daf04f37cb7c6a7c035c65ca5ac2a41 Mon Sep 17 00:00:00 2001 From: arkpar Date: Fri, 24 Apr 2020 20:46:01 +0200 Subject: [PATCH] Reputation penalty on missing blocks --- client/network/src/protocol/sync.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/network/src/protocol/sync.rs b/client/network/src/protocol/sync.rs index b480f3abb931f..98fbd4ae4f7b8 100644 --- a/client/network/src/protocol/sync.rs +++ b/client/network/src/protocol/sync.rs @@ -90,6 +90,9 @@ mod rep { /// Reputation change for peers which send us a known bad block. pub const BAD_BLOCK: Rep = Rep::new(-(1 << 29), "Bad block"); + /// Peer did not provide us with advertised block data. + pub const NO_BLOCK: Rep = Rep::new(-(1 << 29), "No requested block data"); + /// Reputation change for peers which send us a known block. pub const KNOWN_BLOCK: Rep = Rep::new(-(1 << 29), "Duplicate block"); @@ -696,6 +699,10 @@ impl ChainSync { } PeerSyncState::DownloadingStale(_) => { peer.state = PeerSyncState::Available; + if blocks.is_empty() { + debug!(target: "sync", "Empty block response from {}", who); + return Err(BadPeer(who, rep::NO_BLOCK)); + } blocks.into_iter().map(|b| { IncomingBlock { hash: b.hash,