mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
Use SelectCoinsSRD if it has less waste
Try to find a solution with SelectCoinsSRD. If we do have one, add it to the list of solutions from which we choose the one with the least waste as the solution to use.
This commit is contained in:
parent
8bf789b4b4
commit
3633b667ff
1 changed files with 9 additions and 0 deletions
|
@ -387,6 +387,15 @@ bool AttemptSelection(const CWallet& wallet, const CAmount& nTargetValue, const
|
|||
results.emplace_back(std::make_tuple(waste, std::move(knapsack_coins), knapsack_value));
|
||||
}
|
||||
|
||||
// We include the minimum final change for SRD as we do want to avoid making really small change.
|
||||
// KnapsackSolver does not need this because it includes MIN_CHANGE internally.
|
||||
const CAmount srd_target = nTargetValue + coin_selection_params.m_change_fee + MIN_FINAL_CHANGE;
|
||||
auto srd_result = SelectCoinsSRD(positive_groups, srd_target);
|
||||
if (srd_result != std::nullopt) {
|
||||
const auto waste = GetSelectionWaste(srd_result->first, coin_selection_params.m_cost_of_change, srd_target, !coin_selection_params.m_subtract_fee_outputs);
|
||||
results.emplace_back(std::make_tuple(waste, std::move(srd_result->first), srd_result->second));
|
||||
}
|
||||
|
||||
if (results.size() == 0) {
|
||||
// No solution found
|
||||
return false;
|
||||
|
|
Loading…
Add table
Reference in a new issue