mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 06:58:57 +01:00
refactor coin selection for parameterizable change target
no behavior changes, since the target is always MIN_CHANGE
This commit is contained in:
@@ -94,6 +94,9 @@ struct CoinSelectionParams {
|
||||
size_t change_output_size = 0;
|
||||
/** Size of the input to spend a change output in virtual bytes. */
|
||||
size_t change_spend_size = 0;
|
||||
/** Mininmum change to target in Knapsack solver: select coins to cover the payment and
|
||||
* at least this value of change. */
|
||||
CAmount m_min_change_target{MIN_CHANGE};
|
||||
/** Cost of creating the change output. */
|
||||
CAmount m_change_fee{0};
|
||||
/** Cost of creating the change output + cost of spending the change output in the future. */
|
||||
@@ -115,11 +118,13 @@ struct CoinSelectionParams {
|
||||
* reuse. Dust outputs are not eligible to be added to output groups and thus not considered. */
|
||||
bool m_avoid_partial_spends = false;
|
||||
|
||||
CoinSelectionParams(FastRandomContext& rng_fast, size_t change_output_size, size_t change_spend_size, CFeeRate effective_feerate,
|
||||
CoinSelectionParams(FastRandomContext& rng_fast, size_t change_output_size, size_t change_spend_size,
|
||||
CAmount min_change_target, CFeeRate effective_feerate,
|
||||
CFeeRate long_term_feerate, CFeeRate discard_feerate, size_t tx_noinputs_size, bool avoid_partial)
|
||||
: rng_fast{rng_fast},
|
||||
change_output_size(change_output_size),
|
||||
change_spend_size(change_spend_size),
|
||||
m_min_change_target(min_change_target),
|
||||
m_effective_feerate(effective_feerate),
|
||||
m_long_term_feerate(long_term_feerate),
|
||||
m_discard_feerate(discard_feerate),
|
||||
@@ -267,7 +272,8 @@ std::optional<SelectionResult> SelectCoinsBnB(std::vector<OutputGroup>& utxo_poo
|
||||
std::optional<SelectionResult> SelectCoinsSRD(const std::vector<OutputGroup>& utxo_pool, CAmount target_value, FastRandomContext& rng);
|
||||
|
||||
// Original coin selection algorithm as a fallback
|
||||
std::optional<SelectionResult> KnapsackSolver(std::vector<OutputGroup>& groups, const CAmount& nTargetValue, FastRandomContext& rng);
|
||||
std::optional<SelectionResult> KnapsackSolver(std::vector<OutputGroup>& groups, const CAmount& nTargetValue,
|
||||
CAmount change_target, FastRandomContext& rng);
|
||||
} // namespace wallet
|
||||
|
||||
#endif // BITCOIN_WALLET_COINSELECTION_H
|
||||
|
||||
Reference in New Issue
Block a user