
Кошелёк предлагает добавить комиссию дочерней Bitcoin-транзакцией, но расчёт только её собственной ставки не объясняет итог. Потомок зависит от ещё не подтверждённых транзакций. При расчёте выбранного набора нужны и их размеры, и уже назначенные комиссии. Если две ветки имеют общего предка, его нельзя прибавить дважды.
Что именно называют CPFP
CPFP, Child Pays For Parent, использует новую транзакцию, которая зависит от предыдущей. В FAQ Bitcoin Core этот принцип описан как добавление комиссии через зависимую транзакцию. Это отличается от замены исходной транзакции. Здесь мы разбираем только арифметику заранее выбранного набора, а не создаём или отправляем перевод.
Для реального действия нужен доступный для траты выход и возможность подписать новую транзакцию. Наличие TXID чужого платежа не даёт права тратить его выходы. Если BTC отправлены на депозитный адрес обменника, отправитель не получает контроль над этим адресом. Работать можно лишь с выходами, которыми действительно управляет соответствующий кошелёк; форма владение и доступность средств не проверяет.
Сначала нарисуйте зависимости
В учебном примере транзакция A имеет два разных выхода. Один использует B, другой — C. Будущий потомок D использует подходящие выходы B и C. Поэтому для выбранного набора нужны A, B, C и D, но A остаётся одной транзакцией, хотя к ней ведут два пути.
| Метка | Неподтверждённые родители | Виртуальный размер | Комиссия | Как учитывается |
|---|---|---|---|---|
| A | Нет в этом списке | 200 vB | 1 000 sat | Общий предок, один раз |
| B | A | 200 vB | 1 000 sat | Прямой родитель D |
| C | A | 200 vB | 1 000 sat | Другой прямой родитель D |
| D, планируемый потомок | B и C | 200 vB | Не меньше 5 000 sat при выбранной цели | Добавляется к объединению предков |
| Итого при цели 10 sat/vB | A, B, C, D | 800 vB | 8 000 sat | 3 000 уже у предков, ещё 5 000 у D |
Метки A–D не являются TXID. Цель 10 sat/vB и все числа вымышлены; это не текущая ставка сети, не тариф KOT.CASH и не предложение заплатить такую комиссию. Предполагается, что исходный список содержит все ещё неподтверждённые зависимости выбранных родителей. Пропущенную неизвестную транзакцию инструмент сам не найдёт.
Формула для введённой цели
Обозначим сумму виртуальных размеров уникальных предков как V, сумму их комиссий как F, размер потомка как v, выбранную ставку как r. Для всего набора нужно не меньше ceil(r × (V + v)) сатоши: дробная часть округляется вверх, поскольку комиссия задаётся целым числом сатоши. Остаток для потомка равен этой величине минус F.
Если остаток отрицательный, арифметически хватило бы нуля. Но пользователь может задать отдельный минимальный размер комиссии самого потомка. Форма берёт максимум из нуля, остатка и этого введённого минимума. Она не определяет сетевой минимум самостоятельно. Показанная сумма — минимум для двух указанных числовых условий, а не гарантия допуска транзакции.
В примере: ceil(10 × 800) − 3 000 = 5 000 sat. Если ошибочно добавить A дважды, получится 1 000 vB и 4 000 sat у «предков», а потомку приписывается уже 6 000 sat. Лишняя тысяча возникает из повторного учёта, а не из нового требования сети.
Где заканчивается эта арифметика
Не считайте весь связанный граф автоматически «пакетом, который майнер точно возьмёт». В заметках Bitcoin Core 31.0 описана работа с кластерами и группами транзакций, называемыми chunks. Правила узлов, распространения и формирования блока сложнее одной средней ставки. Наша форма не воспроизводит эти алгоритмы и не проверяет текущий mempool.
Она также не проверяет, тратят ли B и C разные выходы A, не конфликтуют ли другие входы, корректны ли подписи, достаточно ли суммы выходов, какие ограничения действуют у узла и поддерживает ли кошелёк выбранную конструкцию. Корректная таблица зависимостей не является корректной подписанной Bitcoin-транзакцией.
Как подготовить данные к проверке
- Используйте виртуальный размер vB, а не обычные байты или вес без перевода единиц.
- Для каждой метки укажите абсолютную комиссию в sat, не ставку sat/vB и не сумму перевода получателю.
- В списке родителей оставьте только неподтверждённые зависимости, которые входят в модель; подтверждённую историю до них не разворачивайте.
- Снимайте данные согласованно: после подтверждения, замены или изменения зависимостей старый расчёт нужно пересобрать.
Список может содержать посторонние строки для удобства сверки: они показываются как неиспользованные и не увеличивают сумму. При этом неизвестная ссылка, повтор ID или цикл считаются ошибкой во всём введённом графе. Предел в тридцать записей нужен для небольшой локальной формы и не является правилом Bitcoin.
Перед обменом разделяйте сетевую комиссию и сервисные условия заявки. Для размера одной транзакции полезна отдельная статья о входах UTXO; здесь размер уже введён готовым, а новая задача — зависимости и объединение комиссий без повторов. Скачиваемый результат хранит учебную расшифровку, не подписывает и не отправляет средства.
Сверить комиссию потомка с введённой целью для набора
Локальная учебная арифметика введённого графа. Уникальные предки считаются один раз; целые sat и точное округление вверх. Все ссылки должны существовать, циклы запрещены. Нет UTXO, подписей, балансов, конфликтов, политики узлов, relay, выбора chunks майнером, живых ставок, операций с кошельком и гарантии подтверждения. Введённый минимум не является найденным сетевым минимумом; пределы технические. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.