git / moonbite-core / src/libmw/src/node/CoinActions.h · raw
#pragma once#include <mw/models/tx/UTXO.h>#include <unordered_map>struct CoinAction { bool IsSpend() const noexcept { return pUTXO == nullptr; } UTXO::CPtr pUTXO;};class CoinsViewUpdates{public: CoinsViewUpdates() = default; void AddUTXO(const UTXO::CPtr& pUTXO) { AddAction(pUTXO->GetOutputID(), CoinAction{pUTXO}); } void SpendUTXO(const mw::Hash& output_id) { AddAction(output_id, CoinAction{nullptr}); } const std::unordered_map<mw::Hash, std::vector<CoinAction>>& GetActions() const noexcept { return m_actions; } std::vector<CoinAction> GetActions(const mw::Hash& output_id) const noexcept { auto iter = m_actions.find(output_id); if (iter != m_actions.cend()) { return iter->second; } return {}; } void Clear() noexcept { m_actions.clear(); }private: void AddAction(const mw::Hash& output_id, CoinAction&& action) { auto iter = m_actions.find(output_id); if (iter != m_actions.end()) { std::vector<CoinAction>& actions = iter->second; actions.emplace_back(std::move(action)); } else { std::vector<CoinAction> actions; actions.emplace_back(std::move(action)); m_actions.insert({output_id, actions}); } } std::unordered_map<mw::Hash, std::vector<CoinAction>> m_actions;};