Деревья Веркла
Деревья Веркла («векторное обязательство» + «деревья Меркла») — это структура данных, которая может быть использована для обновления узлов Ethereum, чтобы они могли прекратить хранение больших объемов данных о состоянии, не теряя возможность валидировать блоки.
Клиенты не использующие состояние
Деревья Веркла являются важным шагом на пути к клиентам без состояния. Клиенты без состояния — это клиенты, которым не нужно хранить всю базу данных о состоянии Ethereum для проверки входящих блоков. Вместо использования собственной локальной копии состояния Ethereum для проверки блоков клиенты без состояния используют «свидетельство» данных состояния, которое приходит вместе с блоком. Свидетельство — это коллекция отдельных частей данных о состоянии, необходимых для выполнения определенного набора транзакций, и криптографическое доказательство того, что свидетельство действительно является частью полных данных. Свидетельство используется вместо базы данных состояния. Для этого свидетельства должны быть очень маленькими, чтобы их можно было безопасно и вовремя транслировать по сети, а проверяющие могли обработать их в течение слота в 12 секунд. Нынешняя структура данных о состоянии не подходит, поскольку свидетельства слишком велики. Деревья Веркла решают эту проблему, допуская маленькие свидетельства и устраняя один из главных барьеров на пути к клиентам без состояния.
Что такое свидетельство и зачем оно нам нужно?
Проверка блока означает повторное выполнение транзакций, содержащихся в блоке, применение изменений к дереву состояния Ethereum и вычисление нового корневого хэша. Проверенный блок — это блок, чей вычисленный корневой хэш состояния совпадает с тем, который предоставлен вместе с блоком (поскольку это означает, что тот, кто предложил блок, действительно выполнил вычисления, о которых он заявил). В сегодняшних клиентах Ethereum обновление состояния требует доступа ко всему дереву состояния — большой структуре данных, которые должны храниться локально. Свидетельство содержит только фрагменты данных о состоянии, которые необходимы для выполнения транзакций в блоке. Валидатор сможет использовать только эти фрагменты, чтобы удостовериться, что предложивший блок выполнил транзакции и обновил состояние правильно. Однако это означает, что свидетельство необходимо передавать между одноранговыми пользователями по сети Ethereum достаточно быстро, чтобы оно было принято и обработано каждым узлом безопасно в 12-секундном слоте. Если свидетельство слишком велико, некоторым узлам может потребоваться слишком много времени, чтобы загрузить его, не отставая от цепи. Это централизующая сила, потому что это означает, что только узлы с быстрым интернет-соединением смогут участвовать в проверке блоков. С деревьями Веркла нет необходимости хранить состояние на жестком диске. Все, что нужно для проверки блока, находится в самом блоке. К сожалению, свидетельства, которые могут быть получены с помощью деревьев Меркла, слишком велики, чтобы поддерживать клиенты без состояния.
Почему деревья Веркла дают нам свидетельства меньшего размера?
Структура дерева Меркла делает размер свидетельства очень большим — слишком большим, чтобы безопасно передавать его между одноранговыми пользователями в 12-секундном слоте. Причина в том, что свидетельство — это путь, соединяющий данные, которые хранятся в листьях, с корневым хэшем. Для проверки данных необходимо иметь не только все промежуточные хэши, соединяющие каждый лист с корнем, но и все «близкие» узлы. Каждый узел в доказательстве имеет еще один близкий, с которым он хэшируется, чтобы создать следующий хэш на дереве. Это очень большой объем данных. Деревья Веркла уменьшают размер свидетельства, сокращая расстояние между листьями дерева и его корнем, а также устраняя необходимость предоставления близких узлов для проверки корневого хэша. Еще большая экономия пространства будет достигнута за счет использования мощной схемы полиномиального обязательства вместо векторного обязательства в стиле хэша. Полиномиальное (многочленное) обязательство позволяет свидетельству иметь фиксированный размер независимо от количества листьев, которое оно подтверждает.
При схеме обязательств с использованием многочленов свидетельства получают приемлемый размер, который можно легко передавать в одноранговой сети. Это позволяет клиентам проверять изменение состояния в каждом блоке, используя минимальное количество данных.
Какова структура дерева Веркла?
Деревья Веркла — это пары (key,value)
, в которых ключи состоят из 32-байтовых элементов, включающих 31-байтовый stem и 1-байтовый suffix. Эти ключи организованы в узлы расширения и внутренние узлы. Узлы расширения представляют собой единую основу с 256 потомками и разными суффиксами. Внутренние узлы тоже имеют 256 потомков, но они могут в то же время являться другими узлами расширения. Основное различие между структурами дерева Веркла и дерева Меркла заключается в том, что дерево Веркла гораздо более плоское. Это значит, что существует меньше промежуточных узлов, связывающих лист с корнем, и, следовательно, меньше данных, необходимых для создания доказательства.
Подробнее о структуре деревьев Веркла(opens in a new tab)
Текущий прогресс
Тестовые сети деревьев Веркла уже запущены, но все еще есть существенные обновления для клиентов, которые необходимы для поддержки деревьев Веркла. Вы можете помочь ускорить прогресс, развертывая смарт-контракты или клиенты в тестовых сетях.
Узнайте о тестовой сети Verkle Gen Devnet 2(opens in a new tab)
Посмотрите объяснение Гийома Балле о тестовой сети Condrieu Verkle(opens in a new tab) (обратите внимание: тестовая сеть Condrieu была основана на доказательстве выполнения работы, она заменена на тестовую сеть Verkle Gen Devnet 2).
Дополнительная литература
- Деревья Веркла для клиентов без фиксации состояния(opens in a new tab)
- Данкрад Фейст объясняет деревья Веркла на PEEPanEIP(opens in a new tab)
- Гийом Балле объясняет деревья Веркла на ETHGlobal(opens in a new tab)
- «Как деревья Меркла делают Ethereum эффективным и готовым к работе» — Гийом Балле, Devcon 6(opens in a new tab)
- Пайпер Мерриам о клиентах без состояния на ETHDenver 2020(opens in a new tab)
- Данкрад Фиест объясняет, что такое деревья Веркла и клиенты без фиксации состояния, в подкасте Zero Knowledge(opens in a new tab)
- Виталик Бутерин о деревьях Веркла(opens in a new tab)
- Данкрад Фейст о деревьях Веркла(opens in a new tab)
- Документация EIP деревьев Веркла(opens in a new tab)