aboutsummaryrefslogtreecommitdiff
path: root/src/wallet
diff options
context:
space:
mode:
authorAlSzacrel <alszacrel@web.de>2014-09-13 02:09:18 +0200
committerMurch <alszacrel@web.de>2015-12-06 23:26:45 +0100
commit5c03483e26ab414d22ef192691b2336c1bb3cb02 (patch)
tree9973d4590bb5a20b4c016918cc284a48ea675882 /src/wallet
parent075faaebf2e534265ff8aca015eaf03a8a156f32 (diff)
downloadbitcoin-5c03483e26ab414d22ef192691b2336c1bb3cb02.tar.xz
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.
Diffstat (limited to 'src/wallet')
-rw-r--r--src/wallet/wallet.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index d23d54e678..06b77bb9b9 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -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;