Перейти к основному содержанию

Последнее обновление страницы: 25 января 2024 г.

Деревья Веркла

Деревья Веркла («векторное обязательство» + «деревья Меркла») — это структура данных, которая может быть использована для обновления узлов Ethereum, чтобы они могли прекратить хранение больших объемов данных о состоянии, не теряя возможность валидировать блоки.

Клиенты, не использующие состояние

Деревья Веркла являются важным шагом на пути к клиентам без состояния. Клиенты без состояния — это клиенты, которым не нужно хранить всю базу данных о состоянии Ethereum для проверки входящих блоков. Вместо использования собственной локальной копии состояния Ethereum для проверки блоков клиенты без состояния используют «свидетельство» данных состояния, которое приходит вместе с блоком. Свидетельство — это коллекция отдельных частей данных о состоянии, необходимых для выполнения определенного набора транзакций, и криптографическое доказательство того, что свидетельство действительно является частью полных данных. Свидетельство используется вместо базы данных состояния. Для этого свидетельства должны быть очень маленькими, чтобы их можно было безопасно и вовремя транслировать по сети, а проверяющие могли обработать их в течение слота в 12 секунд. Нынешняя структура данных о состоянии не подходит, поскольку свидетельства слишком велики. Деревья Веркла решают эту проблему, допуская маленькие свидетельства и устраняя один из главных барьеров на пути к клиентам без состояния.

Что такое свидетельство и зачем оно нам нужно?

Проверка блока означает повторное выполнение транзакций, содержащихся в блоке, применение изменений к дереву состояния Ethereum и вычисление нового корневого хэша. Проверенный блок — это блок, чей вычисленный корневой хэш состояния совпадает с тем, который предоставлен вместе с блоком (поскольку это означает, что тот, кто предложил блок, действительно выполнил вычисления, о которых он заявил). В сегодняшних клиентах Ethereum обновление состояния требует доступа ко всему дереву состояния — большой структуре данных, которые должны храниться локально. Свидетельство содержит только фрагменты данных о состоянии, которые необходимы для выполнения транзакций в блоке. Валидатор сможет использовать только эти фрагменты, чтобы удостовериться, что предложивший блок выполнил транзакции и обновил состояние правильно. Однако это означает, что свидетельство необходимо передавать между одноранговыми пользователями по сети Ethereum достаточно быстро, чтобы оно было принято и обработано каждым узлом безопасно в 12-секундном слоте. Если свидетельство слишком велико, некоторым узлам может потребоваться слишком много времени, чтобы загрузить его, не отставая от цепи. Это централизующая сила, потому что это означает, что только узлы с быстрым интернет-соединением смогут участвовать в проверке блоков. С деревьями Веркла нет необходимости хранить состояние на жестком диске. Все, что нужно для проверки блока, находится в самом блоке. К сожалению, свидетельства, которые могут быть получены с помощью деревьев Меркла, слишком велики, чтобы поддерживать клиенты без состояния.

Почему деревья Веркла дают нам свидетельства меньшего размера?

Структура дерева Меркла делает размер свидетельства очень большим — слишком большим, чтобы безопасно передавать его между одноранговыми пользователями в 12-секундном слоте. Причина в том, что свидетельство — это путь, соединяющий данные, которые хранятся в листьях, с корневым хэшем. Для проверки данных необходимо иметь не только все промежуточные хэши, соединяющие каждый лист с корнем, но и все «близкие» узлы. Каждый узел в доказательстве имеет еще один близкий, с которым он хэшируется, чтобы создать следующий хэш на дереве. Это очень большой объем данных. Деревья Веркла уменьшают размер свидетельства, сокращая расстояние между листьями дерева и его корнем, а также устраняя необходимость предоставления близких узлов для проверки корневого хэша. Еще большая экономия пространства будет достигнута за счет использования мощной схемы полиномиального обязательства вместо векторного обязательства в стиле хэша. Полиномиальное (многочленное) обязательство позволяет свидетельству иметь фиксированный размер независимо от количества листьев, которое оно подтверждает.

При схеме обязательств с использованием многочленов свидетельства получают приемлемый размер, который можно легко передавать в одноранговой сети. Это позволяет клиентам проверять изменение состояния в каждом блоке, используя минимальное количество данных.

Какова структура дерева Веркла?

Деревья Веркла — это пары (key,value), в которых ключи состоят из 32-байтовых элементов, включающих 31-байтовый stem и 1-байтовый suffix. Эти ключи организованы в узлы расширения и внутренние узлы. Узлы расширения представляют собой единую основу с 256 потомками и разными суффиксами. Внутренние узлы тоже имеют 256 потомков, но они могут в то же время являться другими узлами расширения. Основное различие между структурами дерева Веркла и дерева Меркла заключается в том, что дерево Веркла гораздо более плоское. Это значит, что существует меньше промежуточных узлов, связывающих лист с корнем, и, следовательно, меньше данных, необходимых для создания доказательства.

Подробнее о структуре деревьев Веркла(opens in a new tab)

Текущий прогресс

Тестовые сети деревьев Веркла уже запущены, но все еще есть существенные обновления для клиентов, которые необходимы для поддержки деревьев Веркла. Вы можете помочь ускорить прогресс, развертывая смарт-контракты или клиенты в тестовых сетях.

Исследуйте тестовую сеть Веркла Beverly Hills(opens in a new tab)

Посмотрите объяснение Гийома Балле о тестовой сети Веркла Condrieu(opens in a new tab) (обратите внимание: тестовая сеть Condrieu была основана на доказательстве работы, она заменена на тестовую сеть Kaustinen(opens in a new tab)).

Дополнительная литература

Была ли эта статья полезной?