Bitcoin Core  22.99.0
P2P Digital Currency
Classes | Functions | Variables
coinselection.h File Reference
#include <amount.h>
#include <policy/feerate.h>
#include <primitives/transaction.h>
#include <random.h>
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)
 
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 345 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 217 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 64 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 14 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 16 of file coinselection.h.