@@ -351,6 +351,22 @@ impl<K: MKMapKey> MKMapProof<K> {
351
351
}
352
352
}
353
353
354
+ impl < K : MKMapKey + Serialize + for < ' de > Deserialize < ' de > > MKMapProof < K > {
355
+ /// Convert the proof to bytes
356
+ pub fn to_bytes ( & self ) -> StdResult < Vec < u8 > > {
357
+ bincode:: serde:: encode_to_vec ( self , bincode:: config:: standard ( ) ) . map_err ( |e| e. into ( ) )
358
+ }
359
+
360
+ /// Convert the proof from bytes
361
+ pub fn from_bytes ( bytes : & [ u8 ] ) -> StdResult < Self > {
362
+ let ( res, _) =
363
+ bincode:: serde:: decode_from_slice :: < Self , _ > ( bytes, bincode:: config:: standard ( ) )
364
+ . map_err ( |e| anyhow ! ( e) ) ?;
365
+
366
+ Ok ( res)
367
+ }
368
+ }
369
+
354
370
impl < K : MKMapKey > From < MKProof > for MKMapProof < K > {
355
371
fn from ( other : MKProof ) -> Self {
356
372
MKMapProof :: new ( other, BTreeMap :: default ( ) )
@@ -821,6 +837,31 @@ mod tests {
821
837
assert_eq ! ( mktree_nodes_to_certify. to_vec( ) , mk_proof_leaves) ;
822
838
}
823
839
840
+ #[ test]
841
+ fn test_mk_map_should_serialize_deserialize_proof ( ) {
842
+ let entries = generate_merkle_trees ( 10 , 3 ) ;
843
+ let mktree_nodes_to_certify = [
844
+ entries[ 0 ] . 1 . leaves ( ) [ 0 ] . clone ( ) ,
845
+ entries[ 1 ] . 1 . leaves ( ) [ 0 ] . clone ( ) ,
846
+ entries[ 1 ] . 1 . leaves ( ) [ 1 ] . clone ( ) ,
847
+ entries[ 2 ] . 1 . leaves ( ) [ 1 ] . clone ( ) ,
848
+ ] ;
849
+ let mk_map_full =
850
+ MKMap :: < _ , _ , MKTreeStoreInMemory > :: new ( & into_mkmap_tree_entries ( entries) ) . unwrap ( ) ;
851
+ let mk_map_proof = mk_map_full. compute_proof ( & mktree_nodes_to_certify) . unwrap ( ) ;
852
+
853
+ let serialized_mk_map_proof = mk_map_proof
854
+ . to_bytes ( )
855
+ . expect ( "Serialization should not fail" ) ;
856
+ let deserialized_mk_map_proof =
857
+ MKMapProof :: < BlockRange > :: from_bytes ( & serialized_mk_map_proof)
858
+ . expect ( "Deserialization should not fail" ) ;
859
+ assert_eq ! (
860
+ mk_map_proof, deserialized_mk_map_proof,
861
+ "Deserialized proof should match the original"
862
+ ) ;
863
+ }
864
+
824
865
#[ test]
825
866
fn test_mk_map_should_compute_and_verify_valid_proof_recursively ( ) {
826
867
let entries = generate_merkle_trees ( 100 , 3 ) ;
0 commit comments