EIP-4844: блобы — дешёвые данные для роллапов
Роллапы обязаны публиковать свои данные на L1, чтобы кто угодно мог их проверить, — но как постоянная calldata это было разорительно дорого. Выведем блобы шаг за шагом: отдельная полоса для данных, коммитмент, чтобы её связать, отсечение через ~18 дней и собственный рынок комиссий.
- роллапы
- газ и EIP-1559
Ethereum масштабируется, выталкивая исполнение на роллапы (L2): они прогоняют тысячи транзакций офчейн и публикуют на L1 только результаты. Но роллап обязан опубликовать данные этих транзакций где-то публично, иначе никто не смог бы проверить его работу. Годами он публиковал эти данные как обычную calldata — и это единственное решение делало комиссии L2 болезненными и ограничивало, насколько дёшево вообще мог стать Ethereum. EIP-4844 («proto-danksharding») исправил это странно выглядящим новым объектом под названием блоб. Странным — пока вы его не построите: начните с проблемы calldata и исправляйте ровно то, что не так, шаг за шагом.
Почему роллапы обязаны публиковать данные — и почему calldata вредила
Роллап сжимает батч транзакций L2 и публикует его на L1. Он обязан опубликовать лежащие в основе данные, чтобы кто угодно — пользователь, оспаривающий, конкурирующий узел — мог восстановить состояние L2 и проверить (или опровергнуть) заявленный роллапом результат. Это доступность данных (data availability) Гарантия того, что данные за блоком или батчем действительно опубликованы, так что кто угодно может их скачать и независимо проверить или оспорить состояние. Отличается от хранения их вечно. : не «хранить их вечно», а «убедиться, что каждый может их получить». Очевидным местом для этого была calldata транзакции.
Три вещи вредят одновременно. Calldata стоит 16 газа за байт — дорого. Она хранится каждым полным узлом вечно — вы платите за постоянное хранение. И она делит тот же рынок газа, что и исполнение, так что загруженный L1 напрямую подскакивает стоимость роллапа, а данные роллапа конкурируют за то же место, что и транзакции всех остальных. Комиссии роллапов доминировала эта единственная строка расходов.
→ Шаг 2: дать данным собственную полосу.
Отдельная, невидимая для EVM полоса — связанная коммитментом
Добавляем новое место для данных, рядом с calldata, а не внутри неё: блоб — большой (~128 КБ) кусок, прикреплённый к новому типу транзакции (0x03) в «сайдкаре». Ключевое свойство: EVM не может прочитать содержимое блоба. Это не состояние, с которым оперируют контракты, — это просто данные, о публикации которых сеть договорилась. Так что блобы несут данные роллапа, не раздувая состояние, к которому обязан прикасаться EVM.
Но если EVM не может прочитать блоб, а (следующий шаг) узлы собираются его удалить, как кто-то потом докажет, что блок действительно включал правильные данные, а не мусор? Свяжите каждый блоб с помощью KZG commitment 48-байтовый криптографический коммитмент к блобу (рассматриваемому как полином). Он однозначно фиксирует содержимое блоба и позволяет кому угодно проверить конкретный кусок против него крошечным доказательством — без хранения всего блоба. : 48-байтового значения, помещённого в блок. EVM получает опкод BLOBHASH (версионированный хеш этого коммитмента) и прекомпайл поточечной проверки (point-evaluation), так что контракт роллапа может сверить конкретный кусок блоба с его коммитментом — вообще не храня блоб целиком.
- 1 байт версии — позволяет схеме коммитмента измениться позже
- 2 хеш KZG-коммитмента, связывающего блоб
- 3 отбросить его первый байт; байт версии занимает это место
→ Шаг 3: выбрасываем данные (намеренно).
Доступность, а не хранение: отсечение через ~18 дней
Вот прыжок, который делает это дешёвым. Узлы хранят сырые байты блоба только в течение окна — около 18 дней (4096 эпох) — затем удаляют их. Этого окна достаточно с запасом: достаточно долго, чтобы любой роллап, оспаривающий или пользователь скачали данные, и чтобы любое доказательство мошенничества или валидности успело разрешиться. После того как оно проходит, данные выполнили свою единственную задачу. Цепочка хранит крошечный коммитмент в истории вечно, но не 128 КБ за ним.
В этом весь концептуальный сдвиг: роллапам никогда не было нужно постоянное хранение, им была нужна временная доступность. Разделение этих двух вещей превращает «дорого навсегда» в «дёшево и одноразово».
→ Шаг 4: оцениваем их отдельно.
Отдельный рынок комиссий: blob-газ
Оцениваем блобы в собственной единице — blob-газ — с собственной базовой комиссией в стиле EIP-1559, полностью отдельной от исполнения. На Cancun каждый блок целился в 3 блоба и допускал до 6 (EIP-7691 поднял это до 6/9 в Pectra, а PeerDAS в Fusaka продолжает поднимать через BPO-форки); базовая комиссия блобов двигается вверх или вниз за блок к этой цели и сжигается, точно как базовая комиссия исполнения. Поток данных роллапа теперь повышает blob-базовую комиссию, не трогая цену газа вашего свопа, — а загруженный слой исполнения не делает блобы дороже. Два независимых сигнала перегрузки, две независимые цены.