Блокчейн/Уровень II · Механика/2.2 Транзакции/Урок 6
Replace-by-fee и child-pays-for-parent
Повышение комиссии и атака пиннинга
МатериалыОбозреватель блоков, показывающий предков транзакций (например, mempool.space)Кошелёк с поддержкой повышения комиссии (fee bumping)
Любопытство
- Что может сделать отправитель, если транзакция застряла из-за слишком низкой комиссии?
- Как получатель может заплатить за платёж, который он ещё не получил?
- Что происходит, когда контрагент намеренно держит ваши средства в мемпуле в заложниках?
Исследование
- Транзакция, отправленная со слишком низкой ставкой комиссии, может днями оставаться неподтверждённой или вовсе выпасть из мемпулов, пока вокруг неё подтверждаются транзакции с более высокой оплатой. Есть два способа поднять фактическую комиссию после отправки: отправитель может заменить транзакцию версией с более высокой оплатой, или получатель может потратить один из её выходов с щедрой комиссией, чтобы майнеры забрали обе транзакции вместе.
- Replace-by-Fee (RBF) позволяет отправителю исправить заниженную комиссию. BIP125 ввёл сигнализацию о возможности замены через поле nSequence во входах. По правилам замены Bitcoin Core замещающая транзакция должна заплатить как минимум общую сумму комиссий всех вытесняемых транзакций плюс дополнительную комиссию за ретрансляцию собственного размера, а также иметь более высокую ставку комиссии, чем транзакции, с которыми она напрямую конфликтует. В Bitcoin Core версии 24 появилась поддержка «full RBF», при которой транзакции считаются заменяемыми даже без явной сигнализации; в версии 28 это стало поведением по умолчанию.
- Child-Pays-For-Parent (CPFP) выручает получателей, которые не могут изменить входящий платёж. Получатель создаёт новую транзакцию, тратящую неподтверждённый выход застрявшей родительской транзакции, и назначает этой дочерней транзакции высокую комиссию. Майнеры оценивают пакет целиком по ставке комиссии с учётом предков (ancestor fee rate); включение дочерней транзакции вынуждает включить и родительскую, поскольку дочерняя валидна, только если родительская подтверждена в том же блоке или раньше.
- Экономическая логика опирается на совокупную ценность. Если родительская транзакция платит 1 sat/vB, а крупная дочерняя — 50 sat/vB, то пакет целиком становится для майнеров выгодной возможностью подтвердить обе одновременно. Так получатель фактически доплачивает майнеру за включение своего застрявшего входящего платежа, хотя ещё не контролирует подтверждённые монеты; для этого нужен точный расчёт общего веса и комиссий.
- Пиннинг транзакций (transaction pinning) — критическая уязвимость этой системы. Контрагент может намеренно держать в мемпуле транзакцию с низкой ставкой комиссии и множеством потомков, чтобы чувствительные ко времени транзакции не подтвердились до своего срока. В протоколах вроде Lightning Network, где закрытие каналов зависит от определённых временных блокировок, злоумышленник, «закрепивший» вашу транзакцию закрытия, потенциально может украсть средства, если вам придётся ждать дольше вашего окна безопасности.
- В ответ разработчики добавили в последние версии Bitcoin Core исключения в правилах политики (carve-outs), транзакции версии 3 («TRUC») и пакетную ретрансляцию (package relay), а также эфемерные якоря (выходы pay-to-anchor), появившиеся в Bitcoin Core 28 и 29. Они позволяют родительской транзакции с низкой комиссией распространяться вместе с дочерней транзакцией с высокой комиссией в виде пакета. Эти меры снижают, но не устраняют полностью возможность злоумышленников закреплять чувствительные ко времени транзакции; пиннинг затрагивает политику ретрансляции, а не консенсус.
Ключевые факты
- Child-pays-for-parent позволяет получателю ускорить входящий платёж, потратив его выход с высокой комиссией.
- BIP125 позволяет сигнализировать о возможности замены через поля nSequence во входах транзакции.
- Замещающая RBF-транзакция должна заплатить как минимум комиссии всех вытесняемых транзакций плюс доплату за собственный размер, причём по более высокой ставке комиссии.
- CPFP работает, потому что майнеры оценивают пакеты «родитель — потомок» по совокупной ставке комиссии с учётом предков.
- В Bitcoin Core версии 28 принятие full RBF стало поведением нод по умолчанию.
- В последних версиях Bitcoin Core добавлены пакетная ретрансляция (package relay) и транзакции TRUC (версии 3), чтобы повышение комиссии надёжнее работало против пиннинга.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 ситуаций, в которых важна скорость подтверждения транзакции: от розничных покупок до закрытия каналов Lightning. Укажите срок и последствия его несоблюдения.
6СгруппироватьРаспределите эти 9 по 6 группам в зависимости от того, кто может ускорить транзакцию: отправитель, получатель, любой из них, третья сторона, правило протокола или никто.
3Выделить главноеСведите 6 групп к 3 фундаментальным причинам, по которым транзакция может оставаться в мемпуле дольше ожидаемого времени подтверждения.
1КристаллизоватьНапишите 1 предложение о том, как CPFP создаёт финансовую зависимость между двумя сторонами, которые не доверяют друг другу.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.