5 #ifndef BITCOIN_WALLET_SPEND_H 6 #define BITCOIN_WALLET_SPEND_H 41 std::map<OutputType, std::vector<COutput>>
coins;
44 std::vector<COutput>
All()
const;
50 void Erase(
const std::set<COutPoint>& coins_to_remove);
62 const CCoinControl* coinControl =
nullptr,
63 std::optional<CFeeRate> feerate = std::nullopt,
64 const CAmount& nMinimumAmount = 1,
67 const uint64_t nMaximumCount = 0,
89 std::vector<OutputGroup>
GroupOutputs(const CWallet&
wallet, const
std::vector<COutput>& outputs, const CoinSelectionParams& coin_sel_params, const CoinEligibilityFilter& filter,
bool positive_only);
105 std::optional<SelectionResult>
AttemptSelection(const CWallet&
wallet, const
CAmount& nTargetValue, const CoinEligibilityFilter& eligibility_filter, const CoinsResult& available_coins,
106 const CoinSelectionParams& coin_selection_params,
bool allow_mixed_output_types);
121 std::optional<SelectionResult>
ChooseSelectionResult(const CWallet&
wallet, const
CAmount& nTargetValue, const CoinEligibilityFilter& eligibility_filter, const
std::vector<COutput>& available_coins,
122 const CoinSelectionParams& coin_selection_params);
135 std::optional<SelectionResult>
SelectCoins(const CWallet&
wallet, CoinsResult& available_coins, const
CAmount& nTargetValue, const CCoinControl& coin_control,
146 : tx(_tx), fee(_fee), fee_calc(_fee_calc), change_pos(_change_pos) {}
163 #endif // BITCOIN_WALLET_SPEND_H std::shared_ptr< const CTransaction > CTransactionRef
void FundTransaction(CWallet &wallet, CMutableTransaction &tx, CAmount &fee_out, int &change_position, const UniValue &options, CCoinControl &coinControl, bool override_min_fee)
std::optional< SelectionResult > AttemptSelection(const CWallet &wallet, const CAmount &nTargetValue, const CoinEligibilityFilter &eligibility_filter, const CoinsResult &available_coins, const CoinSelectionParams &coin_selection_params, bool allow_mixed_output_types)
Attempt to find a valid input set that preserves privacy by not mixing OutputTypes.
CoinsResult AvailableCoins(const CWallet &wallet, const CCoinControl *coinControl, std::optional< CFeeRate > feerate, const CAmount &nMinimumAmount, const CAmount &nMaximumAmount, const CAmount &nMinimumSumAmount, const uint64_t nMaximumCount, bool only_spendable)
Populate the CoinsResult struct with vectors of available COutputs, organized by OutputType.
std::map< OutputType, std::vector< COutput > > coins
int64_t CAmount
Amount in satoshis (Can be negative)
COutputs available for spending, stored by OutputType.
CAmount GetAvailableBalance(const CWallet &wallet, const CCoinControl *coinControl)
std::optional< SelectionResult > ChooseSelectionResult(const CWallet &wallet, const CAmount &nTargetValue, const CoinEligibilityFilter &eligibility_filter, const std::vector< COutput > &available_coins, const CoinSelectionParams &coin_selection_params)
Attempt to find a valid input set that meets the provided eligibility filter and target.
std::variant< CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, WitnessUnknown > CTxDestination
A txout script template with a specific destination.
An output of a transaction.
const CTxOut & FindNonChangeParentOutput(const CWallet &wallet, const CTransaction &tx, int output)
Find non-change parent output.
An outpoint - a combination of a transaction hash and an index n into its vout.
TxSize CalculateMaximumSignedTxSize(const CTransaction &tx, const CWallet *wallet, const std::vector< CTxOut > &txouts, const CCoinControl *coin_control)
Calculate the size of the transaction using CoinControl to determine whether to expect signature grin...
void Shuffle(I first, I last, R &&rng)
More efficient than using std::shuffle on a FastRandomContext.
#define EXCLUSIVE_LOCKS_REQUIRED(...)
int CalculateMaximumSignedInputSize(const CTxOut &txout, const COutPoint outpoint, const SigningProvider *provider, const CCoinControl *coin_control)
An interface to be implemented by keystores that support signing.
std::optional< SelectionResult > SelectCoins(const CWallet &wallet, CoinsResult &available_coins, const CAmount &nTargetValue, const CCoinControl &coin_control, const CoinSelectionParams &coin_selection_params)
Select a set of coins such that nTargetValue is met and at least all coins from coin_control are sele...
static constexpr CAmount MAX_MONEY
No amount larger than this (in satoshi) is valid.
util::Result< CreatedTransactionResult > CreateTransaction(CWallet &wallet, const std::vector< CRecipient > &vecSend, int change_pos, const CCoinControl &coin_control, bool sign)
Create a new transaction paying the recipients with a set of coins selected by SelectCoins(); Also cr...
A mutable version of CTransaction.
std::vector< OutputGroup > GroupOutputs(const CWallet &wallet, const std::vector< COutput > &outputs, const CoinSelectionParams &coin_sel_params, const CoinEligibilityFilter &filter, bool positive_only)
The basic transaction that is broadcasted on the network and contained in blocks. ...
CreatedTransactionResult(CTransactionRef _tx, CAmount _fee, int _change_pos, const FeeCalculation &_fee_calc)
A UTXO under consideration for use in funding a new transaction.
bool error(const char *fmt, const Args &... args)
CoinsResult AvailableCoinsListUnspent(const CWallet &wallet, const CCoinControl *coinControl, const CAmount &nMinimumAmount, const CAmount &nMaximumAmount, const CAmount &nMinimumSumAmount, const uint64_t nMaximumCount)
Wrapper function for AvailableCoins which skips the feerate parameter.
std::map< CTxDestination, std::vector< COutput > > ListCoins(const CWallet &wallet)
Return list of available coins and locked coins grouped by non-change output address.