Доступность данных
Последнее обновление страницы: 23 февраля 2026 г.
«Не доверяй, проверяй» — довольно распространенный принцип Ethereum. Идея состоит в том, что ваш узел в любом случае проверяет правильность получаемой информации, выполняя все транзакции в блоках, которые он получает от узлов, чтобы гарантировать, что предлагаемые изменения точно соответствуют изменениям, вычисленным узлом независимо. Это означает, что узлам не нужно верить в честность отправителей блока. Это невозможно при отсутствии данных.
Доступность данных означает уверенность пользователя в том, что данные, необходимые для проверки блока, действительно доступны всем участникам сети. Для полных узлов на уровне 1 Ethereum это относительно просто: полный узел загружает копию всех данных в каждом блоке — данные должны быть доступны, чтобы их можно было загрузить. Блок с отсутствующими данными будет отброшен, а не добавлен в блокчейн. Это «ончейн-доступность данных», и это особенность монолитных блокчейнов. Полные узлы невозможно обманом заставить принять недействительные транзакции, поскольку они загружают и выполняют каждую транзакцию самостоятельно. Однако для модульных блокчейнов, накопительных пакетов уровня 2 и легких клиентов ситуация с доступностью данных более сложна и требует более сложных процедур проверки.
Предварительные условия
Вы должны хорошо понимать основы блокчейна, особенно механизмы консенсуса. Эта страница также предполагает, что читатель знаком с блоками, транзакциями, узлами, решениями для масштабирования и другими соответствующими темами.
Проблема доступности данных
Проблема доступности данных заключается в необходимости доказать всей сети, что обобщенная форма некоторых данных транзакций, добавляемых в блокчейн, действительно представляет собой набор действительных транзакций, но при этом не требуется, чтобы все узлы загружали все данные. Полные данные транзакций необходимы для независимой проверки блоков, но требование ко всем узлам загружать все данные транзакций является препятствием для масштабирования. Решения проблемы доступности данных призваны гарантировать, что полные данные транзакций были доступны для проверки участникам сети, которые не загружают и не хранят данные для себя.
Легкие узлы и ролл-апы уровня 2 являются важными примерами участников сети, которым требуются надежные гарантии доступности данных, но которые не могут самостоятельно загружать и обрабатывать данные транзакций. Избегание загрузки данных транзакций — вот что делает легкие узлы легкими и позволяет объединениям быть эффективными решениями для масштабирования.
Доступность данных также является критически важной проблемой для будущих «несохраняющих состояние» клиентов Ethereum, которым не нужно загружать и хранить данные о состоянии для проверки блоков. Несохраняющие состояние клиенты все равно должны быть уверены, что данные доступны где-то и что они были правильно обработаны.
Решения для обеспечения доступности данных
Сэмплирование доступности данных (DAS)
Выборка доступности данных (DAS) — это способ проверки доступности данных в сети без слишком большой нагрузки на какой-либо отдельный узел. Каждый узел (включая узлы, не участвующие в стейкинге) загружает небольшое, случайно выбранное подмножество общих данных. Успешная загрузка выборки с высокой степенью уверенности подтверждает доступность всех данных. Это основано на кодировании со стиранием данных, которое расширяет заданный набор данных избыточной информацией (это делается путем подбора к данным функции, известной как полином, и вычисления этого полинома в дополнительных точках). Это позволяет при необходимости восстановить исходные данные из избыточных данных. Следствием такого создания данных является то, что если любая часть исходных данных недоступна, половина расширенных данных также будет отсутствовать! Количество выборок данных, загружаемых каждым узлом, можно настроить так, чтобы было чрезвычайно вероятно, что хотя бы один из фрагментов данных, выбранных каждым клиентом, будет отсутствовать, если в действительности доступно менее половины данных.
DAS будет использоваться, чтобы операторы ролл-апов обеспечивали доступность данных своих транзакций после внедрения полного Danksharding. Узлы Ethereum будут случайным образом выбирать данные транзакций, предоставленные в виде больших двоичных объектов, используя описанную выше схему избыточности, чтобы гарантировать существование всех данных. Тот же метод можно также использовать, чтобы гарантировать, что производители блоков делают все свои данные доступными для защиты легких клиентов. Аналогично, при разделении предлагающего и сборщика только сборщик блока должен будет обработать весь блок, а другие валидаторы будут выполнять проверку с помощью сэмплирования доступности данных.
Комитеты по доступности данных
Комитеты доступности данных (DAC) — это доверенные стороны, которые обеспечивают или подтверждают доступность данных. DAC могут использоваться вместо DAS или в сочетании с ним (opens in a new tab). Гарантии безопасности, предоставляемые комитетам, зависят от конкретной структуры. Например, Ethereum использует случайно выбранные подмножества валидаторов для подтверждения доступности данных для легких узлов.
DAC также используются некоторыми валидиумами. DAC — это доверенный набор узлов, который хранит копии данных в автономном режиме. DAC обязан предоставлять доступ данных в случае возникновения спора. Члены DAC также публикуют ончейн-аттестации, чтобы доказать, что указанные данные действительно доступны. Некоторые валидиумы заменяют DAC системой валидации «доказательство владения» (PoS). Здесь любой желающий может стать валидатором и хранить данные оффчейн. Однако они должны предоставить «связь», заложенную в смарт-контракте. В случае злонамеренного поведения, например, сокрытия данных валидатором, связь может быть сокращена. Комитеты по доступности данных на основе доказательства владенния значительно более безопасны, чем обычные DAC, поскольку они стимулируют честное поведение напрямую.
Доступность данных и легкие узлы
Легкие узлы должны проверять правильность заголовков блоков, которые они получают, не загружая данные блока. Платой за эту легкость является невозможность независимо проверять заголовки блоков путем локального повторного выполнения транзакций, как это делают полные узлы.
Легкие узлы Ethereum доверяют случайным наборам из 512 валидаторов, которые были назначены в комитет синхронизации. Комитет синхронизации выступает как DAC, который с помощью криптографической подписи сигнализирует легким клиентам о том, что данные в заголовке верны. Каждый день комитет синхронизации обновляется. Каждый заголовок блока оповещает легкие узлы о том, какие валидаторы должны подписать следующий блок, поэтому их нельзя обманом заставить доверять злонамеренной группе, выдающей себя за настоящий комитет синхронизации.
Однако что произойдет, если злоумышленнику каким-то образом все-таки удастся передать вредоносный заголовок блока легким клиентам и убедить их, что он был подписан честным комитетом синхронизации? В этом случае злоумышленник может включить недействительные транзакции, и легкий клиент будет слепо их принимать, поскольку он не проверяет отдельно все изменения состояния, суммированные в заголовке блока. Чтобы защититься от этого, легкий клиент может использовать доказательства мошенничества.
Принцип работы этих доказательств мошенничества заключается в том, что полный узел, видя, что по сети распространяются слухи о недопустимом переходе состояния, может быстро сгенерировать небольшой фрагмент данных, демонстрирующий, что предлагаемый переход состояния не может возникнуть в результате заданного набора транзакций, и передать эти данные одноранговым узлам. Легкие узлы могут собирать эти доказательства мошенничества и использовать их для удаления заголовков плохих блоков, гарантируя, что они останутся в той же честной цепочке, что и полные узлы.
Процесс зависит от того, что полные узлы имеют доступ ко всем данным транзакций. Злоумышленник, который передает плохой заголовок блока, а также не предоставляет доступ к данным транзакции, сможет помешать полным узлам генерировать доказательства мошенничества. Полные узлы могли бы подать сигнал предупреждения о плохом блоке, но они не смогли бы подкрепить свое предупреждение доказательством, потому что у них нет доступа к этим данным!
Решением этой проблемы доступности данных является DAS. Легкие узлы загружают очень небольшие случайные фрагменты полных данных о состоянии и используют образцы для проверки доступности полного набора данных. Фактическую вероятность неверного предположения о полной доступности данных после загрузки N случайных фрагментов можно рассчитать (для 100 фрагментов шанс составляет 10^-30 (opens in a new tab), т. е. это невероятно маловероятно).
Даже в этом сценарии атаки, которые удерживают всего несколько байтов, могут остаться незамеченными для клиентов, выполняющих случайные запросы данных. Стирающая кодировка исправляет это, восстанавливая небольшие недостающие фрагменты данных, которые можно использовать для проверки предполагаемых изменений состояния. Затем можно построить доказательство мошенничества с использованием реконструированных данных, предотвращая принятие легкими узлами неверных заголовков.
Примечание: DAS и доказательства мошенничества еще не реализованы для легких клиентов Ethereum с доказательством владения (proof-of-stake), но они есть в дорожной карте и, скорее всего, будут реализованы в форме доказательств на основе ZK-SNARK. Сегодняшние легкие клиенты полагаются на своего рода DAC: они проверяют личность комитета синхронизации, а затем доверяют полученным подписанным заголовкам блоков.
Доступность данных и ролл-апы уровня 2
Решения для масштабирования уровня 2, такие как , снижают стоимость транзакций и увеличивают пропускную способность Ethereum за счет обработки транзакций оффчейн. Транзакции ролл-апов сжимаются и публикуются в Ethereum пакетами. Пакеты представляют собой тысячи отдельных оффчейн-транзакций в рамках одной транзакции в Ethereum. Это уменьшает перегрузку на базовом уровне и снижает плату для пользователей.
Однако доверять «сводным» транзакциям, опубликованным в Ethereum, можно только в том случае, если предлагаемое изменение состояния может быть независимо проверено и подтверждено как результат применения всех отдельных оффчейн-транзакций. Если операторы ролл-апов не предоставляют данные транзакций для этой проверки, они могут отправить неверные данные в Ethereum.
Оптимистические ролл-апы публикуют сжатые данные транзакций в Ethereum и ожидают некоторое время (обычно 7 дней), чтобы независимые верификаторы могли проверить данные. Если кто-либо обнаружит проблему, он может создать доказательство мошенничества и использовать его для оспаривания ролл-апа. Это приведет к откату цепочки и пропуску недопустимого блока. Это возможно только при наличии данных. В настоящее время существует два способа, которыми оптимистические ролл-апы публикуют данные транзакций на уровень 1. Некоторые ролл-апы делают данные постоянно доступными как CALLDATA, которые постоянно хранятся ончейн. С внедрением EIP-4844 некоторые ролл-апы вместо этого публикуют данные своих транзакций в более дешевое blob-хранилище. Это не постоянное хранилище. Независимые верификаторы должны запрашивать blob-объекты и выдвигать свои оспаривания в течение ~18 дней, прежде чем данные будут удалены с уровня 1 Ethereum. Доступность данных гарантируется протоколом Ethereum только в течение этого короткого фиксированного окна. После этого ответственность за него переходят к другим субъектам экосистемы Ethereum. Любой узел может проверить доступность данных с помощью DAS, т. е. путем загрузки небольших случайных выборок blob-данных.
Ролл-апам с 0-знанием (ZK) не нужно публиковать данные транзакций, поскольку гарантируют правильность переходов состояния. Однако доступность данных по-прежнему остается проблемой, поскольку мы не можем гарантировать функциональность ролл-апа ZK (или взаимодействовать с ним) без доступа к данным о его состоянии. Например, пользователи не смогут узнать свои балансы, если оператор скрывает информацию о состоянии ролл-апа. Кроме того, они не могут выполнять обновления состояния, используя информацию, содержащуюся в недавно добавленном блоке.
Доступность данных в сравнении с возможностью их извлечения
Доступность данных отличается от возможности их извлечения. Доступность данных — это гарантия того, что полные узлы смогут получить доступ и проверить полный набор транзакций, связанных с конкретным блоком. Из этого не обязательно следует, что данные доступны навсегда.
Возможность извлечения данных — это способность узлов извлекать историческую информацию из блокчейна. Эти исторические данные не нужны для проверки новых блоков, они необходимы только для синхронизации полных узлов из исходного блока или обслуживания определенных исторических запросов.
Основной протокол Ethereum в первую очередь касается доступности данных, а не возможности их извлечения. Возможность извлечения данных может обеспечиваться небольшой группой архивных узлов, управляемых третьими лицами, или она может быть распределена по сети с использованием децентрализованного файлового хранилища, такого как Portal Network (opens in a new tab).
Дополнительные материалы
- WTF is Data Availability? (opens in a new tab)
- Что такое доступность данных? (opens in a new tab)
- Краткое руководство по проверкам доступности данных (opens in a new tab)
- Объяснение предложения по шардингу и DAS (opens in a new tab)
- Заметка о доступности данных и кодировании со стиранием (opens in a new tab)
- Комитеты по доступности данных. (opens in a new tab)
- Комитеты по доступности данных на основе доказательства владения (proof-of-stake). (opens in a new tab)
- Решения проблемы извлечения данных (opens in a new tab)
- Доступность данных, или: как ролл-апы научились не волноваться и полюбили Ethereum (opens in a new tab)
- EIP-7623: увеличение стоимости Calldata (opens in a new tab)