mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-21 14:34:49 +01:00
Merge bitcoin/bitcoin#26668: wallet: if only have one output type, don't perform "mixed" coin selection
89c1491d35
wallet: if only have one output type, don't perform "mixed" coin selection (furszy) Pull request description: For wallets that only have one output type, we are currently performing the same selection process over the same coins twice. The "mixed coin selection" doesn't add any value to the result (there is nothing to mix if the available coins struct has only one type). ACKs for top commit: achow101: ACK89c1491d35
john-moffett: ACK89c1491d35
kristapsk: cr utACK89c1491d35
Tree-SHA512: 672eaeed3ba911d13fa61a46f719c8fe1ebe4d2dc7d723040e71937c693659411bc99cdbd9f0014e836b70eebeff1b8ca861f4d81d39e6f79f437364a526edbe
This commit is contained in:
commit
ba47a4ba97
2 changed files with 5 additions and 2 deletions
|
@ -525,8 +525,9 @@ std::optional<SelectionResult> AttemptSelection(const CWallet& wallet, const CAm
|
|||
if (results.size() > 0) return *std::min_element(results.begin(), results.end());
|
||||
|
||||
// If we can't fund the transaction from any individual OutputType, run coin selection one last time
|
||||
// over all available coins, which would allow mixing
|
||||
if (allow_mixed_output_types) {
|
||||
// over all available coins, which would allow mixing.
|
||||
// If TypesCount() <= 1, there is nothing to mix.
|
||||
if (allow_mixed_output_types && available_coins.TypesCount() > 1) {
|
||||
if (auto result{ChooseSelectionResult(wallet, nTargetValue, eligibility_filter, available_coins.All(), coin_selection_params)}) {
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -46,6 +46,8 @@ struct CoinsResult {
|
|||
/** The following methods are provided so that CoinsResult can mimic a vector,
|
||||
* i.e., methods can work with individual OutputType vectors or on the entire object */
|
||||
size_t Size() const;
|
||||
/** Return how many different output types this struct stores */
|
||||
size_t TypesCount() const { return coins.size(); }
|
||||
void Clear();
|
||||
void Erase(const std::unordered_set<COutPoint, SaltedOutpointHasher>& coins_to_remove);
|
||||
void Shuffle(FastRandomContext& rng_fast);
|
||||
|
|
Loading…
Add table
Reference in a new issue