Перейти к содержимому
buybitcoinsmart

Глоссарий / Майнинг и консенсус

Вес блока

Что такое вес блока?
Вес блока измеряет блок биткоина по шкале, где байт данных свидетеля стоит 1 единицу, а любой другой байт стоит 4, с ограничением в 4 000 000 единиц.

Определено в BIP-141.

Вес существует потому, что байты стоят узлу не одинаково. Данные подписи можно отбросить, когда транзакция уже погружена в блокчейн, поэтому BIP141 оценил их в четверть стоимости всего остального и установил лимит в 4 000 000 единиц на блок. Ваш вывод конкурирует за этот лимит, и именно из-за скидки отправка с современного адреса стоит меньше, чем отправка со старого.

Как это работает

Формула в BIP141 гласит: вес равен базовому размеру, умноженному на три, плюс общий размер. Базовый размер является размером блока, сериализованного по-старому, без свидетелей; общий размер является размером полной сериализации. Записанное наоборот, то же правило говорит о четырех единицах на каждый байт, не являющийся байтом свидетеля, и одной единице на каждый байт свидетеля, и именно эту версию стоит запомнить.

Разделите вес на четыре и округлите вверх, и вы получите виртуальные байты, единицу, которую использует каждый оценщик комиссий и каждый кошелек. Платеж, тратящий два входа и создающий два выхода, все из которых native SegWit, составляет примерно 208 виртуальных байт, или около 832 единиц веса. Заполните блок только такими платежами, и в него войдет почти 4800. Тот же платеж, построенный из адресов старого формата pay to public key hash, занимает около 374 байт, а весит 1496 единиц, потому что ничто в нем не получает скидку, так что в блок войдет только около 2670.

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

Два обстоятельства сбивают людей с толку. Вес считается для каждой транзакции отдельно и затем суммируется, поэтому вес блока есть сумма весов его транзакций плюс его заголовок и счетчики, и майнер, собирающий блок, решает задачу о рюкзаке относительно лимита в 4 000 000 единиц, а не относительно числа байт. И вес не связан со стоимостью: транзакция весом 900 единиц, переводящая 40 биткоина, и транзакция, переводящая 40 000 сатоши, платят одинаковую комиссию, потому что сеть берет плату за место, никогда за сумму.

Где это видно

Каждый обозреватель блоков показывает вес рядом с размером, а RPC-метод getblock в Bitcoin Core возвращает weight, size и strippedsize как три отдельных поля. Визуализации мемпула тоже строятся на нем: полосы, показывающие, что ждет подтверждения, складываются по ставке комиссии в sat/vB, где в знаменателе стоит вес, деленный на четыре.

Вес также является тем, за что биржа на самом деле берет с вас в комиссии за вывод. Платформа, объявляющая фиксированную комиссию в биткоине, усредняет по весу транзакций, которые рассчитывает построить, и получает прибыль, когда мемпул спокоен, и терпит убыток, когда он загружен. Платформа, которая объединяет выводы в пакеты, отправляя десятки клиентских выводов как выходы одной транзакции, платит за один набор входов вместо десятков, и поэтому биржи, объединяющие выводы в пакеты, могут позволить себе гораздо более низкие комиссии, чем те, что транслируют каждый вывод отдельно.

Вес блока vs виртуальный байт

Вес блока является исходным измерением, а виртуальный байт является тем же измерением, деленное на четыре. Оба описывают одни и те же данные, различается только шкала. Вес является единицей, записанной в правила консенсуса, поэтому цифра 4 000 000 появляется в коде как вес. Виртуальные байты являются единицей, записанной в интерфейсы кошельков, потому что ставку в 8 sat/vB проще держать в голове, чем 2 sat за единицу веса. Когда кошелек говорит, что ваша транзакция занимает 141 vbytes, в блоке, куда она попадет, остается на 564 единицы меньше места.

Не путать с

Часто задаваемые вопросы

Как перевести вес блока в виртуальные байты?

Разделите вес на четыре и округлите вверх. Транзакция весом 560 единиц веса составляет 140 виртуальных байт, а полный блок весом 4 000 000 единиц веса составляет 1 000 000 виртуальных байт.

Обходится ли большая сумма в биткоине в более высокую комиссию?

Нет. Комиссия взимается за единицу веса блока, а не за количество переведенных биткоинов. Транзакция, отправляющая долю биткоина, и транзакция, отправляющая пятьдесят биткоинов, могут весить одинаково и платить одинаково, если у них одинаковое число входов и выходов.

Читайте далее

Связанные термины

Еще в разделе «Майнинг и консенсус»

Читать эту страницу на английском