git / moonbite-core / src/libmw/include/mw/models/block/BlockUndo.h · raw
#pragma once#include <mw/common/Macros.h>#include <mw/common/Traits.h>#include <mw/models/block/Header.h>#include <mw/models/tx/UTXO.h>MW_NAMESPACEclass BlockUndo : public Traits::ISerializable{public: using CPtr = std::shared_ptr<const BlockUndo>; // // Constructors // BlockUndo(const mw::Header::CPtr& pPrevHeader, std::vector<UTXO>&& coinsSpent, std::vector<mw::Hash>&& coinsAdded) : m_pPrevHeader(pPrevHeader), m_coinsSpent(std::move(coinsSpent)), m_coinsAdded(std::move(coinsAdded)) { } BlockUndo(const BlockUndo& other) = default; BlockUndo(BlockUndo&& other) noexcept = default; BlockUndo() = default; // // Operators // BlockUndo& operator=(const BlockUndo& other) = default; BlockUndo& operator=(BlockUndo&& other) noexcept = default; // // Getters // const mw::Header::CPtr& GetPreviousHeader() const noexcept { return m_pPrevHeader; } const std::vector<UTXO>& GetCoinsSpent() const noexcept { return m_coinsSpent; } const std::vector<mw::Hash>& GetCoinsAdded() const noexcept { return m_coinsAdded; } // // Serialization/Deserialization // IMPL_SERIALIZABLE(BlockUndo, obj) { READWRITE(WrapOptionalPtr(obj.m_pPrevHeader), obj.m_coinsSpent, obj.m_coinsAdded); }private: Header::CPtr m_pPrevHeader; std::vector<UTXO> m_coinsSpent; std::vector<mw::Hash> m_coinsAdded;};END_NAMESPACE