@@ -36,20 +36,44 @@ const NODE_PREFIX: &[u8] = &[1];
36
36
const NULL_PREFIX : & [ u8 ] = & [ 2 ] ;
37
37
38
38
/// A MerklePath contains a list of hashes that form a proof for membership in a tree.
39
- #[ derive( Clone , Default , Debug , Hash , PartialEq , Eq , Serialize , Deserialize ) ]
39
+ #[ derive(
40
+ Clone ,
41
+ Default ,
42
+ Debug ,
43
+ Hash ,
44
+ PartialEq ,
45
+ Eq ,
46
+ Serialize ,
47
+ Deserialize ,
48
+ BorshSerialize ,
49
+ BorshDeserialize ,
50
+ ) ]
40
51
pub struct MerklePath < H : Hasher > ( Vec < H :: Hash > ) ;
41
52
42
53
/// A MerkleRoot contains the root hash of a MerkleTree.
43
- #[ derive( Clone , Default , Debug , Hash , PartialEq , Eq , Serialize , Deserialize ) ]
54
+ #[ derive(
55
+ Clone ,
56
+ Default ,
57
+ Debug ,
58
+ Hash ,
59
+ PartialEq ,
60
+ Eq ,
61
+ Serialize ,
62
+ Deserialize ,
63
+ BorshSerialize ,
64
+ BorshDeserialize ,
65
+ ) ]
44
66
pub struct MerkleRoot < H : Hasher > ( H :: Hash ) ;
45
67
46
68
/// A MerkleTree is a binary tree where each node is the hash of its children.
47
69
#[ derive(
48
70
Debug , Clone , PartialEq , Eq , BorshSerialize , BorshDeserialize , Serialize , Deserialize , Default ,
49
71
) ]
50
72
pub struct MerkleTree < H : Hasher = Keccak256 > {
51
- pub root : MerkleRoot < H > ,
73
+ pub root : MerkleRoot < H > ,
74
+
52
75
#[ serde( skip) ]
76
+ #[ borsh_skip]
53
77
pub nodes : Vec < H :: Hash > ,
54
78
}
55
79
@@ -68,6 +92,10 @@ impl<H: Hasher> MerkleRoot<H> {
68
92
}
69
93
current == self . 0
70
94
}
95
+
96
+ pub fn as_bytes ( & self ) -> & [ u8 ] {
97
+ self . 0 . as_ref ( )
98
+ }
71
99
}
72
100
73
101
/// Implements functionality for working with MerklePath (proofs).
@@ -76,6 +104,13 @@ impl<H: Hasher> MerklePath<H> {
76
104
pub fn new ( path : Vec < H :: Hash > ) -> Self {
77
105
Self ( path)
78
106
}
107
+
108
+ pub fn to_bytes ( & self ) -> Vec < u8 > {
109
+ self . 0
110
+ . iter ( )
111
+ . flat_map ( |hash| hash. as_ref ( ) . to_vec ( ) )
112
+ . collect ( )
113
+ }
79
114
}
80
115
81
116
/// Presents an Accumulator friendly interface for MerkleTree.
0 commit comments