Доступность данных
«Не доверяй, проверяй» — распространенное правило в Эфириуме. Идея заключается в том, что ваш узел может независимо проверить правильность получаемой информации, выполнив все транзакции в блоках, полученных от пиров, чтобы убедиться, что предложенные изменения точно совпадают с теми, которые узел вычислил самостоятельно. Это означает, что узлам не нужно доверять отправителям блока и полагаться на их честность. Это невозможно, если данные отсутствуют.
Доступность данных означает уверенность пользователя в том, что данные, необходимые для проверки блока, действительно доступны всем участникам сети. Для полных узлов на Эфириуме уровня 1 (l1) это относительно просто; полный узел загружает копию всех данных в каждом блоке — данные должны быть доступны, чтобы загрузка была возможна. Блок с отсутствующими данными будет отброшен, а не добавлен в блокчейн. Это «доступность данных ончейн», и она является особенностью монолитных блокчейнов. Полные узлы нельзя обмануть и заставить принять недействительные транзакции, потому что они загружают и выполняют каждую транзакцию самостоятельно. Однако для модульных блокчейнов, роллапов уровня 2 (l2) и легких клиентов ситуация с доступностью данных сложнее и требует более изощренных процедур проверки.
Предварительные требования
Вы должны хорошо понимать основы блокчейна, особенно механизмы консенсуса. На этой странице также предполагается, что читатель знаком с блоками, транзакциями, узлами, решениями для масштабирования и другими соответствующими темами.
Проблема доступности данных
Проблема доступности данных заключается в необходимости доказать всей сети, что обобщенная форма некоторых данных транзакций, добавляемых в блокчейн, действительно представляет собой набор действительных транзакций, но сделать это без необходимости загрузки всех данных всеми узлами. Полные данные транзакций необходимы для независимой проверки блоков, но требование ко всем узлам загружать все данные транзакций является препятствием для масштабирования. Решения проблемы доступности данных направлены на предоставление достаточных гарантий того, что полные данные транзакций были предоставлены для проверки участникам сети, которые не загружают и не хранят данные самостоятельно.
Легкие узлы и роллапы уровня 2 (l2) являются важными примерами участников сети, которым требуются надежные гарантии доступности данных, но которые не могут загружать и обрабатывать данные транзакций самостоятельно. Отказ от загрузки данных транзакций — это то, что делает легкие узлы легкими и позволяет роллапам быть эффективными решениями для масштабирования.
Доступность данных также является критически важной проблемой для будущих «клиентов без состояния» Эфириума, которым не нужно загружать и хранить данные состояния для проверки блоков. Клиентам без состояния все равно нужно быть уверенными, что данные доступны где-то и что они были обработаны правильно.
Решения для доступности данных
Выборка доступности данных (DAS)
Выборка доступности данных (DAS) — это способ для сети проверить доступность данных, не создавая слишком большой нагрузки на какой-либо отдельный узел. Каждый узел (включая узлы, не участвующие в стейкинге) загружает небольшое, случайно выбранное подмножество общих данных. Успешная загрузка выборок с высокой степенью уверенности подтверждает, что все данные доступны. Это опирается на стирающее кодирование данных, которое расширяет заданный набор данных избыточной информацией (это делается путем подбора функции, известной как полином, к данным и вычисления этого полинома в дополнительных точках). Это позволяет при необходимости восстановить исходные данные из избыточных данных. Следствием такого создания данных является то, что если какие-либо исходные данные недоступны, будет отсутствовать половина расширенных данных! Количество выборок данных, загружаемых каждым узлом, можно настроить так, чтобы было крайне вероятно, что по крайней мере один из фрагментов данных, выбранных каждым клиентом, будет отсутствовать, если действительно доступно менее половины данных.
DAS будет использоваться для обеспечения того, чтобы операторы роллапов делали свои данные транзакций доступными после внедрения полного данкшардинга. Узлы Эфириума будут случайным образом выбирать данные транзакций, предоставленные в блобах, используя схему избыточности, описанную выше, чтобы убедиться в существовании всех данных. Тот же метод может быть использован для обеспечения того, чтобы производители блоков делали все свои данные доступными для защиты легких клиентов. Аналогичным образом, при разделении предлагающего и создающего (PBS) только сборщик блоков должен будет обрабатывать весь блок — другие валидаторы будут выполнять проверку с использованием выборки доступности данных.
Комитеты доступности данных
Комитеты доступности данных (DAC) — это доверенные стороны, которые обеспечивают или подтверждают доступность данных. DAC могут использоваться вместо или в сочетании с (opens in a new tab) DAS. Гарантии безопасности, предоставляемые комитетами, зависят от конкретной настройки. Например, Эфириум использует случайно выбранные подмножества валидаторов для подтверждения доступности данных для легких узлов.
DAC также используются некоторыми валидиумами. DAC — это доверенный набор узлов, который хранит копии данных в автономном режиме. DAC обязан предоставить данные в случае возникновения спора. Члены DAC также публикуют ончейн-подтверждения, чтобы доказать, что указанные данные действительно доступны. Некоторые валидиумы заменяют DAC системой валидаторов с доказательством доли владения (PoS). Здесь любой может стать валидатором и хранить данные офчейн. Однако они должны предоставить «залог», который вносится в смарт-контракт. В случае злонамеренного поведения, такого как утаивание данных валидатором, залог может быть подвергнут слэшингу. Комитеты доступности данных на основе доказательства доли владения значительно безопаснее обычных DAC, поскольку они напрямую стимулируют честное поведение.
Доступность данных и легкие узлы
Легким узлам необходимо проверять правильность получаемых ими заголовков блоков без загрузки данных блока. Ценой этой легкости является невозможность независимой проверки заголовков блоков путем локального повторного выполнения транзакций так, как это делают полные узлы.
Легкие узлы Эфириума доверяют случайным наборам из 512 валидаторов, которые были назначены в комитет синхронизации. Комитет синхронизации действует как DAC, который сигнализирует легким клиентам о том, что данные в заголовке верны, используя криптографическую подпись. Каждый день комитет синхронизации обновляется. Каждый заголовок блока предупреждает легкие узлы о том, от каких валидаторов следует ожидать подписания следующего блока, поэтому их нельзя обмануть, заставив доверять злонамеренной группе, притворяющейся настоящим комитетом синхронизации.
Однако что произойдет, если злоумышленнику каким-то образом удастся передать вредоносный заголовок блока легким клиентам и убедить их, что он был подписан честным комитетом синхронизации? В этом случае злоумышленник мог бы включить недействительные транзакции, и легкий клиент слепо принял бы их, поскольку он не проверяет независимо все изменения состояния, обобщенные в заголовке блока. Для защиты от этого легкий клиент мог бы использовать доказательства мошенничества.
Эти доказательства мошенничества работают следующим образом: полный узел, видя недействительный переход состояния, распространяемый по сети, может быстро сгенерировать небольшой фрагмент данных, демонстрирующий, что предложенный переход состояния никак не мог возникнуть из заданного набора транзакций, и транслировать эти данные пирам. Легкие узлы могут перехватить эти доказательства мошенничества и использовать их для отбрасывания плохих заголовков блоков, гарантируя, что они останутся в той же честной цепи, что и полные узлы.
Это зависит от того, имеют ли полные узлы доступ к полным данным транзакций. Злоумышленник, который транслирует плохой заголовок блока, а также не предоставляет данные транзакций, сможет помешать полным узлам генерировать доказательства мошенничества. Полные узлы могли бы подать предупреждающий сигнал о плохом блоке, но они не смогли бы подкрепить свое предупреждение доказательством, потому что данные не были предоставлены для генерации доказательства!
Решением этой проблемы доступности данных является DAS. Легкие узлы загружают очень маленькие случайные фрагменты полных данных состояния и используют выборки для проверки доступности полного набора данных. Фактическую вероятность ошибочного предположения о полной доступности данных после загрузки N случайных фрагментов можно рассчитать (для 100 фрагментов вероятность составляет 10^-30 (opens in a new tab), то есть это невероятно маловероятно).
Даже в этом сценарии атаки, скрывающие всего несколько байтов, вполне могут остаться незамеченными клиентами, делающими случайные запросы данных. Стирающее кодирование исправляет это путем восстановления небольших недостающих фрагментов данных, которые можно использовать для проверки предложенных изменений состояния. Затем с использованием восстановленных данных можно было бы создать доказательство мошенничества, не позволяя легким узлам принимать плохие заголовки.
Примечание: DAS и доказательства мошенничества еще не реализованы для легких клиентов Эфириума на основе доказательства доли владения, но они есть в дорожной карте и, скорее всего, примут форму доказательств на основе zk-SNARK. Сегодняшние легкие клиенты полагаются на форму DAC: они проверяют личности комитета синхронизации, а затем доверяют полученным подписанным заголовкам блоков.
Доступность данных и роллапы уровня 2
Решения для масштабирования уровня 2 (l2), такие как , снижают транзакционные издержки и увеличивают пропускную способность Эфириума за счет обработки транзакций офчейн. Транзакции роллапов сжимаются и публикуются в Эфириуме пакетами. Пакеты представляют собой тысячи отдельных офчейн-транзакций в одной транзакции в Эфириуме. Это снижает перегрузку на базовом уровне и уменьшает комиссии для пользователей.
Однако доверять «сводным» транзакциям, опубликованным в Эфириуме, можно только в том случае, если предложенное изменение состояния может быть независимо проверено и подтверждено как результат применения всех отдельных офчейн-транзакций. Если операторы роллапов не предоставят данные транзакций для этой проверки, они могут отправить в Эфириум неверные данные.
Оптимистичные роллапы публикуют сжатые данные транзакций в Эфириуме и ждут некоторое время (обычно 7 дней), чтобы позволить независимым проверяющим проверить данные. Если кто-то обнаружит проблему, он может сгенерировать доказательство мошенничества и использовать его для оспаривания роллапа. Это приведет к откату цепи и исключению недействительного блока. Это возможно только при наличии данных. В настоящее время существует два способа, которыми оптимистичные роллапы публикуют данные транзакций на уровне 1 (l1). Некоторые роллапы делают данные постоянно доступными в виде CALLDATA, которые постоянно хранятся ончейн. С внедрением EIP-4844 некоторые роллапы вместо этого публикуют свои данные транзакций в более дешевом хранилище блобов. Это не постоянное хранилище. Независимые проверяющие должны запрашивать блобы и выдвигать свои оспаривания в течение ~18 дней, прежде чем данные будут удалены с уровня 1 (l1) Эфириума. Доступность данных гарантируется протоколом Эфириума только в течение этого короткого фиксированного окна. После этого она становится зоной ответственности других субъектов в экосистеме Эфириума. Любой узел может проверить доступность данных с помощью DAS, то есть путем загрузки небольших случайных выборок данных блоба.
Роллапам с нулевым разглашением (ZK-роллапам) не нужно публиковать данные транзакций, поскольку гарантируют правильность переходов состояния. Однако доступность данных по-прежнему остается проблемой, поскольку мы не можем гарантировать функциональность ZK-роллапа (или взаимодействовать с ним) без доступа к данным его состояния. Например, пользователи не могут узнать свои балансы, если оператор утаивает подробности о состоянии роллапа. Кроме того, они не могут выполнять обновления состояния, используя информацию, содержащуюся в недавно добавленном блоке.
Доступность данных в сравнении с извлекаемостью данных
Доступность данных отличается от извлекаемости данных. Доступность данных — это гарантия того, что полные узлы смогли получить доступ и проверить полный набор транзакций, связанных с определенным блоком. Из этого не обязательно следует, что данные будут доступны вечно.
Извлекаемость данных — это способность узлов извлекать историческую информацию из блокчейна. Эти исторические данные не нужны для проверки новых блоков, они требуются только для синхронизации полных узлов начиная с генезис-блока или для обслуживания конкретных исторических запросов.
Базовый протокол Эфириума в первую очередь заботится о доступности данных, а не об их извлекаемости. Извлекаемость данных может обеспечиваться небольшой популяцией архивных узлов, управляемых третьими сторонами, или она может быть распределена по сети с использованием децентрализованного файлового хранилища, такого как Портал Нетворк (opens in a new tab).
Дополнительная литература
- Что такое доступность данных? (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)
- Комитеты доступности данных на основе доказательства доли владения. (opens in a new tab)
- Решения проблемы извлекаемости данных (opens in a new tab)
- Доступность данных, или Как роллапы научились не волноваться и полюбили Эфириум (opens in a new tab)
- EIP-7623: Увеличение стоимости данных вызова (opens in a new tab)