Предположим, я использую оригинальный клиент для получения платежей. Возможен ли следующий сценарий?
Мой кошелек получает уведомление о неподтвержденной транзакции с идентификатором 12, в котором одним из выходов является адрес, принадлежащий мне.
Кто-то изменяет идентификатор транзакции на 13 и передает его майнеру, который находит следующий блок.
Мой кошелек получает уведомление о блоке, содержащем транзакцию с идентификатором 13, в которой одним из выходов является адрес, принадлежащий мне.
Транзакция с идентификатором 13 получает 6 подтверждений, но транзакция с 12 застревает в моем кошельке как неподтвержденная транзакция.
Если я покажу своим клиентам их неподтвержденные транзакции, то клиент увидит подтвержденную транзакцию с идентификатором 13 и неподтвержденную транзакцию с идентификатором 12. Это правильно? Или QT автоматически удалит первую транзакцию?
Что я могу сделать, чтобы предотвратить это?
Если вы ждете подтвержденную транзакцию, все будет в порядке. Распространенная ошибка людей/крупных бирж заключается в том, что они создают транзакции «снятия» из неподтвержденных транзакций «депозита». Они быстро становятся недействительными из-за правил двойной траты. Клиент Satoshi делает это в крайнем случае при выборе неизрасходованных выходов.
Код, который имеет дело с этим, находится здесь , removeConflicts
определен здесь .
Неподтвержденная транзакция не может быть потрачена. Конец истории на самом деле.
Но для полноты картины, если вы попытаетесь потратить его, ваша транзакция также останется неподтвержденной с человеком, которому вы заплатили. Ни одна из этих транзакций никогда не войдет в блокчейн.
Марч
Эмре Кенчи
Джон Т
removeConflicts
проверяет пул памяти на конфликтующие входные данные .Эмре Кенчи
Джон Т