Я думаю, что происходит это значение настолько велико, что он может достичь приоритета, необходимого для свободной сделки в одном блоке, и из-за ошибки, что происходит несколько раз, как создается блок.
CTransaction :: AllowFree возвращает истину, если dPriority > МОНЕТЫ * 144/250 и dPriority рассчитывается как nValueIn * nConf / nTxSize.
Так 500BTC * 1conf / 225bytes = 2,2 > 144/250 = 0,576; обратите внимание, как вы могли бы потянуть, таким образом, каскадер только с 95.616BTC использования минимально возможного размера (безопасно) транзакций
166bytes.Проблема заключается в том, как количество подтверждений рассчитывается следующим образом: в CreateNewBlock () мы имеем:
ИНТ nConf = pindexPrev->nHeight - coins.nHeight + 1;
Теперь монеты происходит от view.GetCoins (txin.prevout.hash, монеты). Вещь вид монеты обновляется по мере операции добавляются в блок - см viewTemp.Flush (); позже в функции - это означает, что выглядит как сделка уже имеет одно подтверждение, даже если это "подтверждение" исходит от блока создается прямо сейчас!
Самым простым решением было бы изменить Расчет nConf удалить + 1:
INT nConf = тах (0, pindexPrev->nHeight - coins.nHeight);
...но это собирается испытывать потребность.