mirror of
https://github.com/pezkuwichain/merkle-mountain-range.git
synced 2026-06-24 18:11:03 +00:00
refactor: split MMRStore trait
This commit is contained in:
+11
-24
@@ -7,7 +7,7 @@
|
||||
use crate::borrow::Cow;
|
||||
use crate::collections::VecDeque;
|
||||
use crate::helper::{get_peaks, parent_offset, pos_height_in_tree, sibling_offset};
|
||||
use crate::mmr_store::{MMRBatch, MMRStore};
|
||||
use crate::mmr_store::{MMRBatch, MMRStoreReadOps, MMRStoreWriteOps};
|
||||
use crate::vec;
|
||||
use crate::vec::Vec;
|
||||
use crate::{Error, Merge, Result};
|
||||
@@ -21,7 +21,7 @@ pub struct MMR<T, M, S> {
|
||||
merge: PhantomData<M>,
|
||||
}
|
||||
|
||||
impl<T: Clone + PartialEq + Debug, M: Merge<Item = T>, S: MMRStore<T>> MMR<T, M, S> {
|
||||
impl<T, M, S> MMR<T, M, S> {
|
||||
pub fn new(mmr_size: u64, store: S) -> Self {
|
||||
MMR {
|
||||
mmr_size,
|
||||
@@ -29,7 +29,9 @@ impl<T: Clone + PartialEq + Debug, M: Merge<Item = T>, S: MMRStore<T>> MMR<T, M,
|
||||
merge: PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Clone + PartialEq, M: Merge<Item = T>, S: MMRStoreReadOps<T>> MMR<T, M, S> {
|
||||
// find internal MMR elem, the pos must exists, otherwise a error will return
|
||||
fn find_elem<'b>(&self, pos: u64, hashes: &'b [T]) -> Result<Cow<'b, T>> {
|
||||
let pos_offset = pos.checked_sub(self.mmr_size);
|
||||
@@ -214,7 +216,9 @@ impl<T: Clone + PartialEq + Debug, M: Merge<Item = T>, S: MMRStore<T>> MMR<T, M,
|
||||
|
||||
Ok(MerkleProof::new(self.mmr_size, proof))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, M, S: MMRStoreWriteOps<T>> MMR<T, M, S> {
|
||||
pub fn commit(self) -> Result<()> {
|
||||
self.batch.commit()
|
||||
}
|
||||
@@ -227,7 +231,7 @@ pub struct MerkleProof<T, M> {
|
||||
merge: PhantomData<M>,
|
||||
}
|
||||
|
||||
impl<T: PartialEq + Debug + Clone, M: Merge<Item = T>> MerkleProof<T, M> {
|
||||
impl<T: Clone + PartialEq, M: Merge<Item = T>> MerkleProof<T, M> {
|
||||
pub fn new(mmr_size: u64, proof: Vec<T>) -> Self {
|
||||
MerkleProof {
|
||||
mmr_size,
|
||||
@@ -284,12 +288,7 @@ impl<T: PartialEq + Debug + Clone, M: Merge<Item = T>> MerkleProof<T, M> {
|
||||
}
|
||||
}
|
||||
|
||||
fn calculate_peak_root<
|
||||
'a,
|
||||
T: 'a + PartialEq + Debug + Clone,
|
||||
M: Merge<Item = T>,
|
||||
I: Iterator<Item = &'a T>,
|
||||
>(
|
||||
fn calculate_peak_root<'a, T: 'a + Clone, M: Merge<Item = T>, I: Iterator<Item = &'a T>>(
|
||||
leaves: Vec<(u64, T)>,
|
||||
peak_pos: u64,
|
||||
proof_iter: &mut I,
|
||||
@@ -345,12 +344,7 @@ fn calculate_peak_root<
|
||||
Err(Error::CorruptedProof)
|
||||
}
|
||||
|
||||
fn calculate_peaks_hashes<
|
||||
'a,
|
||||
T: 'a + PartialEq + Debug + Clone,
|
||||
M: Merge<Item = T>,
|
||||
I: Iterator<Item = &'a T>,
|
||||
>(
|
||||
fn calculate_peaks_hashes<'a, T: 'a + Clone, M: Merge<Item = T>, I: Iterator<Item = &'a T>>(
|
||||
mut leaves: Vec<(u64, T)>,
|
||||
mmr_size: u64,
|
||||
mut proof_iter: I,
|
||||
@@ -405,9 +399,7 @@ fn calculate_peaks_hashes<
|
||||
Ok(peaks_hashes)
|
||||
}
|
||||
|
||||
fn bagging_peaks_hashes<'a, T: 'a + PartialEq + Debug + Clone, M: Merge<Item = T>>(
|
||||
mut peaks_hashes: Vec<T>,
|
||||
) -> Result<T> {
|
||||
fn bagging_peaks_hashes<T, M: Merge<Item = T>>(mut peaks_hashes: Vec<T>) -> Result<T> {
|
||||
// bagging peaks
|
||||
// bagging from right to left via hash(right, left).
|
||||
while peaks_hashes.len() > 1 {
|
||||
@@ -422,12 +414,7 @@ fn bagging_peaks_hashes<'a, T: 'a + PartialEq + Debug + Clone, M: Merge<Item = T
|
||||
/// 1. sort items by position
|
||||
/// 2. calculate root of each peak
|
||||
/// 3. bagging peaks
|
||||
fn calculate_root<
|
||||
'a,
|
||||
T: 'a + PartialEq + Debug + Clone,
|
||||
M: Merge<Item = T>,
|
||||
I: Iterator<Item = &'a T>,
|
||||
>(
|
||||
fn calculate_root<'a, T: 'a + Clone, M: Merge<Item = T>, I: Iterator<Item = &'a T>>(
|
||||
leaves: Vec<(u64, T)>,
|
||||
mmr_size: u64,
|
||||
proof_iter: I,
|
||||
|
||||
Reference in New Issue
Block a user