@@ -755,15 +755,14 @@ impl<TYPES: NodeType, V: Versions> UpgradeLock<TYPES, V> {
755
755
/// # Errors
756
756
///
757
757
/// Errors if deserialization fails.
758
- pub async fn deserialize < M : HasViewNumber < TYPES > + for < ' a > Deserialize < ' a > > (
758
+ pub async fn deserialize < M : Debug + HasViewNumber < TYPES > + for < ' a > Deserialize < ' a > > (
759
759
& self ,
760
760
message : & [ u8 ] ,
761
761
) -> Result < ( M , Version ) > {
762
762
// Get the actual version from the message itself
763
- let actual_version = Version :: deserialize ( message)
763
+ let ( actual_version, rest ) = Version :: deserialize ( message)
764
764
. wrap ( )
765
- . context ( info ! ( "Failed to read message version!" ) ) ?
766
- . 0 ;
765
+ . context ( info ! ( "Failed to read message version!" ) ) ?;
767
766
768
767
// Deserialize the message using the stated version
769
768
let deserialized_message: M = match actual_version {
@@ -774,7 +773,17 @@ impl<TYPES: NodeType, V: Versions> UpgradeLock<TYPES, V> {
774
773
v if v == V :: Base :: VERSION => Serializer :: < V :: Base > :: deserialize ( message) ,
775
774
v if v == V :: Upgrade :: VERSION => Serializer :: < V :: Upgrade > :: deserialize ( message) ,
776
775
v => {
777
- bail ! ( "Cannot deserialize message with stated version {v}" ) ;
776
+ let attempted_deserialization: M = match bincode:: deserialize ( rest) {
777
+ Ok ( m) => m,
778
+ Err ( e) => {
779
+ bail ! ( "Cannot deserialize message with state version: {v}. Error: {e}" ) ;
780
+ } ,
781
+ } ;
782
+
783
+ bail ! ( warn!(
784
+ "Received a message with state version {v} which is invalid for its view: {:?}" ,
785
+ attempted_deserialization
786
+ ) ) ;
778
787
} ,
779
788
}
780
789
. wrap ( )
0 commit comments