Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

use on_finalize for creating new mmr leaves #10907

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions frame/merkle-mountain-range/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,18 @@ pub mod pallet {
#[pallet::hooks]
impl<T: Config<I>, I: 'static> Hooks<BlockNumberFor<T>> for Pallet<T, I> {
fn on_initialize(_n: T::BlockNumber) -> Weight {
use primitives::LeafDataProvider;
let leaves = Self::mmr_leaves();
let peaks_before = mmr::utils::NodesUtils::new(leaves).number_of_peaks();
let peaks_after = mmr::utils::NodesUtils::new(leaves).number_of_peaks();

T::WeightInfo::on_initialize(peaks_before.max(peaks_after))
}

// produce leaf_data on_finalize instead of on_initialize because leaf
// data might not have changed before on_initialize gets called
fn on_finalize(_n: BlockNumberFor<T>) {
use primitives::LeafDataProvider;
let leaves = Self::mmr_leaves();
let data = T::LeafData::leaf_data();
// append new leaf to MMR
let mut mmr: ModuleMmr<mmr::storage::RuntimeStorage, T, I> = mmr::Mmr::new(leaves);
Expand All @@ -189,9 +198,6 @@ pub mod pallet {

<NumberOfLeaves<T, I>>::put(leaves);
<RootHash<T, I>>::put(root);

let peaks_after = mmr::utils::NodesUtils::new(leaves).number_of_peaks();
T::WeightInfo::on_initialize(peaks_before.max(peaks_after))
}
}
}
Expand Down