Don't create change at the dust limit, even if it means paying more than expected
This commit is contained in:
parent
228c319a94
commit
61718268b5
2 changed files with 4 additions and 29 deletions
|
@ -523,14 +523,11 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
|
||||||
{
|
{
|
||||||
CTxOut txout(nChange, (CScript)std::vector<unsigned char>(24, 0));
|
CTxOut txout(nChange, (CScript)std::vector<unsigned char>(24, 0));
|
||||||
if (IsDust(txout, ::dustRelayFee))
|
if (IsDust(txout, ::dustRelayFee))
|
||||||
{
|
|
||||||
if (CoinControlDialog::fSubtractFeeFromAmount) // dust-change will be raised until no dust
|
|
||||||
nChange = GetDustThreshold(txout, ::dustRelayFee);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
nPayFee += nChange;
|
nPayFee += nChange;
|
||||||
nChange = 0;
|
nChange = 0;
|
||||||
}
|
if (CoinControlDialog::fSubtractFeeFromAmount)
|
||||||
|
nBytes -= 34; // we didn't detect lack of change above
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in a new issue