Bitcoin Core 22.99.0
P2P Digital Currency
Classes | Functions | Variables
coinselection.h File Reference
#include <consensus/amount.h>
#include <policy/feerate.h>
#include <primitives/transaction.h>
#include <random.h>
#include <optional>
Include dependency graph for coinselection.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CInputCoin
 A UTXO under consideration for use in funding a new transaction. More...
 
struct  CoinSelectionParams
 Parameters for one iteration of Coin Selection. More...
 
struct  CoinEligibilityFilter
 Parameters for filtering which OutputGroups we may use in coin selection. More...
 
struct  OutputGroup
 A group of UTXOs paid to the same output script. More...
 

Functions

CAmount GetSelectionWaste (const std::set< CInputCoin > &inputs, CAmount change_cost, CAmount target, bool use_effective_value=true)
 Compute the waste for this result given the cost of change and the opportunity cost of spending these inputs now vs in the future. More...
 
bool SelectCoinsBnB (std::vector< OutputGroup > &utxo_pool, const CAmount &selection_target, const CAmount &cost_of_change, std::set< CInputCoin > &out_set, CAmount &value_ret)
 
std::optional< std::pair< std::set< CInputCoin >, CAmount > > SelectCoinsSRD (const std::vector< OutputGroup > &utxo_pool, CAmount target_value)
 Select coins by Single Random Draw. More...
 
bool KnapsackSolver (const CAmount &nTargetValue, std::vector< OutputGroup > &groups, std::set< CInputCoin > &setCoinsRet, CAmount &nValueRet)
 

Variables

static constexpr CAmount MIN_CHANGE {COIN / 100}
 target minimum change amount More...
 
static const CAmount MIN_FINAL_CHANGE = MIN_CHANGE/2
 final minimum change amount after paying for fees More...
 

Function Documentation

◆ GetSelectionWaste()

CAmount GetSelectionWaste ( const std::set< CInputCoin > &  inputs,
CAmount  change_cost,
CAmount  target,
bool  use_effective_value = true 
)

Compute the waste for this result given the cost of change and the opportunity cost of spending these inputs now vs in the future.

If change exists, waste = change_cost + inputs * (effective_feerate - long_term_feerate) If no change, waste = excess + inputs * (effective_feerate - long_term_feerate) where excess = selected_effective_value - target change_cost = effective_feerate * change_output_size + long_term_feerate * change_spend_size

Parameters
[in]inputsThe selected inputs
[in]change_costThe cost of creating change and spending it in the future. Only used if there is change, in which case it must be positive. Must be 0 if there is no change.
[in]targetThe amount targeted by the coin selection algorithm.
[in]use_effective_valueWhether to use the input's effective value (when true) or the real value (when false).
Returns
The waste

Definition at line 372 of file coinselection.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ KnapsackSolver()

bool KnapsackSolver ( const CAmount nTargetValue,
std::vector< OutputGroup > &  groups,
std::set< CInputCoin > &  setCoinsRet,
CAmount nValueRet 
)

Definition at line 244 of file coinselection.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectCoinsBnB()

bool SelectCoinsBnB ( std::vector< OutputGroup > &  utxo_pool,
const CAmount selection_target,
const CAmount cost_of_change,
std::set< CInputCoin > &  out_set,
CAmount value_ret 
)

Definition at line 67 of file coinselection.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectCoinsSRD()

std::optional< std::pair< std::set< CInputCoin >, CAmount > > SelectCoinsSRD ( const std::vector< OutputGroup > &  utxo_pool,
CAmount  target_value 
)

Select coins by Single Random Draw.

OutputGroups are selected randomly from the eligible outputs until the target is satisfied

Parameters
[in]utxo_poolThe positive effective value OutputGroups eligible for selection
[in]target_valueThe target value to select for
Returns
If successful, a pair of set of outputs and total selected value, otherwise, std::nullopt

Definition at line 174 of file coinselection.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ MIN_CHANGE

constexpr CAmount MIN_CHANGE {COIN / 100}
staticconstexpr

target minimum change amount

Definition at line 16 of file coinselection.h.

◆ MIN_FINAL_CHANGE

const CAmount MIN_FINAL_CHANGE = MIN_CHANGE/2
static

final minimum change amount after paying for fees

Definition at line 18 of file coinselection.h.