From 7b05bd62af9fb69d727eba7bf2bd709b4a1ec300 Mon Sep 17 00:00:00 2001 From: Emmanuel Ikwuoma Date: Wed, 10 Jun 2026 09:37:41 +0100 Subject: [PATCH 1/2] optimize decode path for versioned codec pending Phase 3 --- crates/types/src/codec/mod.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/types/src/codec/mod.rs b/crates/types/src/codec/mod.rs index 2489bdf..fc8a2ee 100644 --- a/crates/types/src/codec/mod.rs +++ b/crates/types/src/codec/mod.rs @@ -38,6 +38,15 @@ macro_rules! impl_versioned_codec { return Err($crate::codec::error::CodecError::EmptyBytes); } + if bytes[0] == $version_val as u8 { + let _ = bytes.get_u8(); + return malachitebft_codec::Codec::decode( + &$crate::codec::proto::ProtobufCodec, + bytes, + ) + .map_err($crate::codec::error::CodecError::Protobuf); + } + // TODO: Phase 3: Remove after all nodes are upgraded to use versioning if let Ok(msg) = malachitebft_codec::Codec::decode( &$crate::codec::proto::ProtobufCodec, @@ -47,16 +56,7 @@ macro_rules! impl_versioned_codec { } let version_byte = bytes.get_u8(); - let version = <$version_ty>::try_from(version_byte) - .map_err($crate::codec::error::CodecError::UnsupportedVersion)?; - if version != $version_val { - return Err($crate::codec::error::CodecError::UnsupportedVersion( - version_byte, - )); - } - - malachitebft_codec::Codec::decode(&$crate::codec::proto::ProtobufCodec, bytes) - .map_err($crate::codec::error::CodecError::Protobuf) + Err($crate::codec::error::CodecError::UnsupportedVersion(version_byte)) } fn encode(&self, msg: &$ty) -> Result { From c0adaff851c1192fc5789abfb81a3d8b49650273 Mon Sep 17 00:00:00 2001 From: Emmanuel Ikwuoma Date: Wed, 10 Jun 2026 10:01:03 +0100 Subject: [PATCH 2/2] fix cargo fmt --- crates/types/src/codec/mod.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/types/src/codec/mod.rs b/crates/types/src/codec/mod.rs index fc8a2ee..0c8ff2a 100644 --- a/crates/types/src/codec/mod.rs +++ b/crates/types/src/codec/mod.rs @@ -56,7 +56,9 @@ macro_rules! impl_versioned_codec { } let version_byte = bytes.get_u8(); - Err($crate::codec::error::CodecError::UnsupportedVersion(version_byte)) + Err($crate::codec::error::CodecError::UnsupportedVersion( + version_byte, + )) } fn encode(&self, msg: &$ty) -> Result {