git / moonbite-core / src/script/address.h · raw
#pragma once#include <script/standard.h>#include <boost/variant.hpp>//// A wrapper around a boost::variant<CScript, StealthAddress> to deal with cases where// a raw CScript is passed around as an address, rather than a CTxDestination.// Since StealthAddresses can't be represented as a CScript, this wrapper should be used// wherever the address could contain a StealthAddress instead of a CScript//class DestinationAddr{public: DestinationAddr() = default; DestinationAddr(CScript script) : m_script(std::move(script)) {} DestinationAddr(StealthAddress address) : m_script(std::move(address)) {} DestinationAddr(const CTxDestination& dest); bool operator==(const DestinationAddr& rhs) const noexcept { return this->m_script == rhs.m_script; } bool operator<(const DestinationAddr& rhs) const noexcept { return this->m_script < rhs.m_script; } bool operator<=(const DestinationAddr& rhs) const noexcept { return this->m_script <= rhs.m_script; } std::string Encode() const; bool IsMWEB() const noexcept { return m_script.type() == typeid(StealthAddress); } bool IsEmpty() const noexcept { return !IsMWEB() && GetScript().empty(); } const CScript& GetScript() const noexcept; const StealthAddress& GetMWEBAddress() const noexcept; bool ExtractDestination(CTxDestination& dest) const;private: boost::variant<CScript, StealthAddress> m_script;};