Что происходит, когда разветвленная цепочка становится длиннее основной цепочки блоков?
Предположим, что в разветвленной цепочке, которая только что стала длиннее, нет транзакций, так что все транзакции в последних n блоках никогда не происходили.
Насколько я понимаю, официальный биткойн-клиент распознает, что любые недавние отправленные им транзакции больше не существуют, и повторно транслирует их. По вопросу,
Редактировать: поскольку я больше не могу найти, где я впервые увидел это, я думаю, мне также следует спросить: действительно ли официальный клиент перевыпускает транзакции в случае разветвления цепочки блоков?
Транзакции, которые вы отправили, будут повторно отправляться навсегда (каждые 30 минут или около того), даже если у них нет шансов попасть в цепочку, потому что они теперь недействительны. Отправляются одни и те же транзакции — новые не создаются.
В случае реорганизации транзакции, которые были «потеряны» в предыдущей более длинной цепочке, перемещаются обратно в пул памяти при условии, что они допустимы в новой цепочке. Это означает, что если входы больше не существуют в новой цепочке, они теряются. Именно так работает «атака двойного расходования»: попробуйте разветвить цепочку и потратить монеты в обеих ветвях.
Эффект от перемещения транзакций обратно в пул памяти заключается только в том, что клиент их не забывает (он не будет повторно анонсировать или скачивать их с пиров, когда о них сообщат), а если нода является майнером, то они будут кандидатами на включение в следующем созданном блоке.
В целом это означает отсутствие ретрансляций: майнеры и остальная часть сети изо всех сил стараются не забывать об этих потерянных транзакциях. Однако, если это не удается, и по какой-либо причине (например, из-за слишком маленькой комиссии) транзакция не сохраняется, ответственность за это ложится на узел, который первоначально отправил транзакцию для ретрансляции. Так что да, повторные передачи тоже есть, но только от первоначального владельца и только тогда, когда он обнаруживает, что транзакция отсутствует или больше не находится в цепочке блоков.
Это всегда побайтовая идентичная транзакция, а не эквивалент с использованием разных входных данных.
Крис Мур
Питер Уилле