git / moonbite-core / src/libmw/include/mw/mmr/Segment.h · raw

#pragma once#include <mw/common/Macros.h>#include <mw/models/crypto/Hash.h>#include <mw/mmr/Leaf.h>#include <set>// Forward Declarationsclass IMMR;class ILeafSet;MMR_NAMESPACE/// <summary>/// Represents a collection of contiguous, unpruned leaves,/// and all hashes necessary to prove membership in the PMMR./// </summary>struct Segment{    // The requested unspent leaves, in ascending order    std::vector<mmr::Leaf> leaves;    // The MMR node hashes needed to verify the integrity of the MMR & the provided leaves    std::vector<mw::Hash> hashes;    // The "bagged" hash of the next lower peak (if there is one),    // which is necessary to compute the PMMR root    boost::optional<mw::Hash> lower_peak;};/// <summary>/// Builds Segments for a provided MMR and segment./// </summary>class SegmentFactory{public:    static Segment Assemble(        const IMMR& mmr,        const ILeafSet& leafset,        const LeafIndex& first_leaf_idx,        const uint16_t num_leaves    );private:    static std::set<Index> CalcHashIndices(        const ILeafSet& leafset,        const std::vector<Index>& peak_indices,        const LeafIndex& first_leaf_idx,        const LeafIndex& last_leaf_idx    );};END_NAMESPACE