mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-09-07 14:01:27 +02:00
wallet: APS, don't create empty groups
By moving the "positive-only" flag out of the lambda function.
This commit is contained in:
@@ -444,10 +444,9 @@ FilteredOutputGroups GroupOutputs(const CWallet& wallet,
|
|||||||
// to the last OutputGroup in the vector for the scriptPubKey. When the last OutputGroup has
|
// to the last OutputGroup in the vector for the scriptPubKey. When the last OutputGroup has
|
||||||
// OUTPUT_GROUP_MAX_ENTRIES COutputs, a new OutputGroup is added to the end of the vector.
|
// OUTPUT_GROUP_MAX_ENTRIES COutputs, a new OutputGroup is added to the end of the vector.
|
||||||
typedef std::map<std::pair<CScript, OutputType>, std::vector<OutputGroup>> ScriptPubKeyToOutgroup;
|
typedef std::map<std::pair<CScript, OutputType>, std::vector<OutputGroup>> ScriptPubKeyToOutgroup;
|
||||||
const auto& group_outputs = [](
|
const auto& insert_output = [&](
|
||||||
const std::shared_ptr<COutput>& output, OutputType type, size_t ancestors, size_t descendants,
|
const std::shared_ptr<COutput>& output, OutputType type, size_t ancestors, size_t descendants,
|
||||||
ScriptPubKeyToOutgroup& groups_map, const CoinSelectionParams& coin_sel_params,
|
ScriptPubKeyToOutgroup& groups_map) {
|
||||||
bool positive_only) {
|
|
||||||
std::vector<OutputGroup>& groups = groups_map[std::make_pair(output->txout.scriptPubKey,type)];
|
std::vector<OutputGroup>& groups = groups_map[std::make_pair(output->txout.scriptPubKey,type)];
|
||||||
|
|
||||||
if (groups.size() == 0) {
|
if (groups.size() == 0) {
|
||||||
@@ -467,10 +466,7 @@ FilteredOutputGroups GroupOutputs(const CWallet& wallet,
|
|||||||
group = &groups.back();
|
group = &groups.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter for positive only before adding the output to group
|
group->Insert(output, ancestors, descendants);
|
||||||
if (!positive_only || output->GetEffectiveValue() > 0) {
|
|
||||||
group->Insert(output, ancestors, descendants);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ScriptPubKeyToOutgroup spk_to_groups_map;
|
ScriptPubKeyToOutgroup spk_to_groups_map;
|
||||||
@@ -484,9 +480,13 @@ FilteredOutputGroups GroupOutputs(const CWallet& wallet,
|
|||||||
wallet.chain().getTransactionAncestry(output.outpoint.hash, ancestors, descendants);
|
wallet.chain().getTransactionAncestry(output.outpoint.hash, ancestors, descendants);
|
||||||
|
|
||||||
const auto& shared_output = std::make_shared<COutput>(output);
|
const auto& shared_output = std::make_shared<COutput>(output);
|
||||||
group_outputs(shared_output, type, ancestors, descendants, spk_to_groups_map, coin_sel_params, /*positive_only=*/ false);
|
// Filter for positive only before adding the output
|
||||||
group_outputs(shared_output, type, ancestors, descendants, spk_to_positive_groups_map,
|
if (output.GetEffectiveValue() > 0) {
|
||||||
coin_sel_params, /*positive_only=*/ true);
|
insert_output(shared_output, type, ancestors, descendants, spk_to_positive_groups_map);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'All' groups
|
||||||
|
insert_output(shared_output, type, ancestors, descendants, spk_to_groups_map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user