Выбор монет Bitcoin Core оптимизируется для получения минимальной сдачи. Как Bitcoin Core предотвращает появление выходных данных Change размером ниже порога пыли?
Смотрите эти строки :
// 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 && newTxOut.IsDust(::minRelayTxFee))
{
CAmount nDust = newTxOut.GetDustThreshold(::minRelayTxFee) - 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 (txNew.vout[i].IsDust(::minRelayTxFee))
{
strFailReason = _("The transaction amount is too small to send after the fee has been deducted");
return false;
}
break;
}
}
}
Таким образом, биткойн-ядро даст получателю немного меньше, чем потратит больше, чем изначально запросил плательщик, в случае вывода сдачи пыли.
Bitcoin Core фактически создает минимальное изменение 0.01 BTC
(если у него достаточно средств), если он не может произвести прямое совпадение.
В тех редких случаях, когда у него нет достаточных средств для производства изменений без пыли, он будет делать странные вещи, о которых упоминает Стивен.
Марч