34 major breaking releases

38.0.0 Sep 26, 2024
37.0.0 Jul 18, 2024
35.0.0 Jul 12, 2024
34.0.0 Jun 24, 2024
3.0.0 Feb 10, 2021

#2 in #off-chain

Download history 955/week @ 2024-07-29 650/week @ 2024-08-05 1045/week @ 2024-08-12 1232/week @ 2024-08-19 839/week @ 2024-08-26 502/week @ 2024-09-02 933/week @ 2024-09-09 778/week @ 2024-09-16 1190/week @ 2024-09-23 1117/week @ 2024-09-30 1098/week @ 2024-10-07 1490/week @ 2024-10-14 1876/week @ 2024-10-21 1606/week @ 2024-10-28 1573/week @ 2024-11-04 21098/week @ 2024-11-11

26,325 downloads per month
Used in 56 crates (6 directly)

Apache-2.0

2.5MB
45K SLoC

Release

Polkadot SDK stable2409


lib.rs:

Merkle Mountain Range

Overview

Details on Merkle Mountain Ranges (MMRs) can be found here: https://github.com/mimblewimble/grin/blob/master/doc/mmr.md

The MMR pallet constructs an MMR from leaf data obtained on every block from LeafDataProvider. MMR nodes are stored both in:

  • on-chain storage - hashes only; not full leaf content;
  • off-chain storage - via Indexing API we push full leaf content (and all internal nodes as well) to the Off-chain DB, so that the data is available for Off-chain workers. Hashing used for MMR is configurable independently from the rest of the runtime (i.e. not using frame_system::Hashing) so something compatible with external chains can be used (like Keccak256 for Ethereum compatibility).

Depending on the usage context (off-chain vs on-chain) the pallet is able to:

  • verify MMR leaf proofs (on-chain)
  • generate leaf proofs (off-chain)

See primitives::Compact documentation for how you can optimize proof size for leafs that are composed from multiple elements.

What for?

Primary use case for this pallet is to generate MMR root hashes, that can latter on be used by BEEFY protocol (see https://github.com/paritytech/grandpa-bridge-gadget). MMR root hashes along with BEEFY will make it possible to build Super Light Clients (SLC) of Substrate-based chains. The SLC will be able to follow finality and can be shown proofs of more details that happened on the source chain. In that case the chain which contains the pallet generates the Root Hashes and Proofs, which are then presented to another chain acting as a light client which can verify them.

Secondary use case is to archive historical data, but still be able to retrieve them on-demand if needed. For instance if parent block hashes are stored in the MMR it's possible at any point in time to provide an MMR proof about some past block hash, while this data can be safely pruned from on-chain storage.

NOTE This pallet is experimental and not proven to work in production.

Dependencies

~18–33MB
~551K SLoC