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

#pragma once// Copyright (c) 2018-2019 David Burkett// Distributed under the MIT software license, see the accompanying// file LICENSE or http://www.opensource.org/licenses/mit-license.php.#include <mw/common/Macros.h>#include <mw/mmr/LeafIndex.h>#include <mw/models/crypto/Hash.h>#include <mw/crypto/Hasher.h>MMR_NAMESPACEclass Leaf{public:    Leaf() noexcept = default;    Leaf(const LeafIndex& index, mw::Hash hash, std::vector<uint8_t> data)        : m_index(index), m_hash(std::move(hash)), m_data(std::move(data)) { }    static Leaf Create(const LeafIndex& index, std::vector<uint8_t> data)    {        mw::Hash hash = CalcHash(index, data);        return Leaf(index, std::move(hash), std::move(data));    }    static mw::Hash CalcHash(const LeafIndex& index, const std::vector<uint8_t>& data)    {        return Hasher()            .Append<uint64_t>(index.GetPosition())            .Append(data)            .hash();    }    bool operator!=(const Leaf& rhs) const noexcept { return m_hash != rhs.m_hash; }    bool operator==(const Leaf& rhs) const noexcept { return m_hash == rhs.m_hash; }    const Index& GetNodeIndex() const noexcept { return m_index.GetNodeIndex(); }    const LeafIndex& GetLeafIndex() const noexcept { return m_index; }    const mw::Hash& GetHash() const noexcept { return m_hash; }    const std::vector<uint8_t>& vec() const noexcept { return m_data; }private:    LeafIndex m_index;    mw::Hash m_hash;    std::vector<uint8_t> m_data;};END_NAMESPACE