Блокчейн
Data Availability: EIP-4844 и Danksharding
Rollups снизили стоимость транзакций в 100 раз, но для этого каждая нода Ethereum должна скачать все данные каждого rollup. При 3 blobs на блок это 384 KB каждые 12 секунд - терпимо. Но дорожная карта предполагает 128 blobs и 16 MB на блок. Если каждая нода скачивает 16 MB каждые 12 секунд - для ноды нужен дата-центр, и децентрализация исчезает. Как проверить, что данные доступны, не скачивая их целиком? Ответ объединяет теорию информации 1960-х годов, криптографию на эллиптических кривых и P2P-сети: Data Availability Sampling позволяет мобильному телефону за 38 KB трафика убедиться в доступности 16 MB данных с вероятностью 99.9999999999999999999999%.
- **EIP-4844** (Dencun, март 2024) ввёл blob transactions - стоимость L2 транзакций на Arbitrum, Optimism и Base упала в 10-100 раз за один день, с $0.20 до $0.001 за перевод
- **Celestia** - первый блокчейн, спроектированный исключительно как DA-слой (mainnet октябрь 2023). Rollups могут публиковать данные на Celestia вместо Ethereum, жертвуя security assumptions ради экономии
- **Full Danksharding** обещает 8-16 MB данных на блок (~100,000 TPS для L2 суммарно) - это превышает пиковую пропускную способность Visa, сохраняя децентрализацию через DAS
Предварительные знания
EIP-4844: Blob Transactions и Proto-Danksharding
До марта 2024 года rollups публиковали данные транзакций в **calldata** - поле, которое хранится в блокчейне навечно и за каждый байт которого платится gas. Rollup-данные составляли до **80% calldata** на Ethereum, при этом они нужны лишь **временно** - достаточно, чтобы кто-то мог проверить корректность и оспорить батч. Хранить их вечно - расточительство. EIP-4844 (Proto-Danksharding), активированный в хардфорке Dencun 13 марта 2024, радикально изменил эту модель: он ввёл новый тип транзакций (type 3) с прикреплёнными **blobs** - большими порциями данных, которые живут ~18 дней и затем удаляются.
Каждый blob - это вектор из **4096 field elements** (элементов конечного поля BLS12-381), каждый по 32 байта. Суммарно: 4096 × 32 = **131,072 байт ≈ 128 KB**. На каждый blob создаётся **KZG commitment** - криптографическое обязательство, связывающее данные с полиномом. В блоке хранится только **versioned_hash** - хэш KZG commitment (32 байта), а сами данные передаются в отдельном **sidecar** через P2P-сеть. Это принципиальное отличие от calldata: консенсус-слой видит commitment, а данные доступны, но не являются частью execution payload.
Зачем отдельный gas market? EIP-4844 ввёл **blob base fee** - аналог EIP-1559, но только для blobs. Target: 3 blobs/block, maximum: 6 blobs/block. Если количество blobs в блоке превышает target - blob base fee растёт экспоненциально. Если ниже - падает. Это **полностью независимый** от execution gas рынок. В периоды низкой нагрузки blob gas price падает до **1 wei** (минимум по протоколу), делая публикацию данных почти бесплатной.
Blob pruning - ещё одно ключевое свойство. Данные блоба хранятся в сети **~4096 эпох ≈ 18.2 дней**. После этого consensus-ноды **удаляют** blobs, освобождая место. За 18 дней любой заинтересованный участник (rollup verifier, fraud proof challenger) успевает скачать данные и при необходимости подать оспаривание. Вечное хранение не требуется - если данные были доступны в момент публикации, безопасность обеспечена. Архивные ноды и специализированные сервисы (EthStorage, Portal Network) могут хранить исторические blobs, но это не обязанность протокола.
**Эффект EIP-4844 в цифрах.** В первый день после Dencun стоимость транзакций на Arbitrum, Optimism и Base упала в **10-100 раз**. Перевод USDC на Base: с $0.20 до $0.001. Swap на Uniswap (Arbitrum): с $0.50 до $0.01. Суммарная экономия для пользователей L2 за первый месяц - десятки миллионов долларов. При этом безопасность не снизилась ни на йоту: KZG commitments гарантируют, что данные в blob соответствуют заявленным.
Почему blob данные хранятся ~18 дней, а не навечно, как calldata?
Data Availability Sampling: проверка без скачивания
EIP-4844 - это **Proto-Danksharding**, первый шаг. Target: 3 blobs × 128 KB = **384 KB на блок**. Full Danksharding планирует **64-128 blobs**, то есть **8-16 MB на блок**. Но возникает проблема: если блок содержит 16 MB данных, каждая нода должна скачать все 16 MB для верификации. Это убивает децентрализацию - обычный пользователь с домашним интернетом не сможет быть full node. Как масштабировать данные, **не заставляя каждую ноду скачивать всё**?
Ответ: **Data Availability Sampling (DAS)**. Идея революционная: вместо скачивания всех данных, light node запрашивает лишь **несколько случайных маленьких кусков** (samples). Если все запрошенные куски доступны - нода делает вывод, что **с высокой вероятностью все данные доступны**. Это фундаментально отличается от текущей модели, где full node должна скачать 100% данных.
Каждый sample верифицируется через **KZG proof**. Нода запрашивает конкретную позицию в blob (например, «элемент #1337 из blob #5»). Proposer или P2P-сеть отвечает парой (value, proof). Нода проверяет proof за O(1) - без знания остальных данных. Это возможно благодаря свойству KZG commitments: можно доказать значение полинома в точке, имея только commitment. Ложный proof не может пройти проверку - это гарантирует binding свойство KZG.
Заметьте критическую проблему в последнем примере: если злоумышленник скрыл всего **1% данных**, 75 random samples с вероятностью ~47% не обнаружат скрытие. А 1% от blob - это **40 field elements**. Этого достаточно, чтобы скрыть критическую транзакцию (например, перевод 100 ETH). Наивный DAS не защищает от «умного» скрытия малой доли данных. Для решения нужен **erasure coding** - следующая концепция.
**DAS vs полная загрузка: bandwidth.** При full danksharding (128 blobs × 128 KB = 16 MB/block) full node должна скачать 16 MB каждые 12 секунд = **~10.7 Mbps** минимум. С DAS, light node запрашивает ~75 samples × ~512 байт = **~38 KB** на блок. Разница: **400x**. Это позволяет запускать верифицирующую ноду даже на мобильном телефоне - ключевой элемент децентрализации.
В чём ключевое ограничение наивного DAS (без erasure coding)?
Erasure Coding: Reed-Solomon для блокчейна
**Erasure coding** (помехоустойчивое кодирование) - техника из теории информации, изобретённая в 1960 году Ирвингом Ридом и Густавом Соломоном. Основная идея: к исходным данным добавляется **избыточность**, позволяющая восстановить оригинал даже при потере части. CD-ROM, RAID, QR-коды, спутниковая связь - все используют erasure coding. В контексте Danksharding erasure coding решает критическую проблему наивного DAS: превращает скрытие даже 1 байта в необходимость скрыть **≥50% расширенных данных**.
Reed-Solomon код работает в **конечном поле** (finite field). Для Danksharding используется поле BLS12-381 (то же, что и для KZG). Blob из 4096 элементов - это полином степени 4095. Расширение 2x даёт 8192 элемента. По свойству полиномиальной интерполяции: полином степени n однозначно определяется **любыми n+1 точками**. Значит, из 8192 расширенных элементов достаточно **любых 4096** для полного восстановления - можно потерять до **50% данных** без потери информации.
Как это связано с KZG? Каждый blob уже представлен как полином через KZG commitment. Reed-Solomon расширение - это буквально **вычисление того же полинома в дополнительных точках**. KZG commitment для расширенной части не нужен отдельный - тот же commitment покрывает все точки полинома. Proof для любого sample (оригинального или расширенного) верифицируется через один и тот же KZG commitment. Это удобное совпадение: структура, нужная для commitment scheme, идеально подходит для erasure coding.
Для full Danksharding планируется **2D erasure coding** - расширение в двух измерениях. Blobs в блоке раскладываются в **матрицу** (строки × столбцы). Каждая строка расширяется Reed-Solomon в 2x, затем каждый столбец расширяется в 2x. Результат: из матрицы k×k получается **2k × 2k**. Преимущество 2D: для восстановления достаточно скачать **любые 50% данных в каждой строке ИЛИ столбце**, что делает распределённый sampling эффективнее. Каждая нода может специализироваться на своих строках/столбцах.
Почему erasure coding (расширение данных в 2x) критически важен для DAS?
Full Danksharding и альтернативные DA-слои
**Full Danksharding** - конечная цель Ethereum DA roadmap. Вместо 6 blobs (Proto-Danksharding) планируется **64-128 blobs на блок**, что даёт **8-16 MB данных каждые 12 секунд**. При текущем сжатии rollup-транзакции в ~16 байт это означает **500,000-1,000,000 транзакций на блок**, или **~100,000 TPS** суммарно для всех L2. Для сравнения: Visa пиково обрабатывает ~65,000 TPS. Ethereum с Danksharding **превысит** пропускную способность глобальной платёжной системы.
**PeerDAS (EIP-7594)** - промежуточный шаг между Proto-Danksharding и Full Danksharding. Вместо того чтобы каждая нода скачивала все blobs, P2P-сеть делится на **subnets** (подсети). Каждая нода подписывается на 2-4 subnet и скачивает только blobs, назначенные этим subnets. Для верификации остальных blobs используется DAS - запрос random samples у peers из других subnets. **Custody requirement**: нода обязана хранить и обслуживать запросы samples для своих subnets. Это распределяет нагрузку по сети: ни одна нода не скачивает 100% данных, но коллективно сеть хранит всё.
Ethereum - не единственный проект, работающий над DA. **Modular blockchain thesis** предполагает разделение функций: execution (L2 rollups), consensus (L1), data availability (специализированный DA-слой). Несколько проектов построили **альтернативные DA-слои**, предлагая rollups выбор: публиковать данные на Ethereum (максимальная безопасность) или на внешнем DA-слое (дешевле, но с другой моделью доверия).
| DA-слой | Модель | Пропускная способность | Безопасность | Стоимость |
|---|---|---|---|---|
| Ethereum (EIP-4844) | Blobs + KZG, pruning ~18 дней | ~384 KB/block (target) | Ethereum consensus (полная) | Blob gas market, ~0.001/tx |
| Ethereum (Full Danksharding) | 2D erasure coding + DAS | 8-16 MB/block | Ethereum consensus + DAS | < 0.0001/tx (прогноз) |
| Celestia | DAS + Namespaced Merkle Trees | ~2 MB/block (8 MB target) | Собственный Tendermint consensus, ~100 валидаторов | ~0.001/tx |
| EigenDA | Restaked ETH validators | 10 MB/s+ | Ethereum economic security через restaking | ~0.0005/tx |
| Avail | KZG + DAS (дизайн близок к Ethereum) | ~2-4 MB/block | Собственный GRANDPA/BABE consensus | ~0.001/tx |
Ключевой trade-off: **Ethereum DA** (blobs) даёт максимальную безопасность, потому что данные защищены полным Ethereum consensus (~1M validators, ~60B staked). Альтернативные DA-слои (Celestia, EigenDA, Avail) дешевле и имеют бо́льшую пропускную способность **сегодня**, но полагаются на собственный набор валидаторов или restaking. Rollup, использующий Celestia для DA вместо Ethereum blobs, технически становится **validium** - его безопасность зависит не только от Ethereum, но и от честности DA-слоя. Для финансовых приложений (DeFi, bridges) это критично; для social apps или gaming - приемлемый компромисс.
Итоги
- **EIP-4844 (Proto-Danksharding)** ввёл blob transactions (type 3): до 6 blobs × 128 KB на блок, отдельный blob gas market (EIP-1559 для blobs), KZG commitments для верификации, автоматическое удаление через ~18 дней. Результат - снижение стоимости L2 в 10-100 раз
- **Data Availability Sampling (DAS)** позволяет light node проверить доступность данных, скачав лишь ~75 random samples вместо всего объёма. KZG proofs гарантируют подлинность каждого sample. Но наивный DAS не обнаруживает скрытие малой доли данных
- **Erasure coding (Reed-Solomon)** решает эту проблему: данные расширяются в 2x через полиномиальную интерполяцию. Скрытие хотя бы 1 элемента требует скрыть ≥50% расширенных данных - а 50% DAS обнаруживает с вероятностью 1 - 2^(-75)
- **Full Danksharding** (64-128 blobs, 2D erasure coding, PeerDAS) - финальная цель: 8-16 MB данных на блок при сохранении децентрализации. Альтернативные DA-слои (Celestia, EigenDA, Avail) доступны уже сегодня, но с другими security assumptions
- Те самые 16 MB на блок, которые убили бы децентрализацию при полной загрузке каждой нодой, через DAS + erasure coding проверяются за 38 KB трафика - мобильный телефон становится полноценным верификатором блокчейна с пропускной способностью выше Visa
Связанные темы
Data Availability - ключевой элемент масштабирования Ethereum, связывающий криптографию (KZG), L2 rollups и долгосрочную дорожную карту:
- Rollups: идея масштабирования — Rollups - основные потребители DA: публикуют сжатые данные транзакций в blobs. Понимание архитектуры rollups необходимо для осознания, зачем нужен DA-слой
- KZG Commitments — KZG - криптографический фундамент blob transactions и DAS. Polynomial commitments позволяют доказать значение в точке без раскрытия полинома, что делает sampling верифицируемым
- Ethereum Roadmap — Danksharding - центральная часть «The Surge» в Ethereum roadmap. PBS, single-slot finality и statelessness - сопутствующие изменения, необходимые для full Danksharding
- ZK-Rollups — ZK-rollups используют validity proofs и могут работать в validium-режиме (off-chain DA). Выбор DA-слоя - ключевой архитектурный trade-off для каждого ZK-rollup
Вопросы для размышления
- Если erasure coding расширяет данные в 2x, значит суммарный bandwidth сети растёт вдвое. Это «потраченная» пропускная способность или инвестиция? При каком количестве нод DAS окупает накладные расходы erasure coding?
- Celestia предлагает DA дешевле и быстрее, чем Ethereum blobs, уже сегодня. Почему большинство крупных rollups (Arbitrum, Optimism, Base) продолжают использовать Ethereum DA? Есть ли порог, при котором экономия перевесит разницу в security assumptions?
- Blob pruning (~18 дней) означает, что исторические данные rollup-транзакций исчезают из протокола. Как это влияет на возможность новых нод синхронизировать full state rollup? Кто несёт ответственность за долгосрочное хранение?