mirror of
https://github.com/pezkuwichain/merkle-mountain-range.git
synced 2026-04-29 09:07:56 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 09092d0039 | |||
| caa2a4fdce | |||
| f0925ef6bd | |||
| 13d50d12d9 | |||
| b16216f90e | |||
| 9f9a95c73e |
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ckb-merkle-mountain-range"
|
name = "ckb-merkle-mountain-range"
|
||||||
version = "0.3.1"
|
version = "0.3.2"
|
||||||
authors = ["Nervos Core Dev <dev@nervos.org>"]
|
authors = ["Nervos Core Dev <dev@nervos.org>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ For example, we insert a leaf to the example MMR:
|
|||||||
3. insert parent node to position `20`.
|
3. insert parent node to position `20`.
|
||||||
4. the node `20` also has a left sibling `17`, calculate parent node: `merge(mmr[17], mmr[20])`.
|
4. the node `20` also has a left sibling `17`, calculate parent node: `merge(mmr[17], mmr[20])`.
|
||||||
5. insert new node to next position `21`.
|
5. insert new node to next position `21`.
|
||||||
6. the node `20` have no left sibling, complete the insertion.
|
6. the node `21` have no left sibling, complete the insertion.
|
||||||
|
|
||||||
Example MMR after insertion of a new leaf:
|
Example MMR after insertion of a new leaf:
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate criterion;
|
extern crate criterion;
|
||||||
|
|
||||||
use criterion::Criterion;
|
use criterion::{BenchmarkId, Criterion};
|
||||||
|
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use ckb_merkle_mountain_range::{util::MemStore, Error, MMRStore, Merge, Result, MMR};
|
use ckb_merkle_mountain_range::{util::MemStore, Error, MMRStore, Merge, Result, MMR};
|
||||||
@@ -53,13 +53,15 @@ fn prepare_mmr(count: u32) -> (u64, MemStore<NumberHash>, Vec<u64>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn bench(c: &mut Criterion) {
|
fn bench(c: &mut Criterion) {
|
||||||
c.bench_function_over_inputs(
|
{
|
||||||
"MMR insert",
|
let mut group = c.benchmark_group("MMR insertion");
|
||||||
|b, &&size| {
|
let inputs = [10_000, 100_000, 100_0000];
|
||||||
b.iter(|| prepare_mmr(size));
|
for input in inputs.iter() {
|
||||||
},
|
group.bench_with_input(BenchmarkId::new("times", input), &input, |b, &&size| {
|
||||||
&[10_000, 100_000, 100_0000],
|
b.iter(|| prepare_mmr(size));
|
||||||
);
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.bench_function("MMR gen proof", |b| {
|
c.bench_function("MMR gen proof", |b| {
|
||||||
let (mmr_size, store, positions) = prepare_mmr(100_0000);
|
let (mmr_size, store, positions) = prepare_mmr(100_0000);
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#![cfg_attr(not(feature = "std"), no_std)]
|
#![cfg_attr(not(feature = "std"), no_std)]
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
mod helper;
|
pub mod helper;
|
||||||
mod merge;
|
mod merge;
|
||||||
mod mmr;
|
mod mmr;
|
||||||
mod mmr_store;
|
mod mmr_store;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use crate::{Error, Merge, Result};
|
|||||||
use core::fmt::Debug;
|
use core::fmt::Debug;
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
|
#[allow(clippy::upper_case_acronyms)]
|
||||||
pub struct MMR<T, M, S: MMRStore<T>> {
|
pub struct MMR<T, M, S: MMRStore<T>> {
|
||||||
mmr_size: u64,
|
mmr_size: u64,
|
||||||
batch: MMRBatch<T, S>,
|
batch: MMRBatch<T, S>,
|
||||||
|
|||||||
Reference in New Issue
Block a user