Является ли пластичность транзакций проблемой при получении платежей?

Предположим, я использую оригинальный клиент для получения платежей. Возможен ли следующий сценарий?

Мой кошелек получает уведомление о неподтвержденной транзакции с идентификатором 12, в котором одним из выходов является адрес, принадлежащий мне.

Кто-то изменяет идентификатор транзакции на 13 и передает его майнеру, который находит следующий блок.

Мой кошелек получает уведомление о блоке, содержащем транзакцию с идентификатором 13, в которой одним из выходов является адрес, принадлежащий мне.

Транзакция с идентификатором 13 получает 6 подтверждений, но транзакция с 12 застревает в моем кошельке как неподтвержденная транзакция.

Если я покажу своим клиентам их неподтвержденные транзакции, то клиент увидит подтвержденную транзакцию с идентификатором 13 и неподтвержденную транзакцию с идентификатором 12. Это правильно? Или QT автоматически удалит первую транзакцию?

Что я могу сделать, чтобы предотвратить это?

Я думаю, что ваш Bitcoin-Qt откажется от своего знания о t12 , как только t13 будет подтвержден, поскольку они удваивают друг друга.
Спасибо. Можете ли вы указать мне определенную часть исходного кода, где я могу проверить, чтобы убедиться?
@AntonAnsgar Вот где происходит удаление устаревших транзакций. здесьremoveConflicts проверяет пул памяти на конфликтующие входные данные .
@JacobTorba Можете ли вы написать ответ, чтобы я мог отметить его как действительный? Спасибо.
@AntonAnsgar, ты понял.

Ответы (2)

Если вы ждете подтвержденную транзакцию, все будет в порядке. Распространенная ошибка людей/крупных бирж заключается в том, что они создают транзакции «снятия» из неподтвержденных транзакций «депозита». Они быстро становятся недействительными из-за правил двойной траты. Клиент Satoshi делает это в крайнем случае при выборе неизрасходованных выходов.

Код, который имеет дело с этим, находится здесь , removeConflictsопределен здесь .

У меня есть транзакции, которые застряли в моем кошельке. Я имею в виду, что у меня есть два передатчика с одинаковыми входами и выходами. Один из них подтвержден. Другой ждет без подтверждения. У меня есть несколько TX, которые просто застряли вот так. Любая идея, почему они могли быть созданы? Эти транзакции в основном являются полученными транзакциями. Существует также одна отправляющая транзакция, в которой у меня одни и те же входы и выходы, но разные идентификаторы TX для 3 транзакций. Опять один из них подтверждается. Два других просто застряли. Мне действительно нужна помощь с этим. Большое спасибо.
Этот метод удаляет конфликтующие транзакции из пула памяти, а не из кошелька.
@PieterWullie Спасибо. Я не знаю, что на самом деле делает пул памяти, я посмотрю. Но значит ли это, что они в кошельке навсегда? Как я могу избавиться от них? И как вы думаете, это то, что происходит с ситуацией, которую я описал в этом вопросе: bitcoin.stackexchange.com/questions/22663/…
Я только что понял из ответа Питера на вопрос: bitcoin.stackexchange.com/questions/22663/… , что существующий код removeConflicts не решает эту проблему.

Неподтвержденная транзакция не может быть потрачена. Конец истории на самом деле.

Но для полноты картины, если вы попытаетесь потратить его, ваша транзакция также останется неподтвержденной с человеком, которому вы заплатили. Ни одна из этих транзакций никогда не войдет в блокчейн.

Вопрос не в том, можно ли их потратить. Вопрос в том, возможна ли описанная в вопросе ситуация
Нет, это невозможно.
Действительно? Как? Знаете ли вы, какая часть исходного кода удалит первую транзакцию?
Я только что узнал, что это действительно возможно. См.: bitcoin.stackexchange.com/questions/22663/…