|
|
@ -2633,28 +2633,6 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT |
|
|
|
|
|
|
|
|
|
|
|
CTxOut newTxOut(nChange, scriptChange); |
|
|
|
CTxOut newTxOut(nChange, scriptChange); |
|
|
|
|
|
|
|
|
|
|
|
// We do not move dust-change to fees, because the sender would end up paying more than requested.
|
|
|
|
|
|
|
|
// This would be against the purpose of the all-inclusive feature.
|
|
|
|
|
|
|
|
// So instead we raise the change and deduct from the recipient.
|
|
|
|
|
|
|
|
if (nSubtractFeeFromAmount > 0 && IsDust(newTxOut, ::dustRelayFee)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CAmount nDust = GetDustThreshold(newTxOut, ::dustRelayFee) - newTxOut.nValue; |
|
|
|
|
|
|
|
newTxOut.nValue += nDust; // raise change until no more dust
|
|
|
|
|
|
|
|
for (unsigned int i = 0; i < vecSend.size(); i++) // subtract from first recipient
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (vecSend[i].fSubtractFeeFromAmount) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
txNew.vout[i].nValue -= nDust; |
|
|
|
|
|
|
|
if (IsDust(txNew.vout[i], ::dustRelayFee)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
strFailReason = _("The transaction amount is too small to send after the fee has been deducted"); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Never create dust outputs; if we would, just
|
|
|
|
// Never create dust outputs; if we would, just
|
|
|
|
// add the dust to the fee.
|
|
|
|
// add the dust to the fee.
|
|
|
|
if (IsDust(newTxOut, ::dustRelayFee)) |
|
|
|
if (IsDust(newTxOut, ::dustRelayFee)) |
|
|
|