53 / 736CPFP

CPFP (Child Pays for Parent)

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

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

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

Анна ждёт 100 000 sat. Сокращение sat означает сатоши, наименьшую единицу биткоина. Платёж уже виден, но отправитель указал низкую комиссию, и транзакция пока не попала в блок. Кошелёк Анны позволяет потратить этот неподтверждённый выход. Она создаёт из него новую транзакцию на свой адрес с более высокой комиссией. Анна не платит отправителю или отдельному сервису: это обычная комиссия биткоин-транзакции. Майнер не может подтвердить новую транзакцию без исходной, поскольку нужного выхода не было бы в проверяемой цепочке. Родительская должна быть подтверждена раньше или стоять перед дочерней в том же блоке вместе с другими необходимыми неподтверждёнными предками. Обратного требования нет: родительская может подтвердиться без дочерней. [3] [5]

Возьмём простой пример без других неподтверждённых предков. Родительская транзакция имеет размер 200 vB и комиссию 200 sat. Виртуальный байт, vB, — мера размера, полученная из веса транзакции; sat/vB показывает, сколько сатоши предлагают за такую единицу. Дочерняя занимает 100 vB, и Анна платит за неё 2 800 sat. Если у дочерней только один выход, из поступивших 100 000 sat останется 97 200 sat. Вместе транзакции платят 3 000 sat за 300 vB, то есть 10 sat/vB. Одна дочерняя предлагает 28 sat/vB, но майнеру нужно включить и родительскую транзакцию с низкой комиссией. Если смотреть лишь на высокую ставку дочерней, эта зависимость теряется. Это учебный расчёт, а не рекомендуемая ставка на сегодня; реальные размеры и нужную общую комиссию проверяет кошелёк. Другие необходимые предки изменят расчёт. Деталь для углублённого изучения: при локальном приёме пакета уже принятые транзакции не учитываются повторно, а узел — программа, проверяющая и передающая транзакции, — может использовать скорректированные комиссии. Поэтому показанная там ставка не обязательно совпадает с простым совместным расчётом для майнера. Скорректированная комиссия здесь — локальное значение для решений узла; она не меняет комиссию, которую транзакция действительно платит. [3]

CPFP — не кнопка, позволяющая любому ускорить чужую транзакцию. Нужно иметь возможность потратить один из выходов родительской и выполнить его условия, включая подписи. Анна может сделать это как получательница; отправитель иногда может использовать выход, возвращающий остаток его средств, называемый change. Просто видеть сумму в обозревателе или Watch-only Wallet недостаточно. Watch-only Wallet позволяет следить за платежами, но сам не хранит приватные ключи, необходимые для расходования средств. Кошелёк также должен поддерживать трату неподтверждённого выхода. Перед подписанием проверь, какой выход тратишь, куда пойдут средства, сколько останется и какова будет общая комиссия. Если выход небольшой, комиссия может поглотить значительную часть его стоимости. [5]

Replace-by-Fee (RBF) создаёт новую конфликтующую транзакцию, которая должна заменить исходную. Она тратит хотя бы один общий вход, но весь набор входов не обязан совпадать. CPFP сохраняет исходный платёж и его идентификатор, добавляя ещё одну транзакцию. Для RBF нужно выполнить условия входов замены; для обычного CPFP — условия выхода исходного платежа. Поэтому получатель может воспользоваться CPFP, даже если не способен подписать замену отправителя. Другой независимый платёж с высокой комиссией не поможет: дочерняя транзакция должна действительно зависеть от ожидающего платежа. [3]

Более высокая совместная ставка даёт майнеру больше оснований взять обе транзакции, но не резервирует место в следующем блоке. Могут появиться транзакции с более высокими комиссиями, либо пакет не дойдёт до некоторых майнеров. Следи за подтверждениями исходного платежа и дочерней транзакции. Сообщение узла о принятии ещё не означает подтверждения в блоке. Если отправитель заменит исходный платёж через RBF, дочерняя транзакция со ссылкой на старый выход не сможет сама присоединиться к другой новой транзакции; ситуацию придётся оценить заново. Создание дочерней также не превращает неподтверждённое поступление в гарантированный платёж. [3]

Следующие разделы объясняют правила для углублённого чтения и работы со своим узлом. Mempool — список ожидающих транзакций конкретного узла, а не единая очередь всей сети. Пакет — группа транзакций, поданных вместе. Важно различать три решения: действительна ли транзакция, примет ли её узел и выберет ли её майнер. Консенсус определяет действительность транзакций и блоков. Политика mempool определяет локальное принятие и ретрансляцию; правила майнера — отбор в кандидатный блок. CPFP не меняет консенсус. Экономически выгодный пакет может не соответствовать местным правилам, а принятие одним узлом не обязывает другие узлы или майнеров. [3] [5]

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

Узел не может принимать сети зависимостей произвольного размера. Предок нужен перед другой транзакцией, а потомок тратит выходы дальше по этой цепочке зависимостей. WU означает единицы веса транзакции, а топология описывает связи между транзакциями. Эти технические пределы относятся к политике соответствующей версии узла. Лимиты защищают память, ресурсы процессора и пропускную способность. Старые версии Core ограничивали количество и размеры предков и потомков; Core 31 заменил эти лимиты mempool лимитами связанных кластеров. Отдельные пакетные лимиты сохраняются: документация Core 31 указывает максимум 25 транзакций и общий вес 404000 WU. Вес — не виртуальный размер. Неправильная топология, конфликт или несоблюдение локальных правил о допустимых формах транзакций (стандартности) могут заблокировать CPFP даже при достаточной комиссии. [2] [3]

Связанные неподтверждённые транзакции не всегда можно экономически оценивать по отдельности. Cluster Mempool позволяет узлу рассматривать их связные группы. Cluster — вся связная группа; меньшая группа, обрабатываемая при отборе транзакций, называется chunk. Это не части уже подтверждённых блоков. Bitcoin Core 31 использует Cluster Mempool: кластер состоит из транзакций, связанных отношениями родитель–потомок в любом направлении. Лимиты по умолчанию — 64 транзакции и 101 kB виртуального размера на кластер; их можно настроить. Порядок учитывает группы, добываемые вместе, — chunks — и их ставки. Исторический CPFP carveout разрешал ограниченное исключение из лимита потомков; Core 31 его удалил, и таким способом обойти лимит числа транзакций кластера нельзя. [2] [4]

Команды этого раздела не взаимозаменяемы. Тест может только описать результат; подача пакета уже может реально принять и распространить подписанные транзакции. Поле vsize показывает виртуальный размер. Обычный кошелёк может заниматься этими подробностями за пользователя. В Core 31 RPC getmempoolentry для транзакции в mempool этого узла показывает комиссии, vsize, зависимости и данные chunk; getmempoolcluster показывает связанный кластер. RPC testmempoolaccept выполняет локальную проверку без принятия и рассылки; при нескольких транзакциях предки должны предшествовать потомкам, а транзакции не должны конфликтовать друг с другом или с mempool. RPC submitpackage действительно подаёт поддерживаемый пакет для принятия в mempool и распространения, а не только тестирует. Проверяй результаты отдельных транзакций, версию и конфигурацию; ни один результат не гарантирует включение транзакции в блок. [2] [6] [7] [8] [9]

Для полной картины прочитайте эту статью вместе с Replace-by-Fee (RBF), Transaction Fees, Fee Rate, Mempool, Транзакция, UTXO. На эту статью также ссылаются Change Address, Подтверждение, Двойная трата, 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Первичный источник
Обновлено: Сначала источники · Не является инвестиционной рекомендацией