Skip to content

Commit 081bf54

Browse files
committed
Test that BnB is not used when there are preset inputs
1 parent 6ef9982 commit 081bf54

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

src/wallet/test/coinselector_tests.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "wallet/wallet.h"
66
#include "wallet/coinselection.h"
7+
#include "wallet/coincontrol.h"
78
#include "amount.h"
89
#include "primitives/transaction.h"
910
#include "random.h"
@@ -27,7 +28,7 @@ std::vector<std::unique_ptr<CWalletTx>> wtxn;
2728
typedef std::set<CInputCoin> CoinSet;
2829

2930
static std::vector<COutput> vCoins;
30-
static const CWallet testWallet("dummy", CWalletDBWrapper::CreateDummy());
31+
static CWallet testWallet("dummy", CWalletDBWrapper::CreateDummy());
3132
static CAmount balance = 0;
3233

3334
CoinEligibilityFilter filter_standard(1, 6, 0);
@@ -72,6 +73,7 @@ static void add_coin(const CAmount& nValue, int nAge = 6*24, bool fIsFromMe = fa
7273
}
7374
COutput output(wtx.get(), nInput, nAge, true /* spendable */, true /* solvable */, true /* safe */);
7475
vCoins.push_back(output);
76+
testWallet.AddToWallet(*wtx.get());
7577
wtxn.emplace_back(std::move(wtx));
7678
}
7779

@@ -222,6 +224,18 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
222224
add_coin(1);
223225
vCoins.at(0).nInputBytes = 40; // Make sure that it has a negative effective value. The next check should assert if this somehow got through. Otherwise it will fail
224226
BOOST_CHECK(!testWallet.SelectCoinsMinConf( 1 * CENT, filter_standard, vCoins, setCoinsRet, nValueRet, coin_selection_params_bnb, bnb_used));
227+
228+
// Make sure that we aren't using BnB when there are preset inputs
229+
empty_wallet();
230+
add_coin(5 * CENT);
231+
add_coin(3 * CENT);
232+
add_coin(2 * CENT);
233+
CCoinControl coin_control;
234+
coin_control.fAllowOtherInputs = true;
235+
coin_control.Select(COutPoint(vCoins.at(0).tx->GetHash(), vCoins.at(0).i));
236+
BOOST_CHECK(testWallet.SelectCoins(vCoins, 10 * CENT, setCoinsRet, nValueRet, coin_control, coin_selection_params_bnb, bnb_used));
237+
BOOST_CHECK(!bnb_used);
238+
BOOST_CHECK(!coin_selection_params_bnb.use_bnb);
225239
}
226240

227241
BOOST_AUTO_TEST_CASE(knapsack_solver_test)

src/wallet/wallet.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -667,15 +667,6 @@ class CWallet final : public CCryptoKeyStore, public CValidationInterface
667667
std::mutex mutexScanning;
668668
friend class WalletRescanReserver;
669669

670-
671-
/**
672-
* Select a set of coins such that nValueRet >= nTargetValue and at least
673-
* all coins from coinControl are selected; Never select unconfirmed coins
674-
* if they are not ours
675-
*/
676-
bool SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAmount& nTargetValue, std::set<CInputCoin>& setCoinsRet, CAmount& nValueRet,
677-
const CCoinControl& coin_control, CoinSelectionParams& coin_selection_params, bool& bnb_used) const;
678-
679670
CWalletDB *pwalletdbEncryption;
680671

681672
//! the current wallet version: clients below this version are not able to load the wallet
@@ -768,6 +759,14 @@ class CWallet final : public CCryptoKeyStore, public CValidationInterface
768759
return *dbw;
769760
}
770761

762+
/**
763+
* Select a set of coins such that nValueRet >= nTargetValue and at least
764+
* all coins from coinControl are selected; Never select unconfirmed coins
765+
* if they are not ours
766+
*/
767+
bool SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAmount& nTargetValue, std::set<CInputCoin>& setCoinsRet, CAmount& nValueRet,
768+
const CCoinControl& coin_control, CoinSelectionParams& coin_selection_params, bool& bnb_used) const;
769+
771770
/** Get a name for this wallet for logging/debugging purposes.
772771
*/
773772
const std::string& GetName() const { return m_name; }

0 commit comments

Comments
 (0)