|
|
|
@ -2774,10 +2774,6 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
|
|
|
|
|
// selected to meet nFeeNeeded result in a transaction that
|
|
|
|
|
// requires less fee than the prior iteration.
|
|
|
|
|
|
|
|
|
|
// TODO: The case where nSubtractFeeFromAmount > 0 remains
|
|
|
|
|
// to be addressed because it requires returning the fee to
|
|
|
|
|
// the payees and not the change output.
|
|
|
|
|
|
|
|
|
|
// If we have no change and a big enough excess fee, then
|
|
|
|
|
// try to construct transaction again only without picking
|
|
|
|
|
// new inputs. We now know we only need the smaller fee
|
|
|
|
@ -2804,6 +2800,8 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
|
|
|
|
|
else if (!pick_new_inputs) {
|
|
|
|
|
// This shouldn't happen, we should have had enough excess
|
|
|
|
|
// fee to pay for the new output and still meet nFeeNeeded
|
|
|
|
|
// Or we should have just subtracted fee from recipients and
|
|
|
|
|
// nFeeNeeded should not have changed
|
|
|
|
|
strFailReason = _("Transaction fee and change calculation failed");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@ -2820,6 +2818,12 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If subtracting fee from recipients, we now know what fee we
|
|
|
|
|
// need to subtract, we have no reason to reselect inputs
|
|
|
|
|
if (nSubtractFeeFromAmount > 0) {
|
|
|
|
|
pick_new_inputs = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Include more fee and try again.
|
|
|
|
|
nFeeRet = nFeeNeeded;
|
|
|
|
|
continue;
|
|
|
|
|