Обучающие материалы

Weight и virtual bytes в Bitcoin: как размер транзакции влияет на комиссию

Объясняем разницу между байтами, weight units и virtual bytes в Bitcoin, почему данные witness имеют другой вес и как размер влияет на оценку комиссии.

Weight и virtual bytes в Bitcoin: как размер транзакции влияет на комиссию

Короткий ответ: после SegWit Bitcoin измеряет транзакции не только обычными байтами. Weight units учитывают базовые данные и witness с разным весом, а virtual size, или vsize, переводит результат в условные виртуальные байты. Кошелёк обычно умножает выбранную ставку в sat/vB на vsize, поэтому две транзакции с одинаковой суммой могут требовать разную комиссию.

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

Что такое вес транзакции

Bitcoin определяет вес транзакции через её базовую сериализацию и полную сериализацию с witness. Формула BIP-141 записывается так: вес равен базовому размеру, умноженному на три, плюс полный размер. Иначе говоря, обычные данные учитываются сильнее, а witness получает скидку по весу. Эта система связана с лимитом блока по весу и применяется к транзакциям SegWit.

Base size – это размер транзакции без witness-данных. Total size включает данные, передаваемые с witness. Если транзакция не использует SegWit, witness-части нет, поэтому её vsize совпадает с размером в байтах. У SegWit-транзакции фактический файл может быть больше, чем число виртуальных байтов, по которым кошелёк считает ставку.

Virtual size определяется как вес, делённый на четыре и округлённый вверх до целого vbyte. Единицы weight называют weight units, или WU. Такое преобразование позволяет сопоставлять транзакции разных типов в одной шкале. Подробнее о выборе сетевой ставки и расчёте общего сбора рассказано в статье о sat/vB и комиссии Bitcoin.

Почему witness весит меньше

Witness содержит данные, необходимые для проверки условий расходования SegWit-выхода, например подписи и скриптовые элементы. При подсчёте веса базовые байты умножаются на четыре, а witness-байты прибавляются по одному. Это не означает, что подпись необязательна или проверяется с меньшей криптографической строгостью. Скидка относится к правилу учёта вместимости блока, а не к надёжности проверки.

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

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

Как размер превращается в комиссию

Ставка обычно выражается в сатоши на виртуальный байт. Если условная транзакция имеет 200 vB, ставка 5 sat/vB означает оценку 1000 сатоши. Пример иллюстрирует арифметику, а не текущую рекомендацию по ставке: состояние mempool быстро меняется, и необходимый тариф зависит от желаемого времени подтверждения.

Одинаковая сумма перевода не означает одинаковый vsize. Если кошелёк собирает UTXO из нескольких небольших поступлений, он может создать больше входов. Это увеличивает вес по сравнению с простой транзакцией, расходующей один крупный выход. На комиссии также сказываются адреса отправителя и получателя, количество выходов и наличие сдачи. В отдельной статье разобрано, почему Bitcoin-кошелёк создаёт адрес сдачи.

При сравнении оценок смотрите, считает ли кошелёк fee rate на vsize, и какой размер показывает для конкретной сборки. Не подставляйте общий размер из одного обозревателя в расчёт другого кошелька: интерфейс может показывать total size, virtual size или weight. При этом итоговая сумма комиссии зависит одновременно от ставки и размера.

Как читать данные в обозревателе

В карточке транзакции могут отображаться несколько показателей: размер в байтах, вес и vsize. Для SegWit-транзакции они описывают разные аспекты одной сериализованной операции. Если сравнивать две операции, сопоставляйте одинаковые единицы. Размер файла отвечает на вопрос о переданных данных, вес связан с ограничением блока, а vsize удобен для расчёта комиссии.

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

Частые ошибки в оценке размера

  • Путать размер транзакции в байтах с vsize, особенно для SegWit.
  • Считать, что одна монета означает один вход. Входы соответствуют UTXO, а не числу BTC.
  • Считать комиссию фиксированным процентом от суммы. Обычно расчёт зависит от ставки и размера.
  • Использовать вчерашнюю sat/vB как гарантию быстрого подтверждения сейчас.

Если комиссия кажется высокой, можно сначала посмотреть входы, выбранную срочность и состояние неподтверждённых операций, а не только сумму платежа. Базовое устройство транзакции и UTXO объясняет обзор Bitcoin; после изменения транзакции её новый размер и комиссия будут другими.

Итог

Weight учитывает базовые данные транзакции и witness с разным коэффициентом, а vsize переводит вес в виртуальные байты, округлённые вверх. Комиссия чаще всего получается умножением vsize на ставку sat/vB. Число входов, формат адресов и структура скриптов меняют размер, поэтому ориентируйтесь на расчёт конкретного кошелька и сравнивайте одинаковые единицы измерения.