From 1259883de6352c94edb2e1ea55e99bcabc840dd7 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Fri, 29 Nov 2019 11:20:36 +1100 Subject: [PATCH] Correct and consolidate RPC protocol names (#645) --- beacon_node/eth2-libp2p/src/rpc/codec/ssz.rs | 28 +++++++++++--------- beacon_node/eth2-libp2p/src/rpc/protocol.rs | 26 ++++++++++++------ 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/beacon_node/eth2-libp2p/src/rpc/codec/ssz.rs b/beacon_node/eth2-libp2p/src/rpc/codec/ssz.rs index c03a325ebb..0739fa328b 100644 --- a/beacon_node/eth2-libp2p/src/rpc/codec/ssz.rs +++ b/beacon_node/eth2-libp2p/src/rpc/codec/ssz.rs @@ -1,7 +1,9 @@ use crate::rpc::methods::*; use crate::rpc::{ codec::base::OutboundCodec, - protocol::{ProtocolId, RPCError}, + protocol::{ + ProtocolId, RPCError, RPC_BLOCKS_BY_RANGE, RPC_BLOCKS_BY_ROOT, RPC_GOODBYE, RPC_STATUS, + }, }; use crate::rpc::{ErrorMessage, RPCErrorResponse, RPCRequest, RPCResponse}; use libp2p::bytes::{BufMut, Bytes, BytesMut}; @@ -76,25 +78,25 @@ impl Decoder for SSZInboundCodec { fn decode(&mut self, src: &mut BytesMut) -> Result, Self::Error> { match self.inner.decode(src).map_err(RPCError::from) { Ok(Some(packet)) => match self.protocol.message_name.as_str() { - "status" => match self.protocol.version.as_str() { + RPC_STATUS => match self.protocol.version.as_str() { "1" => Ok(Some(RPCRequest::Status(StatusMessage::from_ssz_bytes( &packet, )?))), _ => unreachable!("Cannot negotiate an unknown version"), }, - "goodbye" => match self.protocol.version.as_str() { + RPC_GOODBYE => match self.protocol.version.as_str() { "1" => Ok(Some(RPCRequest::Goodbye(GoodbyeReason::from_ssz_bytes( &packet, )?))), _ => unreachable!("Cannot negotiate an unknown version"), }, - "blocks_by_range" => match self.protocol.version.as_str() { + RPC_BLOCKS_BY_RANGE => match self.protocol.version.as_str() { "1" => Ok(Some(RPCRequest::BlocksByRange( BlocksByRangeRequest::from_ssz_bytes(&packet)?, ))), _ => unreachable!("Cannot negotiate an unknown version"), }, - "blocks_by_root" => match self.protocol.version.as_str() { + RPC_BLOCKS_BY_ROOT => match self.protocol.version.as_str() { "1" => Ok(Some(RPCRequest::BlocksByRoot(BlocksByRootRequest { block_roots: Vec::from_ssz_bytes(&packet)?, }))), @@ -164,18 +166,18 @@ impl Decoder for SSZOutboundCodec { // clear the buffer and return an empty object src.clear(); match self.protocol.message_name.as_str() { - "status" => match self.protocol.version.as_str() { + RPC_STATUS => match self.protocol.version.as_str() { "1" => Err(RPCError::Custom( "Status stream terminated unexpectedly".into(), )), // cannot have an empty HELLO message. The stream has terminated unexpectedly _ => unreachable!("Cannot negotiate an unknown version"), }, - "goodbye" => Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response")), - "blocks_by_range" => match self.protocol.version.as_str() { + RPC_GOODBYE => Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response")), + RPC_BLOCKS_BY_RANGE => match self.protocol.version.as_str() { "1" => Ok(Some(RPCResponse::BlocksByRange(Vec::new()))), _ => unreachable!("Cannot negotiate an unknown version"), }, - "blocks_by_root" => match self.protocol.version.as_str() { + RPC_BLOCKS_BY_ROOT => match self.protocol.version.as_str() { "1" => Ok(Some(RPCResponse::BlocksByRoot(Vec::new()))), _ => unreachable!("Cannot negotiate an unknown version"), }, @@ -188,20 +190,20 @@ impl Decoder for SSZOutboundCodec { let raw_bytes = packet.take(); match self.protocol.message_name.as_str() { - "status" => match self.protocol.version.as_str() { + RPC_STATUS => match self.protocol.version.as_str() { "1" => Ok(Some(RPCResponse::Status(StatusMessage::from_ssz_bytes( &raw_bytes, )?))), _ => unreachable!("Cannot negotiate an unknown version"), }, - "goodbye" => { + RPC_GOODBYE => { Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response")) } - "blocks_by_range" => match self.protocol.version.as_str() { + RPC_BLOCKS_BY_RANGE => match self.protocol.version.as_str() { "1" => Ok(Some(RPCResponse::BlocksByRange(raw_bytes.to_vec()))), _ => unreachable!("Cannot negotiate an unknown version"), }, - "blocks_by_root" => match self.protocol.version.as_str() { + RPC_BLOCKS_BY_ROOT => match self.protocol.version.as_str() { "1" => Ok(Some(RPCResponse::BlocksByRoot(raw_bytes.to_vec()))), _ => unreachable!("Cannot negotiate an unknown version"), }, diff --git a/beacon_node/eth2-libp2p/src/rpc/protocol.rs b/beacon_node/eth2-libp2p/src/rpc/protocol.rs index 5ba6ce9a73..5c1ba63b69 100644 --- a/beacon_node/eth2-libp2p/src/rpc/protocol.rs +++ b/beacon_node/eth2-libp2p/src/rpc/protocol.rs @@ -31,6 +31,16 @@ const TTFB_TIMEOUT: u64 = 5; /// established before the stream is terminated. const REQUEST_TIMEOUT: u64 = 15; +/// Protocol names to be used. +/// The Status protocol name. +pub const RPC_STATUS: &str = "status"; +/// The Goodbye protocol name. +pub const RPC_GOODBYE: &str = "goodbye"; +/// The `BlocksByRange` protocol name. +pub const RPC_BLOCKS_BY_RANGE: &str = "beacon_blocks_by_range"; +/// The `BlocksByRoot` protocol name. +pub const RPC_BLOCKS_BY_ROOT: &str = "beacon_blocks_by_root"; + #[derive(Debug, Clone)] pub struct RPCProtocol; @@ -40,10 +50,10 @@ impl UpgradeInfo for RPCProtocol { fn protocol_info(&self) -> Self::InfoIter { vec![ - ProtocolId::new("status", "1", "ssz"), - ProtocolId::new("goodbye", "1", "ssz"), - ProtocolId::new("blocks_by_range", "1", "ssz"), - ProtocolId::new("blocks_by_root", "1", "ssz"), + ProtocolId::new(RPC_STATUS, "1", "ssz"), + ProtocolId::new(RPC_GOODBYE, "1", "ssz"), + ProtocolId::new(RPC_BLOCKS_BY_RANGE, "1", "ssz"), + ProtocolId::new(RPC_BLOCKS_BY_ROOT, "1", "ssz"), ] } } @@ -171,10 +181,10 @@ impl RPCRequest { pub fn supported_protocols(&self) -> Vec { match self { // add more protocols when versions/encodings are supported - RPCRequest::Status(_) => vec![ProtocolId::new("status", "1", "ssz")], - RPCRequest::Goodbye(_) => vec![ProtocolId::new("goodbye", "1", "ssz")], - RPCRequest::BlocksByRange(_) => vec![ProtocolId::new("blocks_by_range", "1", "ssz")], - RPCRequest::BlocksByRoot(_) => vec![ProtocolId::new("blocks_by_root", "1", "ssz")], + RPCRequest::Status(_) => vec![ProtocolId::new(RPC_STATUS, "1", "ssz")], + RPCRequest::Goodbye(_) => vec![ProtocolId::new(RPC_GOODBYE, "1", "ssz")], + RPCRequest::BlocksByRange(_) => vec![ProtocolId::new(RPC_BLOCKS_BY_RANGE, "1", "ssz")], + RPCRequest::BlocksByRoot(_) => vec![ProtocolId::new(RPC_BLOCKS_BY_ROOT, "1", "ssz")], } }