Может ли неподтвержденная транзакция с низкой комиссией помешать подтверждению следующих транзакций?

Чтобы быть более точным, рассмотрим следующую ситуацию:

  1. Адрес A получает ввод 4 BTC.
  2. Вы пытаетесь совершить транзакцию из пункта А в пункт Б с 1 BTC и очень низкой комиссией, что означает, что она долгое время не подтверждалась. Выход транзакции — B и A (чтобы учесть изменение ~ 3 BTC после комиссий)
  3. Прежде чем дождаться подтверждения предыдущей транзакции, вы снова отправляете из точки А в точку Б, на этот раз вы отправляете 2 BTC с более высокой комиссией, надеясь, что она будет подтверждена быстро.

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

В этом примере я использовал суммы, чтобы убедиться, что биткойнов «достаточно» для каждой транзакции отдельно (поскольку, если у вас есть 1 BTC, и вы пытаетесь отправить его дважды, интуитивно понятно, почему это не должно работать).

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

Ответы (1)

Да, если вторая транзакция тратит вывод первой, то №2 не может быть подтверждена до тех пор, пока не будет подтверждена №1. (Хотя они могут быть подтверждены в одном блоке, если № 1 появляется перед № 2 в этом блоке, и в этом случае подтверждения фактически одновременны.)

Большинство майнеров будут рассматривать транзакции по принципу «ребенок платит за родителя», так что низкая комиссия для № 1 может быть компенсирована высокой комиссией для № 2. Две транзакции будут рассматриваться как одна «единица» с их совокупной комиссией, и майнер подтвердит их, если объединенная сумма платит более высокую комиссию, чем следующая самая прибыльная транзакция (или часть), которая может заполнить это пространство.

Два дополнительных уточнения: (1) означает ли это, что вы можете эффективно заблокировать использование кошелька, поскольку у вас была всего одна глупая транзакция с низкой комиссией, и все ваши биткойны поступили с помощью одного входа на один адрес? (2) Какое это имеет значение, если в моем примере 2 транзакции плавают в мемпуле, и вы можете сначала подтвердить любую из них, даже не зная о первой. Проверяют ли майнеры каждую транзакцию, которую они подтверждают, по сравнению с любой другой транзакцией в пуле?
@AhiaCohen (1) Это не навсегда «заблокировано». Даже если № 1 никогда не будет подтвержден, вы все равно можете создать другую транзакцию № 1a, которая потратит ваши первоначальные 4 BTC, отправив их либо на адрес B, либо куда угодно. Это двойная трата, и другим узлам в сети вы можете не очень понравиться, если вы отправите его, пока у них все еще есть #1 в их мемпуле (я думаю, Bitcoin Core отключится от вас и забанит ваш IP на некоторое время) , но это не запрещено протоколом, и в конечном итоге №1а может быть подтвержден вместо №1.
@AhiaCohen: (2) Вы не можете подтвердить № 2 до (или без) № 1, вот что я говорю. Это правило протокола, что транзакция в блоке может ссылаться только на входы, которые уже существуют как выходы предыдущих транзакций. Любой блок, содержащий #2, если #1 еще не находится в предыдущем блоке в цепочке (или ранее в том же блоке), является недопустимым блоком и будет отклонен сетью. Майнеры делают и должны это проверять.
О (2), но, поскольку № 1 еще не подтвержден, его нет в блокчейне. И в качестве ввода № 2 может взять исходный ввод в кошелек из 4 BTC, нет (поскольку № 1 не подтвержден, на адресе A все еще есть UTXO из 4 BTC).
@AhiaCohen: Понятно. Да, это ситуация, которую я описал в своем ответе на (1); в этом случае ваш № 2 — это то, что я назвал № 1а. У него есть все обычные проблемы двойной траты. Программное обеспечение кошелька обычно не делает этого по умолчанию; они предпочтут потратить вывод «change» из #1, так как они предполагают, что вы действительно хотите, чтобы #1 подтвердил, если это возможно.
Спасибо, это немного проясняет. Только один заключительный момент: может ли кошелек выбрать в качестве входных данных для № 2 вывод № 1, даже если он не подтвержден? Я предположил, что на выходе он может принимать только те вещи, которые уже зарегистрированы в блокчейне, но если нет, то мне, вероятно, следует злиться на свой кошелек за то, что он вызвал этот беспорядок.
@AhiaCohen: Да, может, и кошельки часто так делают. Это основано на распространенном случае, когда #1 подтвердит довольно скоро, и пользователь может не захотеть ждать, прежде чем создавать больше транзакций. Если комиссии достаточны, а места в блоке достаточно (как это было при разработке большинства современных кошельков), то было бы неплохо иметь возможность ставить в очередь несколько транзакций, и все они могли бы быть подтверждены вместе в следующем блоке. .