Консолидация UTXO: как сэкономить на комиссии биткоина
Консолидация UTXO в биткоине: как объединить мелкие входы, посчитать вес транзакции в vB и платить меньше комиссии. Пошагово с цифрами.
Консолидация UTXO в биткоине: как объединить мелкие входы, посчитать вес транзакции в vB и платить меньше комиссии. Пошагово с цифрами.
В феврале я расплачивалась биткоином за подписку на сервис — счёт на 28 долларов. Кошелёк собрал платёж из девяти мелких входов, и комиссия вышла 27 400 сатоши, то есть около 17 долларов при тогдашнем курсе. Я заплатила почти половину суммы счёта за то, что у меня на балансе лежало девять кусочков по 0,0007 BTC вместо одного нормального. С тех пор я раз в пару месяцев сажусь и объединяю свои UTXO, пока сеть спокойная, — и плачу за переводы в разы меньше.
Сначала посмотрите, из чего собран ваш баланс. В Sparrow, Electrum и Bitcoin Core есть список монет (coins / UTXO): там видно каждый кусочек отдельно, с его размером и адресом. У меня в том кошельке оказалось девять записей по 0,0005–0,0009 BTC — каждая меньше доллара комиссии при спокойной сети, но вместе они собирались в дорогую транзакцию.
Второй шаг — текущая ставка. Откройте mempool.space и посмотрите блоки: там три колонки — «low priority», «medium», «high», в sat/vB. Это и есть цена за единицу веса. Ваша комиссия = вес транзакции × ставка.
Биткоин не хранит «баланс» — он хранит набор выходов от прошлых транзакций, UTXO. Когда вы платите, кошелёк берёт один или несколько таких выходов и указывает их как входы новой транзакции. Каждый вход нужно подписать, и подпись занимает место в блоке. Платите вы не за сумму, а за место.
Средний размер входа для обычного SegWit-адреса (P2WPKH) — 68 vB, для Taproot — около 58 vB, для старого P2PKH — 148 vB. Выход занимает 31 vB, служебная часть транзакции — ещё примерно 11 vB. Отсюда простая формула:
вес ≈ 11 + 68 × (число входов) + 31 × (число выходов)
Девять входов и два выхода — это 11 + 612 + 62 = 685 vB. Один вход и два выхода — 141 vB. Разница почти в пять раз, и комиссия отличается ровно так же.
Возьмите количество входов из списка монет и подставьте в формулу. У меня было девять входов: 11 + 68 × 9 + 31 = 654 vB, если отправлять на один свой адрес. При ставке 6 sat/vB комиссия = 654 × 6 = 3 924 сатоши, то есть 0,0000392 BTC — примерно 2,5 доллара по курсу 64 000 долларов.
Тот же расчёт для будущего платежа: один вход, два выхода — 141 vB. При ставке 40 sat/vB это 5 640 сатоши. А без консолидации тот же платёж весил бы 685 vB и стоил 27 400 сатоши. Разница 21 760 сатоши, и из неё надо вычесть 3 924, потраченные на объединение. Чистая экономия — около 17 800 сатоши, или 11 долларов на одной транзакции.
Консолидация выгодна, если одновременно выполняются три условия:
Если вы просто держите биткоин на холодном хранении и не тратите, объединять нечего: комиссию вы заплатите один раз при будущей продаже, и она будет такой же. Смысл появляется, когда мелкие входы копятся от регулярных поступлений — зарплаты в биткоине, выплат с пула, переводов с биржи.
Отдельно про совсем мелкие выходы: если вход меньше 300 сатоши, двигать его бессмысленно — комиссия за его включение в транзакцию будет выше номинала. Это пыль, её проще оставить.
Ставка в сети меняется в течение суток: в будни днём по европейскому времени мемпул набивается, ночью и в выходные очередь рассасывается, и цена падает в несколько раз. Я обычно смотрю mempool.space в субботу утром и жду, пока «low priority» опустится до 2–5 sat/vB.
Не гонитесь за минимумом до бесконечности: транзакция с ставкой 1 sat/vB может висеть сутки. Для консолидации это нормально — спешить некуда, деньги никуда не уходят. Если ошиблись и поставили слишком мало, включите RBF (replace-by-fee) и поднимите ставку, либо ускорьте через CPFP из кошелька, который поддерживает эту функцию.
lockunspent для ненужных.Не отправляйте консолидацию на адрес биржи. Во-первых, биржа засчитает это как депозит и может запросить объяснения по источнику средств. Во-вторых, вы потеряете контроль над монетами: обратно они придут одной суммой, но уже с биржевым адресом в истории.
После объединения у вас один большой выход. Это удобно, но приватность страдает: любой ваш платёж будет показывать контрагенту весь объём. Я держу два-три выхода разного размера — один «рабочий» на мелкие траты, второй для крупных переводов. Тогда при оплате видно только тот кусок, который вы реально тратите.
Второй момент: не смешивайте в одной транзакции монеты разного происхождения. Если на кошельке лежат биткоины с KYC-биржи и монеты, полученные от частного лица, объединение свяжет их навсегда в глазах аналитических сервисов. Для таких случаев держите отдельные кошельки.