Block Weight — способ, которым Bitcoin измеряет занятую ёмкость блока, то есть группы транзакций, добавляемой в общую историю. Разные части данных учитываются по-разному. У веса есть фиксированный верхний предел; он не задаёт число платежей или стоимость переводимых биткоинов.
Анна отправляет Bitcoin, но в следующем блоке её платежа нет. Само по себе это не означает, что деньги исчезли. Неподтверждённая транзакция может ждать в Mempool, локальной очереди отдельного узла. Узел — программа, которая проверяет транзакции и блоки и обменивается данными с другими участниками сети. Майнер выбирает транзакции для блока ограниченной ёмкости и может создать блок поменьше. Комиссии служат стимулом, а не приказом включить определённый платёж. Block Weight объясняет одно ограничение этого выбора, а не все причины задержки. [1] [7]
Верхняя граница — 4 000 000 WU включительно. WU означает единицу веса. Full Node, узел, самостоятельно проверяющий правила Bitcoin, отвергнет блок выше этого предела. Его не спасут высокие комиссии или правильный Proof of Work — вычислительное доказательство работы, необходимое для добычи блока. Необходимо выполнить оба условия: найти доказательство и составить корректный блок. Поэтому ёмкость не определяется одним желанием майнера. [1] [3] [4]
Байт — обычная единица объёма данных. SegWit отделил часть данных, доказывающих право потратить монеты, включая подписи. Эта часть называется witness. Байт основных данных добавляет 4 WU, а дополнительный байт полной записи с witness — 1 WU. Во вторую группу входят и вспомогательные поля marker и flag. Так сохраняется основная структура транзакций и появляется место для проверочных данных, при этом байты учитываются с разным весом. [1] [2]
Подпись подтверждает право отправителя потратить определённые монеты. Условия расходования описывает небольшая программа — скрипт. Меньший вклад witness в вес не разрешает проверяющему узлу игнорировать необходимые подписи или условия скрипта. Данные также остаются в полной записи. Это правило учёта ёмкости, а не утверждение, что работа процессора, сетевой трафик и место на диске уменьшаются в той же пропорции. [1] [4]
Сериализация — запись блока в виде точной последовательности байтов, которой обмениваются компьютеры. Обозначим размер без witness буквой B, а полный размер — T. BIP 141 использует W = 3 × B + T. Основные данные уже входят в T и потому всего учитываются четырежды. Данные, добавленные записью witness, учитываются один раз. Формула относится ко всему блоку, а не только к обычным платежам в нём. [1] [8]
Представим B = 500000 и T = 2500000 байтов. Получим W = 4000000 WU. Другое сочетание данных может иметь B = 750000 и T = 1750000 байтов и снова дать W = 4000000 WU. Это примеры расчёта, а не измеренные блоки. Вес одинаков, но во втором случае передаётся меньше байтов. Поэтому утверждение «полный блок всегда имеет размер 4 MB» неверно. Число транзакций в полном блоке тоже не фиксировано. [1]
Блок — не просто набор платежей пользователей. У него есть заголовок размером 80 байтов, содержащий, среди прочего, ссылку на предыдущий блок и сводку транзакций. Затем идёт их количество, записанное с помощью CompactSize — кодирования целого числа переменной длины. Первой является Coinbase Transaction, особая транзакция награды майнеру; здесь название не обозначает биржу. Все эти части учитываются. Сумма весов остальных транзакций ещё не даёт веса всего блока. [5] [7] [8]
Кошелёк — приложение или устройство для получения и отправки биткоинов. Обычно он использует виртуальный размер транзакции в единицах vByte. Это вес всей транзакции, поделённый на 4 и округлённый вверх. Так можно сравнивать комиссии за занятое место в блоке. Сумма таких округлённых размеров не даёт точного веса блока: единица другая, округления отдельные, а собственная структура блока отсутствует. Большая денежная сумма сама по себе не означает большой объём данных. [1] [8]
Вес не описывает всей работы узла. Соответствующие правила предусматривают также предел 80 000 взвешенных единиц стоимости операций проверки подписей. Это не простой подсчёт всех подписей в блоке. Tapscript, язык скриптов, введённый вместе с Taproot, имеет отдельный бюджет для каждого входа — части транзакции, расходующей ранее полученные монеты; его операции подписи не учитываются в этом более старом общем лимите блока. BIP 342 описывает другое ограничение. Поэтому соблюдение веса не разрешает произвольно сложную проверку. [1] [3] [9]
Обозреватель блоков — приложение для поиска транзакций и блоков определённой сети. В Bitcoin Core v29.0 команда getblock возвращает, среди прочего, size, strippedsize и weight: полный размер в байтах, размер без witness и вес. Рядом может встретиться chainwork. Это накопленная вычислительная работа цепочки, а не её вес данных. Для повседневного использования важно различать ёмкость и цену: Block Weight ограничивает место в блоке, а реальная комиссия зависит от размера транзакции и выбранной ставки. Ни одна из этих величин сама по себе не обещает времени подтверждения. [6]
Для полной картины прочитайте эту статью вместе с vByte, Witness Data, SegWit, Война за размер блока, Bitcoin, Full Node. На эту статью также ссылаются Signet, vByte, Witness Data, Ordinals Inscriptions.