Bitcoin Core 28.99.0
P2P Digital Currency
|
#include <coinselection.h>
Public Member Functions | |
SelectionResult (const CAmount target, SelectionAlgorithm algo) | |
SelectionResult ()=delete | |
CAmount | GetSelectedValue () const |
Get the sum of the input values. More... | |
CAmount | GetSelectedEffectiveValue () const |
CAmount | GetTotalBumpFees () const |
void | Clear () |
void | AddInput (const OutputGroup &group) |
void | AddInputs (const std::set< std::shared_ptr< COutput > > &inputs, bool subtract_fee_outputs) |
void | SetBumpFeeDiscount (const CAmount discount) |
How much individual inputs overestimated the bump fees for shared ancestries. More... | |
void | RecalculateWaste (const CAmount min_viable_change, const CAmount change_cost, const CAmount change_fee) |
Calculates and stores the waste for this result given the cost of change and the opportunity cost of spending these inputs now vs in the future. More... | |
CAmount | GetWaste () const |
void | SetAlgoCompleted (bool algo_completed) |
Tracks that algorithm was able to exhaustively search the entire combination space before hitting limit of tries. More... | |
bool | GetAlgoCompleted () const |
Get m_algo_completed. More... | |
void | SetSelectionsEvaluated (size_t attempts) |
Record the number of selections that were evaluated. More... | |
size_t | GetSelectionsEvaluated () const |
Get selections_evaluated. More... | |
void | Merge (const SelectionResult &other) |
Combines the. More... | |
const std::set< std::shared_ptr< COutput > > & | GetInputSet () const |
Get m_selected_inputs. More... | |
std::vector< std::shared_ptr< COutput > > | GetShuffledInputVector () const |
Get the vector of COutputs that will be used to fill in a CTransaction's vin. More... | |
bool | operator< (SelectionResult other) const |
CAmount | GetChange (const CAmount min_viable_change, const CAmount change_fee) const |
Get the amount for the change output after paying needed fees. More... | |
CAmount | GetTarget () const |
SelectionAlgorithm | GetAlgo () const |
int | GetWeight () const |
Private Member Functions | |
template<typename T > | |
void | InsertInputs (const T &inputs) |
Private Attributes | |
std::set< std::shared_ptr< COutput > > | m_selected_inputs |
Set of inputs selected by the algorithm to use in the transaction. More... | |
CAmount | m_target |
The target the algorithm selected for. More... | |
SelectionAlgorithm | m_algo |
The algorithm used to produce this result. More... | |
bool | m_use_effective {false} |
Whether the input values for calculations should be the effective value (true) or normal value (false) More... | |
std::optional< CAmount > | m_waste |
The computed waste. More... | |
bool | m_algo_completed {true} |
False if algorithm was cut short by hitting limit of attempts and solution is non-optimal. More... | |
size_t | m_selections_evaluated |
The count of selections that were evaluated by this coin selection attempt. More... | |
int | m_weight {0} |
Total weight of the selected inputs. More... | |
CAmount | bump_fee_group_discount {0} |
How much individual inputs overestimated the bump fees for the shared ancestry. More... | |
Definition at line 324 of file coinselection.h.
|
inlineexplicit |
Definition at line 358 of file coinselection.h.
|
delete |
void wallet::SelectionResult::AddInput | ( | const OutputGroup & | group | ) |
Definition at line 903 of file coinselection.cpp.
void wallet::SelectionResult::AddInputs | ( | const std::set< std::shared_ptr< COutput > > & | inputs, |
bool | subtract_fee_outputs | ||
) |
Definition at line 912 of file coinselection.cpp.
void wallet::SelectionResult::Clear | ( | ) |
|
inline |
bool wallet::SelectionResult::GetAlgoCompleted | ( | ) | const |
Get m_algo_completed.
Definition at line 861 of file coinselection.cpp.
CAmount wallet::SelectionResult::GetChange | ( | const CAmount | min_viable_change, |
const CAmount | change_fee | ||
) | const |
Get the amount for the change output after paying needed fees.
The change amount is not 100% precise due to discrepancies in fee calculation. The final change amount (if any) should be corrected after calculating the final tx fees. When there is a discrepancy, most of the time the final change would be slightly bigger than estimated.
Following are the possible factors of discrepancy:
[in] | min_viable_change | Minimum amount for change output, if change would be less then we forgo change |
[in] | change_fee | Fees to include change output in the tx |
Definition at line 976 of file coinselection.cpp.
const std::set< std::shared_ptr< COutput > > & wallet::SelectionResult::GetInputSet | ( | ) | const |
Get m_selected_inputs.
Definition at line 937 of file coinselection.cpp.
CAmount wallet::SelectionResult::GetSelectedEffectiveValue | ( | ) | const |
CAmount wallet::SelectionResult::GetSelectedValue | ( | ) | const |
Get the sum of the input values.
Definition at line 881 of file coinselection.cpp.
size_t wallet::SelectionResult::GetSelectionsEvaluated | ( | ) | const |
Get selections_evaluated.
Definition at line 871 of file coinselection.cpp.
std::vector< std::shared_ptr< COutput > > wallet::SelectionResult::GetShuffledInputVector | ( | ) | const |
Get the vector of COutputs that will be used to fill in a CTransaction's vin.
Definition at line 942 of file coinselection.cpp.
|
inline |
CAmount wallet::SelectionResult::GetTotalBumpFees | ( | ) | const |
Definition at line 891 of file coinselection.cpp.
CAmount wallet::SelectionResult::GetWaste | ( | ) | const |
|
inline |
|
inlineprivate |
Definition at line 347 of file coinselection.h.
void wallet::SelectionResult::Merge | ( | const SelectionResult & | other | ) |
Combines the.
[in] | other | selection result into 'this' selection result. |
Important note: There must be no shared 'COutput' among the two selection results being combined.
Definition at line 923 of file coinselection.cpp.
bool wallet::SelectionResult::operator< | ( | SelectionResult | other | ) | const |
Definition at line 949 of file coinselection.cpp.
void wallet::SelectionResult::RecalculateWaste | ( | const CAmount | min_viable_change, |
const CAmount | change_cost, | ||
const CAmount | change_fee | ||
) |
Calculates and stores 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) - bump_fee_group_discount If no change, waste = excess + inputs * (effective_feerate - long_term_feerate) - bump_fee_group_discount where excess = selected_effective_value - target change_cost = effective_feerate * change_output_size + long_term_feerate * change_spend_size
[in] | min_viable_change | The minimum amount necessary to make a change output economic |
[in] | change_cost | The cost of creating a change output and spending it in the future. Only used if there is change, in which case it must be non-negative. |
[in] | change_fee | The fee for creating a change output |
Definition at line 828 of file coinselection.cpp.
void wallet::SelectionResult::SetAlgoCompleted | ( | bool | algo_completed | ) |
Tracks that algorithm was able to exhaustively search the entire combination space before hitting limit of tries.
Definition at line 856 of file coinselection.cpp.
void wallet::SelectionResult::SetBumpFeeDiscount | ( | const CAmount | discount | ) |
How much individual inputs overestimated the bump fees for shared ancestries.
Definition at line 821 of file coinselection.cpp.
void wallet::SelectionResult::SetSelectionsEvaluated | ( | size_t | attempts | ) |
Record the number of selections that were evaluated.
Definition at line 866 of file coinselection.cpp.
|
private |
How much individual inputs overestimated the bump fees for the shared ancestry.
Definition at line 344 of file coinselection.h.
|
private |
The algorithm used to produce this result.
Definition at line 332 of file coinselection.h.
|
private |
False if algorithm was cut short by hitting limit of attempts and solution is non-optimal.
Definition at line 338 of file coinselection.h.
|
private |
Set of inputs selected by the algorithm to use in the transaction.
Definition at line 328 of file coinselection.h.
|
private |
The count of selections that were evaluated by this coin selection attempt.
Definition at line 340 of file coinselection.h.
|
private |
The target the algorithm selected for.
Equal to the recipient amount plus non-input fees
Definition at line 330 of file coinselection.h.
|
private |
Whether the input values for calculations should be the effective value (true) or normal value (false)
Definition at line 334 of file coinselection.h.
|
private |
The computed waste.
Definition at line 336 of file coinselection.h.
|
private |
Total weight of the selected inputs.
Definition at line 342 of file coinselection.h.