Skip to content

Commit

Permalink
Increase penalty for old block gossip spam (#6050)
Browse files Browse the repository at this point in the history
* Increase penalty for old block gossip spam
  • Loading branch information
michaelsproul authored Jul 5, 2024
1 parent ef956e6 commit 94d55be
Showing 1 changed file with 25 additions and 5 deletions.
30 changes: 25 additions & 5 deletions beacon_node/network/src/network_beacon_processor/gossip_methods.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1012,11 +1012,12 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
self.propagate_validation_result(message_id, peer_id, MessageAcceptance::Ignore);
return None;
}
Err(e @ BlockError::FutureSlot { .. })
| Err(e @ BlockError::WouldRevertFinalizedSlot { .. })
| Err(e @ BlockError::NotFinalizedDescendant { .. }) => {
debug!(self.log, "Could not verify block for gossip. Ignoring the block";
"error" => %e);
Err(e @ BlockError::FutureSlot { .. }) => {
debug!(
self.log,
"Could not verify block for gossip. Ignoring the block";
"error" => %e
);
// Prevent recurring behaviour by penalizing the peer slightly.
self.gossip_penalize_peer(
peer_id,
Expand All @@ -1026,6 +1027,25 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
self.propagate_validation_result(message_id, peer_id, MessageAcceptance::Ignore);
return None;
}
Err(e @ BlockError::WouldRevertFinalizedSlot { .. })
| Err(e @ BlockError::NotFinalizedDescendant { .. }) => {
debug!(
self.log,
"Could not verify block for gossip. Ignoring the block";
"error" => %e
);
// The spec says we must IGNORE these blocks but there's no reason for an honest
// and non-buggy client to be gossiping blocks that blatantly conflict with
// finalization. Old versions of Erigon/Caplin are known to gossip pre-finalization
// blocks and we want to isolate them to encourage an update.
self.gossip_penalize_peer(
peer_id,
PeerAction::LowToleranceError,
"gossip_block_low",
);
self.propagate_validation_result(message_id, peer_id, MessageAcceptance::Ignore);
return None;
}
Err(ref e @ BlockError::ExecutionPayloadError(ref epe)) if !epe.penalize_peer() => {
debug!(self.log, "Could not verify block for gossip. Ignoring the block";
"error" => %e);
Expand Down

0 comments on commit 94d55be

Please sign in to comment.