From 41d6d5fafd095df91d0ba44d42a254bd61e11e89 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Fri, 20 Dec 2019 17:12:16 +1100 Subject: [PATCH] Adds support for the `step` parameter in BlocksByRange request (#737) * Add duplication prevention to gossipsub * Clean up topic logs * Add content addressed messages for gossip * Support BlocksByRange step parameter --- beacon_node/network/src/message_processor.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/beacon_node/network/src/message_processor.rs b/beacon_node/network/src/message_processor.rs index 39520f2422..2df8fda7a5 100644 --- a/beacon_node/network/src/message_processor.rs +++ b/beacon_node/network/src/message_processor.rs @@ -310,12 +310,22 @@ impl MessageProcessor { "peer" => format!("{:?}", peer_id), "count" => req.count, "start_slot" => req.start_slot, + "step" => req.step, ); + if req.step == 0 { + warn!(self.log, + "Peer sent invalid range request"; + "error" => "Step sent was 0"); + self.network.disconnect(peer_id, GoodbyeReason::Fault); + return; + } + let mut block_roots = self .chain .forwards_iter_block_roots(Slot::from(req.start_slot)) - .take_while(|(_root, slot)| slot.as_u64() < req.start_slot + req.count) + .take_while(|(_root, slot)| slot.as_u64() < req.start_slot + req.count * req.step) + .step_by(req.step as usize) .map(|(root, _slot)| root) .collect::>(); @@ -326,7 +336,9 @@ impl MessageProcessor { if let Ok(Some(block)) = self.chain.store.get::>(&root) { // Due to skip slots, blocks could be out of the range, we ensure they are in the // range before sending - if block.slot >= req.start_slot && block.slot < req.start_slot + req.count { + if block.slot >= req.start_slot + && block.slot < req.start_slot + req.count * req.step + { blocks_sent += 1; self.network.send_rpc_response( peer_id.clone(),