Browse Source

Added a test for the pruning of extraneous inputs after ApproximateBestSet

0.13
Murch 9 years ago
parent
commit
fc0f52d780
  1. 18
      src/wallet/test/wallet_tests.cpp
  2. 14
      src/wallet/wallet.cpp

18
src/wallet/test/wallet_tests.cpp

@ -328,4 +328,22 @@ BOOST_AUTO_TEST_CASE(coin_selection_tests) @@ -328,4 +328,22 @@ BOOST_AUTO_TEST_CASE(coin_selection_tests)
empty_wallet();
}
BOOST_AUTO_TEST_CASE(pruning_in_ApproximateBestSet)
{
CoinSet setCoinsRet;
CAmount nValueRet;
LOCK(wallet.cs_wallet);
empty_wallet();
for (int i = 0; i < 12; i++)
{
add_coin(10*CENT);
}
add_coin(100*CENT);
add_coin(100*CENT);
BOOST_CHECK(wallet.SelectCoinsMinConf(221*CENT, 1, 6, vCoins, setCoinsRet, nValueRet));
BOOST_CHECK_EQUAL(nValueRet, 230*CENT);
}
BOOST_AUTO_TEST_SUITE_END()

14
src/wallet/wallet.cpp

@ -1605,7 +1605,7 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns @@ -1605,7 +1605,7 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns
bool fReachedTarget = false;
for (int nPass = 0; nPass < 2 && !fReachedTarget; nPass++)
{
for (unsigned int i = 0; i < vValue.size() && !fReachedTarget; i++)
for (unsigned int i = 0; i < vValue.size(); i++)
{
//The solver here uses a randomized algorithm,
//the randomness serves no real security purpose but is just
@ -1625,6 +1625,8 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns @@ -1625,6 +1625,8 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns
nBest = nTotal;
vfBest = vfIncluded;
}
nTotal -= vValue[i].first;
vfIncluded[i] = false;
}
}
}
@ -1634,11 +1636,11 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns @@ -1634,11 +1636,11 @@ static void ApproximateBestSubset(vector<pair<CAmount, pair<const CWalletTx*,uns
//Reduces the approximate best subset by removing any inputs that are smaller than the surplus of nTotal beyond nTargetValue.
for (unsigned int i = 0; i < vValue.size(); i++)
{
if (vfBest[i] && (nBest - vValue[i].first) >= nTargetValue )
{
vfBest[i] = false;
nBest -= vValue[i].first;
}
if (vfBest[i] && (nBest - vValue[i].first) >= nTargetValue )
{
vfBest[i] = false;
nBest -= vValue[i].first;
}
}
}

Loading…
Cancel
Save