Branch data Line data Source code
1 : : // Copyright (c) 2018-2021 The Bitcoin Core developers 2 : : // Distributed under the MIT software license, see the accompanying 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : : 5 : : #include <wallet/coincontrol.h> 6 : : 7 : : #include <common/args.h> 8 : : 9 : : namespace wallet { 10 : 0 : CCoinControl::CCoinControl() 11 : : { 12 [ # # # # ]: 0 : m_avoid_partial_spends = gArgs.GetBoolArg("-avoidpartialspends", DEFAULT_AVOIDPARTIALSPENDS); 13 : 0 : } 14 : : 15 : 0 : bool CCoinControl::HasSelected() const 16 : : { 17 [ + - ]: 2 : return !m_selected_inputs.empty(); 18 [ + - ]: 2 : } 19 : : 20 : 0 : bool CCoinControl::IsSelected(const COutPoint& output) const 21 : : { 22 : 0 : return m_selected_inputs.count(output) > 0; 23 : : } 24 : : 25 : 0 : bool CCoinControl::IsExternalSelected(const COutPoint& output) const 26 : : { 27 : 0 : return m_external_txouts.count(output) > 0; 28 : : } 29 : : 30 : 0 : std::optional<CTxOut> CCoinControl::GetExternalOutput(const COutPoint& outpoint) const 31 : : { 32 : 0 : const auto ext_it = m_external_txouts.find(outpoint); 33 [ # # ]: 0 : if (ext_it == m_external_txouts.end()) { 34 : 0 : return std::nullopt; 35 : : } 36 : 0 : 37 : 0 : return std::make_optional(ext_it->second); 38 : 0 : } 39 : 0 : 40 : 0 : void CCoinControl::Select(const COutPoint& output) 41 : 0 : { 42 : 0 : m_selected_inputs.insert(output); 43 : 0 : } 44 : : 45 : 0 : void CCoinControl::SelectExternal(const COutPoint& outpoint, const CTxOut& txout) 46 : : { 47 : 0 : m_selected_inputs.insert(outpoint); 48 : 0 : m_external_txouts.emplace(outpoint, txout); 49 : 0 : } 50 : : 51 : 0 : void CCoinControl::UnSelect(const COutPoint& output) 52 : : { 53 : 0 : m_selected_inputs.erase(output); 54 : 0 : } 55 : 0 : 56 : 0 : void CCoinControl::UnSelectAll() 57 : 0 : { 58 : 0 : m_selected_inputs.clear(); 59 : 0 : } 60 : : 61 : 0 : std::vector<COutPoint> CCoinControl::ListSelected() const 62 : : { 63 [ # # ]: 0 : return {m_selected_inputs.begin(), m_selected_inputs.end()}; 64 : 0 : } 65 : : 66 : 0 : void CCoinControl::SetInputWeight(const COutPoint& outpoint, int64_t weight) 67 : : { 68 : 0 : m_input_weights[outpoint] = weight; 69 : 0 : } 70 : : 71 : 0 : bool CCoinControl::HasInputWeight(const COutPoint& outpoint) const 72 : : { 73 : 0 : return m_input_weights.count(outpoint) > 0; 74 : 2 : } 75 : : 76 : 0 : int64_t CCoinControl::GetInputWeight(const COutPoint& outpoint) const 77 : : { 78 : 0 : auto it = m_input_weights.find(outpoint); 79 [ # # ]: 0 : assert(it != m_input_weights.end()); 80 : 0 : return it->second; 81 : : } 82 : : } // namespace wallet