Что такое вес блока и чем он отличается от размера блока?

Читая о BIP141, я столкнулся со следующими вариантами:

Block creation options:
-blockmaxweight=<n> Set maximum BIP141 block weight (default: 3000000)
-blockmaxsize=<n>   Set maximum block size in bytes (default: 750000)

Что такое вес блока? Это целочисленное представление размера?

Ответы (2)

Вес блока определяется в самом BIP 141 :

Вес блока определяется как Базовый размер * 3 + Общий размер. (обоснование[3])

Базовый размер — это размер блока в байтах с исходной сериализацией транзакции без каких-либо данных, связанных со свидетелем, как видно на не обновленном узле.

Общий размер — это размер блока в байтах с транзакциями, сериализованными, как описано в BIP144, включая базовые данные и данные свидетеля.

Приведенное обоснование:

Обоснование использования одного составного ограничения вместо двух отдельных ограничений, таких как 1 МБ базовых данных и 3 МБ данных-свидетелей: использование двух отдельных ограничений сделало бы майнинг и оценку платы практически невозможными. Майнерам нужно будет решить сложную задачу нелинейной оптимизации, чтобы найти набор транзакций, которые максимизируют комиссию с учетом обоих ограничений, а кошельки не смогут знать, сколько платить, поскольку это зависит от того, какое из двух условий больше всего ограничено. тайм-майнеры пытаются создавать блоки со своими транзакциями. Еще одна проблема с таким подходом — халявная загрузка. Как только набор транзакций достигает ограничения в 1 МБ базовых данных, к свидетелю можно добавить до 3 МБ дополнительных данных, лишь минимально увеличив комиссию. В этом случае предельные затраты на дополнительное пространство для свидетелей фактически становятся нулевыми.

так что это понятие определяется BIP141, не связанным с ядром биткойна.
Да, это то, на что это похоже.

Это трюк, который увеличивает размер блока, не нарушая обратной совместимости с узлами, не поддерживающими Segwit. Я нашел эту статью Джимми Сонга более полезной, чем попытка понять BIP.

Блоки Segwit ограничены так называемым весом блока. Вес блока — это новая концепция, представленная в Segwit, и она рассчитывается для каждой транзакции. Каждая транзакция имеет «вес», который определяется следующим образом:

(размер TX с удаленными данными свидетеля) * 3 + (размер TX)

Транзакции без Segwit не имеют данных свидетелей, поэтому вес транзакции без Segwit ровно в 4 раза больше ее размера. Транзакции Segwit имеют некоторые данные-свидетели, поэтому вес будет меньше, чем в 4 раза больше размера. Примечание. Транзакции Segwit передаются на устаревшие узлы без данных-свидетелей, поэтому эта формула всегда приводит к блокам, передаваемым на устаревшие узлы, размер которых меньше или равен 1 000 000 байт.

Если вы заполните блок транзакциями, не относящимися к Segwit (0 байт данных-свидетелей), количество единиц веса (WU) будет рассчитываться как

(1,000,000 B - 0 B) * 3 + 1,000,000 B = 4,000,000 WU

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

По состоянию на 21 января 2018 года было добыто несколько блоков размером более 1 МБ, таких как этот .