Блокчейн

Package relay в Bitcoin: как передаются связанные транзакции

Package relay позволяет узлам рассматривать связанные неподтверждённые транзакции вместе. Разбираем parent и child, CPFP, пакетную политику mempool и почему приём узлом не гарантирует включение в блок.

Package relay в Bitcoin: как передаются связанные транзакции

Короткий ответ: package relay – это механизм, позволяющий узлам передавать и оценивать группу связанных неподтверждённых Bitcoin-транзакций как пакет. Это важно, когда дочерняя транзакция платит повышенную комиссию за себя и своего родителя, помогая поднять совокупную привлекательность для майнера. Но пакетная передача не меняет правила консенсуса и не гарантирует попадание транзакций в следующий блок.

Почему одной транзакции иногда недостаточно

Bitcoin строит операции на UTXO: новая транзакция тратит выход предыдущей. Если транзакция A создала нужный выход, транзакция B, которая тратит его, зависит от A. Такая связь видна в графе транзакций: A – родитель, B – потомок. Если родитель ещё не подтверждён, потомок не может быть включён в блок раньше него.

Представьте, что родитель был отправлен с небольшой комиссией, когда mempool был свободнее, а сеть позже стала загруженной. Создать child можно только если у вас есть возможность потратить выход родителя. Детская транзакция может предложить более высокую комиссию, чтобы увеличить суммарную комиссию пары. Этот подход называется CPFP – child pays for parent. Он не «доплачивает» комиссию внутри уже подписанной транзакции, а создаёт отдельную связанную операцию.

О правилах входов и выходов Bitcoin и UTXO рассказывает обзор сети Bitcoin. Package relay нужен именно потому, что при проверке стимула включить операции в блок экономический смысл иногда есть только у связанной группы, а не у каждой транзакции по отдельности.

Что меняет передача пакетом

При обычной передаче получатель может получить child раньше parent. Для узла такой child выглядит как транзакция с неизвестным входом. Традиционная обработка просит отправителя предоставить недостающую транзакцию, а затем снова проверяет зависимую. При сложной цепочке зависимостей это создаёт лишние обмены и неодинаковое поведение узлов.

Пакет содержит связанные транзакции и их порядок зависимости. Узел может увидеть родителя и потомка вместе, проверить входы и оценить совокупную комиссию согласно своим локальным правилам mempool. Это упрощает обработку CPFP и некоторых orphan-сценариев. Узлы могут договориться о поддержке пакетного протокола при соединении, поэтому возможность передать пакет и пакетные правила приёма нужно рассматривать отдельно.

Package relay – это не транзакция нового типа и не запись в блокчейне. Пользователь по-прежнему подписывает обычные транзакции; пакетная логика относится к распространению и политике mempool узлов. Майнер в конечном счёте выбирает допустимые транзакции для блока, а правила проверки блоков остаются отдельными от локальной политики ретрансляции.

Пакетная политика и консенсус

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

В Bitcoin Core есть локальный RPC submitpackage, предназначенный для проверки или подачи некоторых пакетов с применением правил пакета. Историческая документация релизов подчёркивает, что локальная пакетная подача и сетевой package relay – разные вещи. Функции и ограничения RPC меняются между версиями, поэтому не следует переносить старые инструкции на актуальный узел без чтения документации к установленной версии.

Предложение BIP 331 описывает пакетный обмен между узлами, включая передачу сведений о предках и запрос связанных транзакций. Статус предложения и его внедрение нужно проверять отдельно от существующих функций Bitcoin Core. Если сторонний кошелёк сообщает, что «пакет отправлен», уточните, означает ли это локальную проверку, передачу одному узлу или фактическую ретрансляцию по P2P-сети.

Что происходит с CPFP

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

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

При диагностике не ориентируйтесь на один обозреватель, особенно если родитель не подтверждён: разные источники могут использовать собственные узлы и политики. Сверьте txid обеих транзакций, зависимость по входу и текущий статус в том сервисе, через который вы отправляли операции. Не подписывайте неизвестную «ускоряющую» транзакцию, если не понимаете её входы и выходы.

Что это значит для пользователя и разработчика

Пользователю пакетный relay чаще встречается косвенно – через функцию ускорения транзакции кошелька. Перед подтверждением проверьте комиссию, входы, адрес сдачи и итоговую сумму. Child-транзакция расходует UTXO, поэтому неверно выбранный вход или сдача могут изменить план расходования. Для лучшего понимания модели UTXO можно начать с обзора Bitcoin.

Разработчику нужно учитывать неодинаковую поддержку узлов и версий. Не предполагайте, что пакет дойдёт до каждого пира, и не помечайте платёж окончательным лишь на основании локального приёма в mempool. Стройте обработку событий вокруг подтверждений и проверяйте результаты каждой транзакции. Для оценки стоимости можно анализировать фактическую комиссию всего набора, а не только ставку родителя.

Если кошелёк предлагает замену транзакции, это не обязательно CPFP: замена может менять исходную транзакцию по правилам RBF, тогда как CPFP создаёт потомка. Эти методы отличаются тем, какие ключи и выходы используются, и могут иметь разные последствия. Сверяйте тип операции в интерфейсе и проверяйте данные перед подписью. Для общей диагностики числа подтверждений сети посмотрите сколько подтверждений нужно для Bitcoin.

Итог

Package relay помогает передавать связанные Bitcoin-транзакции совместно и оценивать пакет как группу, что полезно для CPFP и зависимых операций. Его следует отличать от консенсуса, локального mempool и RPC подачи пакета. Успех на одном этапе не гарантирует сетевую ретрансляцию или включение в блок. Для пользователя главное – проверить обе транзакции и их комиссию, а для разработчика – учитывать разницу политик узлов и версий программного обеспечения.