diff --git a/zebra-network/src/protocol/external/codec.rs b/zebra-network/src/protocol/external/codec.rs index 7929714c4..6ef0b6fac 100644 --- a/zebra-network/src/protocol/external/codec.rs +++ b/zebra-network/src/protocol/external/codec.rs @@ -205,20 +205,18 @@ impl Codec { GetAddr => { /* Empty payload -- no-op */ } Block(ref block) => block.zcash_serialize(&mut writer)?, GetBlocks { - ref version, ref block_locator_hashes, ref hash_stop, } => { - writer.write_u32::(version.0)?; + writer.write_u32::(self.builder.version.0)?; block_locator_hashes.zcash_serialize(&mut writer)?; hash_stop.zcash_serialize(&mut writer)?; } GetHeaders { - ref version, ref block_locator_hashes, ref hash_stop, } => { - writer.write_u32::(version.0)?; + writer.write_u32::(self.builder.version.0)?; block_locator_hashes.zcash_serialize(&mut writer)?; hash_stop.zcash_serialize(&mut writer)?; } @@ -457,11 +455,14 @@ impl Codec { } fn read_getblocks(&self, mut reader: R) -> Result { - Ok(Message::GetBlocks { - version: Version(reader.read_u32::()?), - block_locator_hashes: Vec::zcash_deserialize(&mut reader)?, - hash_stop: BlockHeaderHash::zcash_deserialize(&mut reader)?, - }) + if self.builder.version == Version(reader.read_u32::()?) { + Ok(Message::GetBlocks { + block_locator_hashes: Vec::zcash_deserialize(&mut reader)?, + hash_stop: BlockHeaderHash::zcash_deserialize(&mut reader)?, + }) + } else { + Err(Error::Parse("getblocks version did not match negotiation")) + } } /// Deserialize a `headers` message. @@ -474,11 +475,14 @@ impl Codec { } fn read_getheaders(&self, mut reader: R) -> Result { - Ok(Message::GetHeaders { - version: Version(reader.read_u32::()?), - block_locator_hashes: Vec::zcash_deserialize(&mut reader)?, - hash_stop: BlockHeaderHash::zcash_deserialize(&mut reader)?, - }) + if self.builder.version == Version(reader.read_u32::()?) { + Ok(Message::GetHeaders { + block_locator_hashes: Vec::zcash_deserialize(&mut reader)?, + hash_stop: BlockHeaderHash::zcash_deserialize(&mut reader)?, + }) + } else { + Err(Error::Parse("getblocks version did not match negotiation")) + } } fn read_inv(&self, reader: R) -> Result { diff --git a/zebra-network/src/protocol/external/message.rs b/zebra-network/src/protocol/external/message.rs index b9b1de20b..30740b946 100644 --- a/zebra-network/src/protocol/external/message.rs +++ b/zebra-network/src/protocol/external/message.rs @@ -160,9 +160,6 @@ pub enum Message { // restriction, or if they don't, what happens if we send them too // many results. GetBlocks { - /// The protocol version. - version: Version, - /// Block locators, from newest back to genesis block. block_locator_hashes: Vec, @@ -203,9 +200,6 @@ pub enum Message { // restriction, or if they don't, what happens if we send them too // many results. GetHeaders { - /// The protocol version. - version: Version, - /// Block locators, from newest back to genesis block. block_locator_hashes: Vec,