Coinselection prunes extraneous inputs from ApproximateBestSubset
A further pass over the available inputs has been added to ApproximateBestSubset after a candidate set has been found. It will prune any extraneous inputs in the selected subset, in order to decrease the number of input and the resulting change.
This commit is contained in:
parent
075faaebf2
commit
5c03483e26
1 changed files with 13 additions and 0 deletions
|
@ -1620,6 +1620,19 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns
|
|||
if (nTotal >= nTargetValue)
|
||||
{
|
||||
fReachedTarget = true;
|
||||
|
||||
for (unsigned int i = 0; i < vValue.size(); i++)
|
||||
{
|
||||
//The target has been reached, but the candidate set may contain extraneous inputs.
|
||||
//This iterates over all inputs and deducts any that are included, but smaller
|
||||
//than the amount nTargetValue is still exceeded by.
|
||||
if (vfIncluded[i] && (nTotal - vValue[i].first) >= nTargetValue )
|
||||
{
|
||||
vfIncluded[i] = false;
|
||||
nTotal -= vValue[i].first;
|
||||
}
|
||||
}
|
||||
|
||||
if (nTotal < nBest)
|
||||
{
|
||||
nBest = nTotal;
|
||||
|
|
Loading…
Reference in a new issue