git / moonbite-core / src/libmw/include/mw/models/tx/PegOutCoin.h · raw
#pragma once#include <mw/common/Traits.h>#include <mw/util/StringUtil.h>#include <script/script.h>#include <util/strencodings.h>#include <amount.h>//// Represents coins being pegged out, i.e. moved from the extension block to the canonical chain.//class PegOutCoin : public Traits::ISerializable, public Traits::IPrintable{public: PegOutCoin() = default; PegOutCoin(const CAmount amount, CScript scriptPubKey) : m_amount(amount), m_scriptPubKey(std::move(scriptPubKey)) { } bool operator<(const PegOutCoin& rhs) const noexcept { if (m_amount != rhs.m_amount) { return m_amount < rhs.m_amount; } return m_scriptPubKey < rhs.m_scriptPubKey; } bool operator!=(const PegOutCoin& rhs) const noexcept { return m_amount != rhs.m_amount || m_scriptPubKey != rhs.m_scriptPubKey; } bool operator==(const PegOutCoin& rhs) const noexcept { return m_amount == rhs.m_amount && m_scriptPubKey == rhs.m_scriptPubKey; } CAmount GetAmount() const noexcept { return m_amount; } const CScript& GetScriptPubKey() const noexcept { return m_scriptPubKey; } // // Serialization/Deserialization // IMPL_SERIALIZABLE(PegOutCoin, obj) { READWRITE(VARINT_MODE(obj.m_amount, VarIntMode::NONNEGATIVE_SIGNED)); READWRITE(obj.m_scriptPubKey); if (ser_action.ForRead()) { if (obj.m_scriptPubKey.empty()) { throw std::ios_base::failure("Pegout scriptPubKey must not be empty"); } } } std::string Format() const noexcept final { return StringUtil::Format("PegOutCoin(scriptPubKey:{}, amount:{})", HexStr(m_scriptPubKey), m_amount); }private: CAmount m_amount; CScript m_scriptPubKey;};