Перейти к содержимому
buybitcoinsmart

Глоссарий / Транзакции и комиссии

Child pays for parent

Другие названия: CPFP, Ancestor mining, майнинг по предкам.

Что такое Child pays for parent?
Child pays for parent спасает транзакцию с низкой комиссией, расходуя ее неподтвержденный выход во второй транзакции, комиссия которой покрывает обе, так как майнеры оценивают эту пару вместе.

Майнеры не выбирают транзакции по одной. С версии 0.13.0 от августа 2016 года Bitcoin Core отбирает их по ставке комиссии с учетом предков, поэтому щедрая дочерняя транзакция затягивает скупую родительскую в тот же блок. Именно это единственное проектное решение дает получателю застрявшего платежа способ действовать, вместо того чтобы ждать отправителя, который может так и не ответить.

Как это работает

Комиссия на виртуальный байт представляет собой отношение, и child pays for parent работает за счет улучшения отношения для группы, а не для одной транзакции.

Майнер, заполняющий блок, хочет получить максимум сатоши за виртуальный байт. Когда транзакция в пуле памяти зависит от неподтвержденного родителя, код майнинга не может взять ее отдельно, поэтому он оценивает весь набор предков: суммарные комиссии родителя и дочерней транзакции, деленные на их суммарный размер. Если это число выигрывает у конкурентов, в блок попадают обе. Отбор транзакций для майнинга в Bitcoin Core работает так с версии 0.13.0, выпуска, который заменил простую сортировку по каждой транзакции сортировкой по ставке комиссии с учетом предков.

Арифметику стоит один раз посчитать вручную. Возьмите родителя размером 141 виртуальный байт с комиссией 1 sat/vB, то есть 141 сатоши. Вы хотите, чтобы пара достигла 25 sat/vB. Дочерняя транзакция с одним входом и одним выходом, тратящая эту монету, занимает около 111 виртуальных байт, поэтому пакет составляет 252 виртуальных байта и требует 6300 сатоши в сумме. Родитель уже дал 141, поэтому дочерняя транзакция должна принести 6159, что соответствует комиссии около 55 sat/vB для нее самой. Дочерняя транзакция всегда платит надбавку, потому что покупает место в блоке и для чужих байт, а не только для своих.

Это ограничивают два предела. Цепочка неподтвержденных транзакций по умолчанию не может превышать 25 предков или потомков, а общий размер такой семьи ограничен примерно 101 киловобайт, так что наращивать дочерние транзакции бесконечно нельзя. И ретрансляция не происходит автоматически: годами дочернюю транзакцию, которая поднимала недоплатившего родителя, отвергали сами узлы, уже отбросившие родителя, поэтому в октябре 2024 года в Bitcoin Core версии 28.0 появилась оппортунистическая ретрансляция для одного родителя с одной дочерней транзакцией, чтобы пара ходила по сети как единое целое.

Есть и более неприятная версия той же зависимости. Если кто-то другой может присоединить крупную дочернюю транзакцию с низкой комиссией к общей неподтвержденной транзакции, он может раздуть размер семьи и сделать повышение комиссии запредельно дорогим. Эта атака называется закреплением транзакции (transaction pinning), и именно из-за нее Lightning и другие контрактные протоколы теперь используют ограниченные топологии транзакций, а не полагаются на простое повышение комиссии.

Почему это важно при покупке биткоина

Child pays for parent является единственным способом исправить комиссию, доступным получателю, поэтому это инструмент для выводов с биржи, которые застряли.

Последовательность такая. Вы выводите средства с биржи, биржа объединила ваш платеж с пятьюдесятью другими по комиссии, которую выбрала несколько часов назад, давление на комиссии растет, и пакет остается неподтвержденным. Replace-by-fee здесь бесполезен, потому что эти входы подписала биржа. Что вы можете сделать, так это потратить входящую монету, еще неподтвержденную, на другой адрес в своем кошельке с высокой комиссией. Теперь майнеры видят пакет, который стоит добывать, и обе транзакции подтверждаются вместе.

Ваш кошелек должен это поддерживать. Bitcoin Core, Sparrow и Electrum позволяют выбрать неподтвержденную входящую монету и потратить ее; многие мобильные кошельки вообще скрывают неподтвержденные балансы, и нажать там не на что. Если вы планируете хранить реальные деньги при самостоятельном хранении, проверьте это заранее, а не во время скачка комиссий.

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

Спасение вывода 0,02 BTC, застрявшего в пакете с комиссией 4 sat/vB

Допустим, биржа отправляет вам 0,02 BTC в пакете с комиссией 4 sat/vB, и к утру ничего ниже 30 sat/vB не подтверждается. Пакет большой, возможно 1500 виртуальных байт, и платить за него целиком не ваша задача. Вам нужно лишь, чтобы пакет, содержащий вашу монету, выглядел привлекательно.

Вот деталь, которая удивляет людей: пакет, который оценивает майнер, включает родителя целиком, все его 1500 байт, а не только вашу долю. Добавьте дочернюю транзакцию в 111 байт, и пакет составит 1611 виртуальных байт, поэтому для достижения 30 sat/vB нужно набрать 48 330 сатоши в сумме. Родитель дал из них 6000, поэтому дочерняя транзакция должна примерно 42 330 сатоши, что при выводе 0,02 BTC является реальным расходом.

Поэтому child pays for parent является инструментом спасения, а не обычным, и поэтому он гораздо лучше работает с небольшим родителем, например с платежом, который один человек отправил вам напрямую, чем с крупным пакетом биржи. Иногда честный ответ состоит в том, чтобы подождать: комиссии в большинстве выходных падают, а транзакция по умолчанию лежит в пулах памяти до 14 дней, прежде чем узлы забудут ее.

Child pays for parent vs replace-by-fee

Оба повышают комиссию, но их применяют противоположные стороны, и следы они оставляют разные. Замена переписывает исходную транзакцию, требует ключей, подписавших ее входы, создает новый идентификатор транзакции и заставляет первую версию исчезнуть. Child pays for parent добавляет новую транзакцию сверху, требует только ключей к выходу, который вы получили, ничего не меняет в родителе и навсегда оставляет обе в цепочке.

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

Не путать с

Часто задаваемые вопросы

Можно ли использовать child pays for parent для платежа, который я жду?

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

Почему комиссия дочерней транзакции намного выше ставки, которую я на самом деле хочу?

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

Должен ли отправитель что-то включить, чтобы это сработало?

Нет. Child pays for parent не требует ни флага, ни сигнала, ни содействия отправителя. Ему нужен только выход неподтвержденной транзакции, ключ от которого есть у вас, а для входящего платежа это выход, по которому платят вам.

Читайте далее

Связанные термины

Еще в разделе «Транзакции и комиссии»

Читать эту страницу на английском