Зависшая транзакция Bitcoin: как работают RBF и CPFP и когда они не помогут

Транзакция попадает в мемпул и ждёт, пока майнер включит её в блок. Если комиссия оказалась ниже текущей рыночной, ожидание может растянуться на дни или недели. В Bitcoin нет механизма принудительной отмены, но существуют два протокольных способа ускорить подтверждение: Replace-by-Fee (RBF) и Child-Pays-for-Parent (CPFP). Оба работают по-разному и имеют разные ограничения.

Почему транзакция зависает​


Мемпул — очередь неподтверждённых транзакций, которую хранит каждый узел. Майнеры выбирают транзакции по удельной комиссии (sat/vB): чем выше значение, тем раньше транзакция попадёт в блок. Если вы отправили транзакцию с комиссией 2 sat/vB, а текущий порог входа в блок — 15 sat/vB, ваша транзакция будет ждать, пока мемпул не разгрузится или пока комиссия не вырастет ещё сильнее.

Дополнительные причины задержки:

  • Мемпул перегружен. В периоды пикового спроса (рост цены, ажиотаж вокруг Ordinals/Runes) объём мемпула может превышать 200 МБ, а минимальная комиссия для попадания в блок — 50+ sat/vB.
  • Транзакция не распространяется. Если узел, через который вы отправили транзакцию, не имеет достаточного числа пиров или транзакция не соответствует правилам relay (например, нестандартный скрипт), она может не дойти до майнеров.
  • Кошелёк не поддерживает RBF. Если транзакция была создана без сигнала RBF, заменить её стандартными средствами не получится.

Подробнее о механизме комиссий и приоритете в мемпуле — в материале Комиссия в Bitcoin: как устроен механизм sat/vB, приоритет в мемпуле и почему транзакция может зависнуть.

Replace-by-Fee: замена транзакции с повышенной комиссией​


RBF позволяет заменить неподтверждённую транзакцию новой, которая тратит те же входы, но содержит более высокую комиссию. Узлы, поддерживающие BIP 125, принимают замену при соблюдении условий:

  1. Оригинальная транзакция содержит сигнал RBF (sequence number хотя бы одного входа меньше 0xFFFFFFFE).
  2. Новая транзакция включает все входы оригинальной.
  3. Абсолютная комиссия новой транзакции выше, чем у оригинальной.
  4. Новая транзакция не вводит новых неподтверждённых входов (правило может различаться в зависимости от реализации узла).

Как выполнить замену на практике​


Большинство современных кошельков (Electrum, BlueWallet, Sparrow, Trezor Suite, Ledger Live) предоставляют кнопку «Ускорить» или «Replace» для транзакций с сигналом RBF. Процесс:

  1. Откройте список транзакций и найдите зависшую.
  2. Выберите опцию замены (название зависит от кошелька: «Bump fee», «Replace-by-Fee», «Increase fee»).
  3. Укажите новую комиссию — она должна быть выше текущей рыночной. Ориентируйтесь на мемпул-эксплореры (например, mempool.space) и выбирайте значение, соответствующее желаемому времени подтверждения.
  4. Подтвердите и подпишите новую транзакцию.

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

Ограничения RBF​


  • Сигнал должен быть установлен при создании. Если кошелёк не выставил sequence number с сигналом RBF, заменить транзакцию через стандартный RBF невозможно. Некоторые кошельки (например, Electrum) позволяют включить RBF по умолчанию в настройках.
  • Не все узлы принимают RBF. Узлы с флагом mempoolfullrbf=0 (значение по умолчанию в Bitcoin Core до определённых версий) принимают замену только при наличии сигнала. Однако всё больше сервисов и майнеров включают full-RBF, при котором замена принимается независимо от сигнала.
  • Получатель может не принять замену. Если получатель уже увидел транзакцию в своём кошельке, замена может вызвать путаницу. Для платежей в адрес сервисов это обычно не проблема — они ждут подтверждения.
  • Нельзя уменьшить сумму вывода. Новая транзакция должна сохранять те же выходы или увеличивать комиссию за счёт изменения (change). Уменьшить сумму, отправленную получателю, через RBF нельзя.

Child-Pays-for-Parent: ускорение через дочернюю транзакцию​


CPFP работает иначе: вы не заменяете зависшую транзакцию, а создаёте новую, которая тратит один из её выходов. Майнер, рассматривая пакет «родитель + потомок», видит суммарную комиссию пакета и включает обе транзакции в блок, если средняя удельная комиссия пакета достаточно высока.

Формула эффективной комиссии пакета:

effective_fee_rate = (fee_parent + fee_child) / (size_parent + size_child)

Чтобы пакет был привлекательным для майнера, эффективная комиссия должна превышать текущий порог входа в блок.

Когда CPFP доступен​


  • Вы являетесь получателем зависшей транзакции и один из выходов принадлежит вашему кошельку.
  • Вы являетесь отправителем и у транзакции есть выход-сдача (change), который вы контролируете.

Расчёт комиссии для CPFP​


Определите txid зависшей транзакции и индекс выхода (vout), который принадлежит вам. Создайте новую транзакцию, которая тратит этот выход, с высокой комиссией. Размер комиссии рассчитайте так, чтобы средняя комиссия пакета покрывала целевой порог.

Пример: родительская транзакция 250 байт с комиссией 250 sat (1 sat/vB). Вы хотите, чтобы пакет подтвердился при пороге 20 sat/vB. Дочерняя транзакция — 150 байт.

Необходимая общая комиссия = 20 × (250 + 150) = 8000 sat
Комиссия дочерней транзакции = 8000 − 250 = 7750 sat
Удельная комиссия дочерней = 7750 / 150 ≈ 51.7 sat/vB

Некоторые кошельки (Electrum, Sparrow, Bitcoin Core) автоматически рассчитывают необходимую комиссию для CPFP и предоставляют соответствующую опцию.

Ограничения CPFP​


  • Нужен контролируемый выход. Если у зависшей транзакции нет выхода, который вы можете потратить (например, вы отправили всю сумму без сдачи), CPFP невозможен.
  • Размер пакета. Майнеры ограничивают глубину цепочки неподтверждённых транзакций, которые они рассматривают как пакет (обычно 25 транзакций или 101 КБ). Если зависшая транзакция уже является частью длинной цепочки, CPFP может не сработать.
  • Стоимость. Вы платите комиссию за обе транзакции. Если родительская транзакция большая, стоимость ускорения может быть существенной.

Когда ни RBF, ни CPFP не помогут​


СитуацияПочему не работаетЧто можно сделать
Транзакция без сигнала RBF и без контролируемого выходаНевозможно ни заменить, ни создать потомкаЖдать подтверждения или истечения срока хранения в мемпуле
Транзакция не распространяется по сетиУзлы не видят еёПовторно отправить через другой узел или сервис-ретранслятор
Мемпул узла отбросил транзакциюТранзакция удалена из-за низкого приоритета или истечения TTLСоздать новую транзакцию с адекватной комиссией
Кошелёк не поддерживает RBF/CPFPОграничение ПОИмпортировать ключи в кошелёк с поддержкой (Electrum, Sparrow)

Ожидание как стратегия​


Если транзакция не поддерживает RBF и у вас нет контролируемого выхода для CPFP, остаётся ждать. Узлы хранят неподтверждённые транзакции в мемпуле ограниченное время (по умолчанию в Bitcoin Core — 336 часов, то есть 14 дней). После этого транзакция удаляется из мемпула конкретного узла, но может сохраняться на других узлах. Если она так и не будет подтверждена, средства остаются на исходных адресах и доступны для повторной отправки.

Важно: удаление из мемпула не означает потерю средств. Монеты не двигались — транзакция просто не была включена в блок.

Профилактика: как избежать зависания​


  • Включайте RBF по умолчанию. В настройках кошелька активируйте опцию «Replace-by-Fee» или «Enable RBF». Это не влияет на безопасность и даёт возможность ускорить транзакцию постфактум.
  • Используйте динамическую комиссию. Современные кошельки оценивают текущее состояние мемпула и предлагают комиссию, соответствующую целевому времени подтверждения. Не устанавливайте комиссию вручную без понимания текущей ситуации.
  • Проверяйте мемпул перед отправкой. Сервисы вроде mempool.space показывают текущие пороги комиссий для подтверждения в ближайших блоках.
  • Не экономьте на комиссии при срочных платежах. Разница между 5 и 20 sat/vB для типичной транзакции — несколько десятков центов, но время ожидания может отличаться в десятки раз.

Проверка результата​


После выполнения RBF или CPFP:

  1. Найдите новую транзакцию в мемпул-эксплорере по txid.
  2. Убедитесь, что она имеет достаточную удельную комиссию относительно текущего порога.
  3. Дождитесь первого подтверждения. После него статус изменится на «confirmed» в кошельке.
  4. Если используете RBF, убедитесь, что старая транзакция исчезла из мемпула (она может отображаться как «replaced» в некоторых эксплорерах).

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

Источники​


 
Назад
Верх Низ