Глоссарий / Майнинг и консенсус
Вес блока
- Что такое вес блока?
- Вес блока измеряет блок биткоина по шкале, где байт данных свидетеля стоит 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 единицы меньше места.