Skip to content

Commit ac62640

Browse files
authored
Merge pull request #30 from nervosnetwork/quake/split-store-trait
refactor: split `Store` trait into small ones
2 parents e9d6562 + f397bc2 commit ac62640

File tree

4 files changed

+19
-7
lines changed

4 files changed

+19
-7
lines changed

src/default_store.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
22
collections,
33
error::Error,
4-
traits::Store,
4+
traits::{StoreReadOps, StoreWriteOps},
55
tree::{BranchKey, BranchNode},
66
H256,
77
};
@@ -25,13 +25,16 @@ impl<V> DefaultStore<V> {
2525
}
2626
}
2727

28-
impl<V: Clone> Store<V> for DefaultStore<V> {
28+
impl<V: Clone> StoreReadOps<V> for DefaultStore<V> {
2929
fn get_branch(&self, branch_key: &BranchKey) -> Result<Option<BranchNode>, Error> {
3030
Ok(self.branches_map.get(branch_key).map(Clone::clone))
3131
}
3232
fn get_leaf(&self, leaf_key: &H256) -> Result<Option<V>, Error> {
3333
Ok(self.leaves_map.get(leaf_key).map(Clone::clone))
3434
}
35+
}
36+
37+
impl<V> StoreWriteOps<V> for DefaultStore<V> {
3538
fn insert_branch(&mut self, branch_key: BranchKey, branch: BranchNode) -> Result<(), Error> {
3639
self.branches_map.insert(branch_key, branch);
3740
Ok(())

src/tests/tree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ proptest! {
398398
#[test]
399399
fn test_smt_single_leaf_small((pairs, _n) in leaves(1, 50)){
400400
let smt = new_smt(pairs.clone());
401-
for (k, v) in pairs.clone() {
401+
for (k, v) in pairs {
402402
let proof = smt.merkle_proof(vec![k]).expect("gen proof");
403403
let compiled_proof = proof.clone().compile(vec![k]).expect("compile proof");
404404
assert!(proof.verify::<Blake2bHasher>(smt.root(), vec![(k, v)]).expect("verify proof"));

src/traits.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@ impl Value for H256 {
2626
}
2727
}
2828

29-
/// Trait for customize backend storage
30-
pub trait Store<V> {
29+
/// Traits for customize backend storage
30+
pub trait StoreReadOps<V> {
3131
fn get_branch(&self, branch_key: &BranchKey) -> Result<Option<BranchNode>, Error>;
3232
fn get_leaf(&self, leaf_key: &H256) -> Result<Option<V>, Error>;
33+
}
34+
35+
pub trait StoreWriteOps<V> {
3336
fn insert_branch(&mut self, node_key: BranchKey, branch: BranchNode) -> Result<(), Error>;
3437
fn insert_leaf(&mut self, leaf_key: H256, leaf: V) -> Result<(), Error>;
3538
fn remove_branch(&mut self, node_key: &BranchKey) -> Result<(), Error>;

src/tree.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)