Комиссия в Bitcoin: как устроен механизм sat/vB, приоритет в мемпуле и почему транзакция может зависнуть

Комиссия в Bitcoin не привязана к сумме перевода. Она зависит исключительно от размера транзакции в байтах и конкуренции за место в блоке. Единица измерения — сатоши за виртуальный байт (sat/vB). Понимание этой механики позволяет не переплачивать в спокойные периоды и не застревать в мемпуле при пиковой нагрузке.

Что такое sat/vB и почему не «процент от суммы»​


Bitcoin-транзакция — это структура данных фиксированного формата: входы, выходы, скрипты подписей, witness-данные. Чем больше входов и чем сложнее скрипт, тем больше байт занимает сериализованная транзакция. Майнер включает транзакции в блок ограниченного размера (точнее, ограниченного веса — 4 000 000 weight units), поэтому он заинтересован брать те, которые приносят больше комиссии на единицу занятого места.

Fee rate = общая комиссия (в сатоши) ÷ виртуальный размер транзакции (в vB).

Виртуальный байт (vB) — нормализованная единица, учитывающая скидку для witness-данных (SegWit). Формула:

Код:
vsize = (3 × base_size + total_size) / 4

где base_size — размер транзакции без witness-данных, total_size — полный размер. Для legacy-транзакций (без SegWit) vsize совпадает с реальным размером в байтах. Для SegWit-транзакций witness-данные учитываются с коэффициентом 0,25, поэтому vsize меньше реального размера.

Пример расчёта​


Типичная SegWit-транзакция P2WPKH с одним входом и двумя выходами занимает около 140 vB. Если вы хотите отправить её с fee rate 10 sat/vB:

Код:
Комиссия = 140 vB × 10 sat/vB = 1400 сатоши ≈ 0.00001400 BTC

Та же транзакция с двумя входами (например, вы консолидируете два UTXO) займёт примерно 250 vB, и комиссия при том же rate вырастет до 2500 сатоши.

Как мемпул определяет приоритет​


Мемпул (mempool) — очередь неподтверждённых транзакций, которую хранит каждый узел. Когда майнер формирует блок, он сортирует кандидатов по fee rate: чем выше sat/vB, тем раньше транзакция попадёт в блок.

Несколько важных деталей:

  • Мемпул не глобальный. Каждый узел видит свою копию. Транзакция, принятая одним узлом, может не дойти до другого из-за различий в политике реле (minrelaytxfee, лимиты размера).
  • Минимальный порог реле. Узлы Bitcoin Core по умолчанию не ретранслируют транзакции с fee rate ниже 1 sat/vB (параметр minrelaytxfee). Транзакция с нулевой комиссией или ставкой ниже порога просто не распространится по сети.
  • Эвристика CPFP и RBF. Майнеры оценивают не только отдельную транзакцию, но и её «пакет»: если дочерняя транзакция тратит выход неподтверждённой родительской и несёт высокую комиссию, эффективный fee rate пакета растёт. Это основа Child-Pays-For-Parent (CPFP).

Почему транзакция зависает​


Транзакция остаётся в мемпуле неопределённо долго, если её fee rate ниже текущей «проходной» ставки. Проходная ставка — не фиксированная величина: она меняется от блока к блоку в зависимости от загрузки сети. В периоды низкой активности достаточно 1–2 sat/vB; при пиковом спросе (например, во время ажиотажа вокруг Ordinals или резкого роста цены) проходная ставка может подниматься до 50–200+ sat/vB.

Дополнительные причины застревания:

  • Транзакция не достигла достаточного числа узлов (проблема реле).
  • Транзакция использует RBF-сигнал, но замена не была отправлена, и некоторые узлы могли её отбросить по таймауту.
  • Мемпул узла переполнен, и транзакции с низким приоритетом вытесняются (eviction).

Как кошельки выбирают fee rate​


Большинство современных кошельков используют оценку на основе мемпула (fee estimation). Bitcoin Core, например, содержит встроенный модуль fee estimator, который отслеживает, за сколько блоков подтверждаются транзакции с определённым fee rate, и выдаёт рекомендацию для целевого времени подтверждения (1 блок, 3 блока, 6 блоков и т. д.).

Альтернативный подход — внешние API-оценки (mempool.space, Blockstream Explorer и др.), которые агрегируют данные мемпула нескольких узлов и показывают распределение fee rate по перцентилям.

Практическая таблица ориентиров​


ЦельТипичный fee rate (спокойная сеть)Типичный fee rate (пиковая нагрузка)
Подтверждение в следующем блоке (~10 мин)5–15 sat/vB50–200+ sat/vB
Подтверждение в течение часа2–5 sat/vB20–50 sat/vB
Подтверждение в течение нескольких часов1–2 sat/vB5–20 sat/vB

Значения ориентировочные и зависят от текущей загрузки. Перед отправкой стоит проверить актуальное распределение на мемпул-эксплорере.

Что делать, если транзакция застряла​


Replace-By-Fee (RBF)​


Если транзакция была создана с сигналом RBF (поле nSequence хотя бы одного входа меньше 0xFFFFFFFE), её можно заменить новой версией с более высокой комиссией. Требования к замене в Bitcoin Core:

  • Новая транзакция должна платить комиссию не меньше, чем старая, плюс минимум 1 sat/vB дополнительного прироста на каждый байт размера.
  • Новая транзакция не должна содержать новых неподтверждённых входов.
  • Не более 100 транзакций в цепочке замены.

Большинство современных кошельков (Electrum, Sparrow, BlueWallet, Trezor Suite) поддерживают RBF из коробки.

Child-Pays-For-Parent (CPFP)​


Если RBF не был включён при создании транзакции, можно создать дочернюю транзакцию, которая тратит один из выходов застрявшей родительской, и назначить ей высокую комиссию. Майнер, видя пакет «родитель + ребёнок», пересчитывает эффективный fee rate всего пакета и с большей вероятностью включит обе транзакции в блок.

CPFP работает, только если у вас есть ключ от адреса, на который пришёл один из выходов застрявшей транзакции (обычно это ваш change-адрес).

Ожидание и eviction​


Если ни RBF, ни CPFP недоступны, остаётся ждать. Транзакция будет подтверждена, когда нагрузка сети снизится и проходная ставка упадёт ниже её fee rate. Альтернатива — дождаться, пока мемпул узла вытеснит её (по умолчанию через 14 дней в Bitcoin Core, параметр mempoolexpiry). После вытеснения транзакция исчезает из мемпула, и средства формально возвращаются в состояние «не потрачены», хотя повторная отправка потребует создания новой транзакции.

Типичные ошибки при выборе комиссии​


Установка фиксированной комиссии без учёта размера транзакции. Если кошелёк позволяет задать комиссию в абсолютных сатоши, а не в sat/vB, легко ошибиться: 500 сатоши для транзакции на 140 vB — это ~3,5 sat/vB, а для транзакции на 1000 vB — всего 0,5 sat/vB, которая может не пройти порог реле.

Игнорирование количества входов. Консолидация UTXO в одной транзакции увеличивает размер и, соответственно, комиссию. Если вы отправляете с адреса, на котором накопилось много мелких входов, размер транзакции может вырасти в разы.

Отправка без RBF-сигнала в условиях неопределённости. Если вы не уверены в выбранном fee rate, лучше включить RBF: это даёт возможность поднять комиссию постфактум без потери средств.

Попытка «ускорить» через сторонние сервисы. Сервисы, предлагающие «ускорение за процент», в лучшем случае делают CPFP от своего имени (что вы можете сделать сами), в худшем — являются мошенническими.

SegWit, Taproot и влияние на комиссию​


Формат адреса и тип скрипта напрямую влияют на виртуальный размер:

Тип выходаПримерный размер входа (vB)Примерный размер выхода (vB)
P2PKH (legacy, 1...)~148~34
P2SH-P2WPKH (nested SegWit, 3...)~91~32
P2WPKH (native SegWit, bc1q...)~68~31
P2TR (Taproot, bc1p...)~57~43

Переход с legacy на native SegWit или Taproot снижает размер транзакции и, соответственно, комиссию при том же fee rate. Для получателя это бесплатно: экономит отправитель.

Как проверить текущую ситуацию в мемпуле​


  • mempool.space — визуализация распределения транзакций по fee rate, прогноз времени подтверждения, история блоков.
  • Bitcoin Core RPC: getmempoolinfo показывает текущий размер мемпула в байтах и количество транзакций; estimatesmartfee возвращает рекомендованный fee rate для заданного числа блоков.
  • Blockstream Explorer — альтернативный обзор с фильтрацией по fee rate.

Если мемпул содержит менее 50 МБ данных, сеть разгружена и достаточно минимальной комиссии. Если объём превышает 150–200 МБ, стоит закладывать повышенный rate для своевременного подтверждения.

Краткий чек-лист перед отправкой​


  1. Проверьте текущий размер мемпула и рекомендованный fee rate на эксплорере.
  2. Убедитесь, что кошелёк считает комиссию в sat/vB, а не в абсолютных сатоши.
  3. Если транзакция не срочная, можно выбрать rate для подтверждения за 3–6 блоков и сэкономить.
  4. Включите RBF, если кошелёк это позволяет.
  5. При большом количестве входов рассмотрите предварительную консолидацию в период низкой нагрузки.

Источники​


 
Назад
Верх Низ