53 / 691CPFP

CPFP (Child Pays for Parent)

Потомок платит за родительскую транзакцию

Child Pays for Parent (CPFP) усиливает стимул майнера подтвердить транзакцию с низкой комиссией: новая транзакция тратит её выход и достаточной комиссией повышает общую ставку зависимых транзакций.

CPFP не изменяет и не заменяет неподтверждённую родительскую транзакцию. Он добавляет дочернюю, комиссия которой может экономически поддержать включение родительской в блок. Родительская должна быть подтверждена раньше или стоять перед дочерней в том же блоке. Результат зависит от общей ставки, возможности потратить родительский выход, правил узла и выбора майнера.

CPFP сохраняет родительскую транзакцию с низкой комиссией и тратит её выход в дочерней с более высокой ставкой комиссии. Пока родительская не подтверждена, включение дочерней требует также родительскую и других необходимых неподтверждённых предков. Майнер может получить их общие комиссии; саму родительскую можно подтвердить и без дочерней. [Bitcoin Core v31.0 — Package mempool acceptance] [Bitcoin Developer Guide — Transactions]

Для простой пары без других неподтверждённых предков сложи комиссии родительской и дочерней в satoshi и раздели на сумму их виртуальных размеров в vB. Результат — ставка в sat/vB, а не общая комиссия. Более высокая комиссия дочерней помогает только при конкурентоспособной общей ставке; дополнительные необходимые предки меняют расчёт. Локальное принятие пакетов не учитывает повторно транзакции, уже принятые в mempool, и может использовать модифицированные комиссии, поэтому его показатель не всегда совпадает с этим простым расчётом для майнинга. [Bitcoin Core v31.0 — Package mempool acceptance]

Обычный CPFP требует возможности потратить хотя бы один родительский выход. Отправитель может использовать выход сдачи, change; получатель — свой платёжный выход. Нужно выполнить условия расходования, включая необходимые подписи. Простой просмотр или проверка выхода не дают такого права. [Bitcoin Developer Guide — Transactions]

RBF создаёт конфликтующую замену, имеющую с исходной транзакцией хотя бы один общий расходуемый вход; весь набор входов не обязан совпадать. CPFP сохраняет родительскую и добавляет дочернюю. Для RBF нужно выполнить условия входов замены, для обычного CPFP — условия расходования родительского выхода. Это разные изменения графа транзакций. [Bitcoin Core v31.0 — Package mempool acceptance]

Консенсус определяет действительность транзакций и блоков. Политика mempool определяет локальное принятие и ретрансляцию; правила майнера — отбор в кандидатный блок. CPFP не меняет консенсус. Экономически выгодный пакет может не соответствовать местным правилам, а принятие одним узлом не обязывает другие узлы или майнеров. [Bitcoin Core v31.0 — Package mempool acceptance] [Bitcoin Developer Guide — Transactions]

Bitcoin Core 26 добавил RPC submitpackage и package CPFP: дочерняя могла помочь родительской ниже динамической минимальной ставки mempool, но тогда не ниже минимальной ставки ретрансляции. Это ограничение не является неизменным. Core 31 допускает родительскую ниже minrelaytxfee, даже с нулевой комиссией, при поддерживаемой ретрансляции пакета из одной родительской и одной дочерней, в том числе вне TRUC; другие неподтверждённые родительские транзакции дочерней уже должны быть в mempool. Локальное принятие по-прежнему не гарантирует одинакового распространения по всей сети. [Bitcoin Core 26.0 release notes] [Bitcoin Core 31.0 release notes]

Лимиты защищают память, CPU и пропускную способность. Старые версии Core ограничивали количество и размеры предков и потомков; Core 31 заменил эти лимиты mempool лимитами связанных кластеров. Отдельные пакетные лимиты сохраняются: документация Core 31 указывает максимум 25 транзакций и общий вес 404000 WU. Вес — не виртуальный размер. Неправильная топология, конфликт или нарушение стандартности могут заблокировать CPFP даже при достаточной комиссии. [Bitcoin Core 31.0 release notes] [Bitcoin Core v31.0 — Package mempool acceptance]

Bitcoin Core 31 использует Cluster Mempool: кластер состоит из транзакций, связанных отношениями родитель–потомок в любом направлении. Лимиты по умолчанию — 64 транзакции и 101 kB виртуального размера на кластер; их можно настроить. Порядок учитывает группы, добываемые вместе, — chunks — и их ставки. Исторический CPFP carveout разрешал ограниченное исключение из лимита потомков; Core 31 его удалил, и таким способом обойти лимит числа транзакций кластера нельзя. [Bitcoin Core 31.0 release notes] [Bitcoin Core v31.0 — Mempool terminology]

Конкурентоспособная общая ставка может увеличить шанс подтверждения, но не резервирует место в следующем блоке. Спрос на место в блоках, распространение транзакций и выбор конкретного майнера могут меняться. CPFP усиливает комиссионный стимул, а не гарантирует время подтверждения. [Bitcoin Core v31.0 — Package mempool acceptance]

В Core 31 RPC getmempoolentry показывает комиссии, vsize, зависимости и данные chunk; getmempoolcluster показывает связанный кластер. RPC testmempoolaccept выполняет локальную проверку без принятия и рассылки; при нескольких транзакциях предки должны предшествовать потомкам, а транзакции не должны конфликтовать друг с другом или с mempool. RPC submitpackage действительно подаёт поддерживаемый пакет для принятия в mempool и распространения, а не только тестирует. Проверяй результаты отдельных транзакций, версию и конфигурацию; ни один результат не гарантирует добычу. [Bitcoin Core 31.0 release notes] [Bitcoin Core 31.0 — getmempoolentry RPC] [Bitcoin Core 31.0 — testmempoolaccept RPC] [Bitcoin Core 31.0 — submitpackage RPC] [Bitcoin Core v31.0 — Mempool RPC implementation]

Для полной картины прочитайте эту статью вместе с Replace-by-Fee (RBF), Комиссии за транзакции, Fee Rate, Mempool, Транзакция, UTXO. На эту статью также ссылаются Выход сдачи, Подтверждение, Двойная трата, Fee Rate.

DOC · 001Bitcoin Core 26.0 release notesДокументация ↗DOC · 002Bitcoin Core 31.0 release notesДокументация ↗DOC · 003Bitcoin Core v31.0 — Package mempool acceptanceДокументация ↗DOC · 004Bitcoin Core v31.0 — Mempool terminologyДокументация ↗DOC · 005Bitcoin Developer Guide — TransactionsДокументация ↗DOC · 006Bitcoin Core 31.0 — getmempoolentry RPCДокументация ↗DOC · 007Bitcoin Core 31.0 — testmempoolaccept RPCДокументация ↗DOC · 008Bitcoin Core 31.0 — submitpackage RPCДокументация ↗DOC · 009Bitcoin Core v31.0 — Mempool RPC implementationПервичный источник ↗
Сначала источники · Не является инвестиционной рекомендацией