@@ -3,7 +3,7 @@ use crate::{
33 error:: { Error , Result } ,
44 merge:: { merge, MergeValue } ,
55 merkle_proof:: MerkleProof ,
6- traits:: { Hasher , Store , Value } ,
6+ traits:: { Hasher , StoreReadOps , StoreWriteOps , Value } ,
77 vec:: Vec ,
88 H256 , MAX_STACK_SIZE ,
99} ;
@@ -52,7 +52,7 @@ pub struct SparseMerkleTree<H, V, S> {
5252 phantom : PhantomData < ( H , V ) > ,
5353}
5454
55- impl < H : Hasher + Default , V : Value , S : Store < V > > SparseMerkleTree < H , V , S > {
55+ impl < H , V , S > SparseMerkleTree < H , V , S > {
5656 /// Build a merkle tree from root and store
5757 pub fn new ( root : H256 , store : S ) -> SparseMerkleTree < H , V , S > {
5858 SparseMerkleTree {
@@ -86,7 +86,11 @@ impl<H: Hasher + Default, V: Value, S: Store<V>> SparseMerkleTree<H, V, S> {
8686 pub fn store_mut ( & mut self ) -> & mut S {
8787 & mut self . store
8888 }
89+ }
8990
91+ impl < H : Hasher + Default , V : Value , S : StoreReadOps < V > + StoreWriteOps < V > >
92+ SparseMerkleTree < H , V , S >
93+ {
9094 /// Update a leaf, return new merkle root
9195 /// set to zero value to delete a key
9296 pub fn update ( & mut self , key : H256 , value : V ) -> Result < & H256 > {
@@ -220,7 +224,9 @@ impl<H: Hasher + Default, V: Value, S: Store<V>> SparseMerkleTree<H, V, S> {
220224
221225 Ok ( & self . root )
222226 }
227+ }
223228
229+ impl < H : Hasher + Default , V : Value , S : StoreReadOps < V > > SparseMerkleTree < H , V , S > {
224230 /// Get value of a leaf
225231 /// return zero value if leaf not exists
226232 pub fn get ( & self , key : & H256 ) -> Result < V > {
0 commit comments