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 : 1564 : CCoinControl::CCoinControl() 11 : : { 12 [ + - - + ]: 391 : m_avoid_partial_spends = gArgs.GetBoolArg("-avoidpartialspends", DEFAULT_AVOIDPARTIALSPENDS); 13 : 391 : } 14 : : 15 : 3150 : bool CCoinControl::HasSelected() const 16 : : { 17 [ + - ]: 3323 : return !m_selected_inputs.empty(); 18 [ + - ]: 173 : } 19 : : 20 : 5795 : bool CCoinControl::IsSelected(const COutPoint& output) const 21 : : { 22 : 5795 : return m_selected_inputs.count(output) > 0; 23 : : } 24 : : 25 : 10758 : bool CCoinControl::IsExternalSelected(const COutPoint& output) const 26 : : { 27 : 10758 : return m_external_txouts.count(output) > 0; 28 : : } 29 : : 30 : 6770 : std::optional<CTxOut> CCoinControl::GetExternalOutput(const COutPoint& outpoint) const 31 : : { 32 : 7161 : const auto ext_it = m_external_txouts.find(outpoint); 33 [ + + ]: 6770 : if (ext_it == m_external_txouts.end()) { 34 : 1455 : return std::nullopt; 35 : : } 36 : 391 : 37 : 5315 : return std::make_optional(ext_it->second); 38 : 6770 : } 39 : 391 : 40 : 5603 : void CCoinControl::Select(const COutPoint& output) 41 : 391 : { 42 : 5603 : m_selected_inputs.insert(output); 43 : 5994 : } 44 : : 45 : 7773 : void CCoinControl::SelectExternal(const COutPoint& outpoint, const CTxOut& txout) 46 : : { 47 : 7773 : m_selected_inputs.insert(outpoint); 48 : 7773 : m_external_txouts.emplace(outpoint, txout); 49 : 7773 : } 50 : : 51 : 12715 : void CCoinControl::UnSelect(const COutPoint& output) 52 : : { 53 : 12715 : m_selected_inputs.erase(output); 54 : 12324 : } 55 : 391 : 56 : 990 : void CCoinControl::UnSelectAll() 57 : 391 : { 58 : 990 : m_selected_inputs.clear(); 59 : 1381 : } 60 : : 61 : 3978 : std::vector<COutPoint> CCoinControl::ListSelected() const 62 : : { 63 [ + - ]: 3978 : return {m_selected_inputs.begin(), m_selected_inputs.end()}; 64 : 0 : } 65 : : 66 : 2727 : void CCoinControl::SetInputWeight(const COutPoint& outpoint, int64_t weight) 67 : : { 68 : 2727 : m_input_weights[outpoint] = weight; 69 : 2727 : } 70 : : 71 : 4070 : bool CCoinControl::HasInputWeight(const COutPoint& outpoint) const 72 : : { 73 : 4070 : return m_input_weights.count(outpoint) > 0; 74 : 173 : } 75 : : 76 : 1823 : int64_t CCoinControl::GetInputWeight(const COutPoint& outpoint) const 77 : : { 78 : 1823 : auto it = m_input_weights.find(outpoint); 79 [ + - ]: 1823 : assert(it != m_input_weights.end()); 80 : 1823 : return it->second; 81 : : } 82 : : } // namespace wallet