| Crates.io | pezkuwi-ckb-merkle-mountain-range |
| lib.rs | pezkuwi-ckb-merkle-mountain-range |
| version | 0.8.2 |
| created_at | 2025-11-26 18:45:13.544276+00 |
| updated_at | 2025-11-26 18:58:22.64528+00 |
| description | A generalized merkle mountain range implementation (pezkuwi fork) |
| homepage | |
| repository | https://github.com/pezkuwichain/merkle-mountain-range |
| max_upload_size | |
| id | 1952016 |
| size | 119,767 |
A generalized merkle mountain range implementation.
# An 11 leaves MMR
14
/ \
6 13
/ \ / \
2 5 9 12 17
/ \ / \ / \ / \ / \
0 1 3 4 7 8 10 11 15 16 18
In MMR, we use the insertion order to reference leaves and nodes.
We insert a new leaf to MMR by the following:
For example, we insert a leaf to the example MMR:
19.18 and calculate parent node: merge(mmr[18], mmr[19]).20.20 also has a left sibling 17, calculate parent node: merge(mmr[17], mmr[20]).21.21 have no left sibling, complete the insertion.Example MMR after insertion of a new leaf:
14
/ \
6 13 21
/ \ / \ / \
2 5 9 12 17 20
/ \ / \ / \ / \ / \ / \
0 1 3 4 7 8 10 11 15 16 18 19
An MMR is constructed by one or more sub merkle trees (or mountains). Each sub merkle tree's root is a peak in MMR, we calculate the MMR root by bagging these peaks from right to left.
For example, in the 11 leaf MMR we have 3 peaks: 14, 17, 18, we bag these peaks from right to left to get the root: merge(mmr[14], merge(mmr[17], mmr[18])).
The merkle proof is an array of hashes constructed with the following parts:
We can reconstruct the merkle root from the proofs. Pre-calculating the peak positions from the size of MMR may help us do the bagging.