Clean up change computation in CreateTransaction.

Compute the change directly as difference between the "requested" and
the actual value returned by SelectCoins.  This removes a duplication of
the fee logic code.
This commit is contained in:
Daniel Kraft 2015-03-18 19:22:49 +01:00
parent 90c37bc16c
commit 835c12291e
1 changed files with 4 additions and 7 deletions

View File

@ -1757,9 +1757,9 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend,
nChangePosRet = -1; nChangePosRet = -1;
bool fFirst = true; bool fFirst = true;
CAmount nTotalValue = nValue; CAmount nValueToSelect = nValue;
if (nSubtractFeeFromAmount == 0) if (nSubtractFeeFromAmount == 0)
nTotalValue += nFeeRet; nValueToSelect += nFeeRet;
double dPriority = 0; double dPriority = 0;
// vouts to the payees // vouts to the payees
BOOST_FOREACH (const CRecipient& recipient, vecSend) BOOST_FOREACH (const CRecipient& recipient, vecSend)
@ -1796,7 +1796,7 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend,
// Choose coins to use // Choose coins to use
set<pair<const CWalletTx*,unsigned int> > setCoins; set<pair<const CWalletTx*,unsigned int> > setCoins;
CAmount nValueIn = 0; CAmount nValueIn = 0;
if (!SelectCoins(nTotalValue, setCoins, nValueIn, coinControl)) if (!SelectCoins(nValueToSelect, setCoins, nValueIn, coinControl))
{ {
strFailReason = _("Insufficient funds"); strFailReason = _("Insufficient funds");
return false; return false;
@ -1814,10 +1814,7 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend,
dPriority += (double)nCredit * age; dPriority += (double)nCredit * age;
} }
CAmount nChange = nValueIn - nValue; const CAmount nChange = nValueIn - nValueToSelect;
if (nSubtractFeeFromAmount == 0)
nChange -= nFeeRet;
if (nChange > 0) if (nChange > 0)
{ {
// Fill a vout to ourself // Fill a vout to ourself