|
|
@ -2270,12 +2270,12 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
|
|
|
|
std::vector<COutput> vCoins(vAvailableCoins);
|
|
|
|
std::vector<COutput> vCoins(vAvailableCoins);
|
|
|
|
CAmount value_to_select = nTargetValue;
|
|
|
|
CAmount value_to_select = nTargetValue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Default to bnb was not used. If we use it, we set it later
|
|
|
|
|
|
|
|
bnb_used = false;
|
|
|
|
|
|
|
|
|
|
|
|
// coin control -> return all selected outputs (we want all selected to go into the transaction for sure)
|
|
|
|
// coin control -> return all selected outputs (we want all selected to go into the transaction for sure)
|
|
|
|
if (coin_control.HasSelected() && !coin_control.fAllowOtherInputs)
|
|
|
|
if (coin_control.HasSelected() && !coin_control.fAllowOtherInputs)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// We didn't use BnB here, so set it to false.
|
|
|
|
|
|
|
|
bnb_used = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (const COutput& out : vCoins)
|
|
|
|
for (const COutput& out : vCoins)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!out.fSpendable)
|
|
|
|
if (!out.fSpendable)
|
|
|
@ -2300,14 +2300,12 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
|
|
|
|
const CWalletTx& wtx = it->second;
|
|
|
|
const CWalletTx& wtx = it->second;
|
|
|
|
// Clearly invalid input, fail
|
|
|
|
// Clearly invalid input, fail
|
|
|
|
if (wtx.tx->vout.size() <= outpoint.n) {
|
|
|
|
if (wtx.tx->vout.size() <= outpoint.n) {
|
|
|
|
bnb_used = false;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Just to calculate the marginal byte size
|
|
|
|
// Just to calculate the marginal byte size
|
|
|
|
CInputCoin coin(wtx.tx, outpoint.n, wtx.GetSpendSize(outpoint.n, false));
|
|
|
|
CInputCoin coin(wtx.tx, outpoint.n, wtx.GetSpendSize(outpoint.n, false));
|
|
|
|
nValueFromPresetInputs += coin.txout.nValue;
|
|
|
|
nValueFromPresetInputs += coin.txout.nValue;
|
|
|
|
if (coin.m_input_bytes <= 0) {
|
|
|
|
if (coin.m_input_bytes <= 0) {
|
|
|
|
bnb_used = false;
|
|
|
|
|
|
|
|
return false; // Not solvable, can't estimate size for fee
|
|
|
|
return false; // Not solvable, can't estimate size for fee
|
|
|
|
}
|
|
|
|
}
|
|
|
|
coin.effective_value = coin.txout.nValue - coin_selection_params.effective_fee.GetFee(coin.m_input_bytes);
|
|
|
|
coin.effective_value = coin.txout.nValue - coin_selection_params.effective_fee.GetFee(coin.m_input_bytes);
|
|
|
@ -2318,7 +2316,6 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
|
|
|
|
}
|
|
|
|
}
|
|
|
|
setPresetCoins.insert(coin);
|
|
|
|
setPresetCoins.insert(coin);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
bnb_used = false;
|
|
|
|
|
|
|
|
return false; // TODO: Allow non-wallet inputs
|
|
|
|
return false; // TODO: Allow non-wallet inputs
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2678,7 +2675,7 @@ bool CWallet::CreateTransaction(interfaces::Chain::Lock& locked_chain, const std
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Choose coins to use
|
|
|
|
// Choose coins to use
|
|
|
|
bool bnb_used;
|
|
|
|
bool bnb_used = false;
|
|
|
|
if (pick_new_inputs) {
|
|
|
|
if (pick_new_inputs) {
|
|
|
|
nValueIn = 0;
|
|
|
|
nValueIn = 0;
|
|
|
|
setCoins.clear();
|
|
|
|
setCoins.clear();
|
|
|
|