mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-12 04:42:36 -03:00
79804fe24b
When the user doesn't specificy inputs, it makes sense to automatically select them. But when the user does specify inputs, we now fail if the amount is insufficient, unless addInputs is set to true.
95 lines
2.7 KiB
C++
95 lines
2.7 KiB
C++
// 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 -avoidpartialspends
|
|
static 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;
|
|
|
|
CCoinControl()
|
|
{
|
|
SetNull();
|
|
}
|
|
|
|
void SetNull();
|
|
|
|
bool HasSelected() const
|
|
{
|
|
return (setSelected.size() > 0);
|
|
}
|
|
|
|
bool IsSelected(const COutPoint& output) const
|
|
{
|
|
return (setSelected.count(output) > 0);
|
|
}
|
|
|
|
void Select(const COutPoint& output)
|
|
{
|
|
setSelected.insert(output);
|
|
}
|
|
|
|
void UnSelect(const COutPoint& output)
|
|
{
|
|
setSelected.erase(output);
|
|
}
|
|
|
|
void UnSelectAll()
|
|
{
|
|
setSelected.clear();
|
|
}
|
|
|
|
void ListSelected(std::vector<COutPoint>& vOutpoints) const
|
|
{
|
|
vOutpoints.assign(setSelected.begin(), setSelected.end());
|
|
}
|
|
|
|
private:
|
|
std::set<COutPoint> setSelected;
|
|
};
|
|
|
|
#endif // BITCOIN_WALLET_COINCONTROL_H
|