diff --git a/lean_client/networking/src/network/service.rs b/lean_client/networking/src/network/service.rs index a0a188d..5b469cf 100644 --- a/lean_client/networking/src/network/service.rs +++ b/lean_client/networking/src/network/service.rs @@ -41,9 +41,11 @@ use crate::{ discovery::{DiscoveryConfig, DiscoveryService}, enr_ext::EnrExt, gossipsub::{self, config::GossipsubConfig, message::GossipsubMessage, topic::GossipsubKind}, - network::behaviour::{LeanNetworkBehaviour, LeanNetworkBehaviourEvent}, - network::range_sync::{MAX_SYNC_RANGE, RangeSyncState}, - req_resp::{self, LeanRequest, ReqRespMessage}, + network::{ + behaviour::{LeanNetworkBehaviour, LeanNetworkBehaviourEvent}, + range_sync::{MAX_SYNC_RANGE, RangeSyncState}, + }, + req_resp::{self, LeanRequest, RESPONSE_INVALID_REQUEST, ReqRespMessage}, types::{ CanonicalBlocksProvider, ChainMessage, ChainMessageSink, ConnectionState, MAX_BLOCK_CACHE_SIZE, NetworkFinalizedSlot, OutboundP2pRequest, P2pRequestSource, @@ -1676,8 +1678,10 @@ where if count == 0 || count > req_resp::MAX_REQUEST_BLOCKS as u64 { info!(peer = %peer, start_slot, count, "Rejecting BlocksByRange: invalid count"); - // Send an empty response — peer will treat as no data. - let response = LeanResponse::BlocksByRange(Vec::new()); + let response = LeanResponse::Error { + code: RESPONSE_INVALID_REQUEST, + message: "Invalid Block Request Count".to_string(), + }; if let Err(e) = self .swarm .behaviour_mut() diff --git a/lean_client/networking/src/req_resp.rs b/lean_client/networking/src/req_resp.rs index 8e359a7..fb6026c 100644 --- a/lean_client/networking/src/req_resp.rs +++ b/lean_client/networking/src/req_resp.rs @@ -62,6 +62,7 @@ pub enum LeanResponse { Status(Status), BlocksByRoot(Vec), BlocksByRange(Vec), + Error { code: u8, message: String }, Empty, } @@ -297,6 +298,9 @@ impl LeanCodec { } Ok(result) } + LeanResponse::Error { code, message } => { + Self::encode_response_chunk(*code, message.as_bytes()) + } LeanResponse::Empty => Ok(Vec::new()), } }