git / moonbite-core / src/wallet/coincontrol.h · raw

// Copyright (c) 2011-2019 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_WALLET_COINCONTROL_H#define BITCOIN_WALLET_COINCONTROL_H#include <optional.h>#include <outputtype.h>#include <policy/feerate.h>#include <policy/fees.h>#include <primitives/transaction.h>#include <script/standard.h>const int DEFAULT_MIN_DEPTH = 0;const int DEFAULT_MAX_DEPTH = 9999999;//! Default for -avoidpartialspendsstatic constexpr bool DEFAULT_AVOIDPARTIALSPENDS = false;/** Coin Control Features. */class CCoinControl{public:    //! Custom change destination, if not set an address is generated    CTxDestination destChange;    //! Override the default change type if set, ignored if destChange is set    Optional<OutputType> m_change_type;    //! If false, only selected inputs are used    bool m_add_inputs;    //! If false, allows unselected inputs, but requires all selected inputs be used    bool fAllowOtherInputs;    //! Includes watch only addresses which are solvable    bool fAllowWatchOnly;    //! Override automatic min/max checks on fee, m_feerate must be set if true    bool fOverrideFeeRate;    //! Override the wallet's m_pay_tx_fee if set    Optional<CFeeRate> m_feerate;    //! Override the default confirmation target if set    Optional<unsigned int> m_confirm_target;    //! Override the wallet's m_signal_rbf if set    Optional<bool> m_signal_bip125_rbf;    //! Avoid partial use of funds sent to a given address    bool m_avoid_partial_spends;    //! Forbids inclusion of dirty (previously used) addresses    bool m_avoid_address_reuse;    //! Fee estimation mode to control arguments to estimateSmartFee    FeeEstimateMode m_fee_mode;    //! Minimum chain depth value for coin availability    int m_min_depth = DEFAULT_MIN_DEPTH;    //! Maximum chain depth value for coin availability    int m_max_depth = DEFAULT_MAX_DEPTH;    bool fPegIn;    bool fPegOut;    CCoinControl()    {        SetNull();    }    void SetNull();    bool HasSelected() const    {        return (setSelected.size() > 0);    }    bool IsSelected(const OutputIndex& idx) const    {        return (setSelected.count(idx) > 0);    }    void Select(const OutputIndex& idx)    {        setSelected.insert(idx);    }    void UnSelect(const OutputIndex& idx)    {        setSelected.erase(idx);    }    void UnSelectAll()    {        setSelected.clear();    }    void ListSelected(std::vector<OutputIndex>& vOutpoints) const    {        vOutpoints.assign(setSelected.begin(), setSelected.end());    }private:    std::set<OutputIndex> setSelected;};#endif // BITCOIN_WALLET_COINCONTROL_H