Перейти до основного вмісту

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

Редагувати сторінку (opens in a new tab)

Дерева Веркла (словозлиття від «Vector commitment» (векторна фіксація) та «Merkle Trees» (дерева Меркла)) — це структура даних, яку можна використовувати для оновлення вузлів Етеріуму, щоб вони могли припинити зберігати великі обсяги даних стану без втрати здатності перевіряти блоки.

Безстановість

Дерева Веркла є критичним кроком на шляху до безстанових клієнтів Етеріуму. Безстанові клієнти — це ті, яким не потрібно зберігати всю базу даних стану для перевірки вхідних блоків. Замість того, щоб використовувати власну локальну копію стану Етеріуму для перевірки блоків, безстанові клієнти використовують «свідка» даних стану, який надходить разом із блоком. Свідок — це набір окремих частин даних стану, необхідних для виконання певного набору транзакцій, і криптографічний доказ того, що свідок дійсно є частиною повних даних. Свідок використовується замість бази даних стану. Щоб це працювало, свідки мають бути дуже малими, щоб їх можна було безпечно транслювати через мережу вчасно для того, щоб валідатори могли обробити їх протягом 12-секундного слота. Поточна структура даних стану не підходить, оскільки свідки занадто великі. Дерева Веркла розв'язують цю проблему, уможливлюючи використання малих свідків, усуваючи одну з головних перешкод для безстанових клієнтів.

Клієнти Етеріуму наразі використовують структуру даних, відому як дерево Меркла-Патрісії (Patricia Merkle Trie), для зберігання даних стану. Інформація про окремі акаунти зберігається як листя на дереві, а пари листя багаторазово хешуються, доки не залишиться лише один хеш. Цей кінцевий хеш відомий як «корінь». Щоб перевірити блоки, клієнти Етеріуму виконують усі транзакції в блоці та оновлюють своє локальне дерево стану. Блок вважається дійсним, якщо корінь локального дерева ідентичний тому, який надав пропонувач блоку, оскільки будь-які відмінності в обчисленнях, виконаних пропонувачем блоку та вузлом-валідатором, призвели б до того, що кореневий хеш був би зовсім іншим. Проблема полягає в тому, що перевірка блокчейну вимагає від кожного клієнта зберігати все дерево стану для головного блоку та кількох історичних блоків (за замовчуванням у Geth зберігаються дані стану для 128 блоків позаду головного). Це вимагає від клієнтів доступу до великого обсягу дискового простору, що є перешкодою для запуску повних вузлів на дешевому, малопотужному обладнанні. Рішенням цього є оновлення дерева стану до більш ефективної структури (дерева Веркла), яку можна підсумувати за допомогою невеликого «свідка» даних, яким можна ділитися замість повних даних стану. Переформатування даних стану в дерево Веркла є сходинкою для переходу до безстанових клієнтів.

Що таке свідок і навіщо він потрібен?

Перевірка блоку означає повторне виконання транзакцій, що містяться в блоці, застосування змін до дерева стану Етеріуму та обчислення нового кореневого хешу. Перевірений блок — це той, чий обчислений кореневий хеш стану збігається з тим, що надається разом із блоком (оскільки це означає, що пропонувач блоку дійсно виконав обчислення, про які він заявляє). У сучасних клієнтах Етеріуму оновлення стану вимагає доступу до всього дерева стану, яке є великою структурою даних, що має зберігатися локально. Свідок містить лише ті фрагменти даних стану, які необхідні для виконання транзакцій у блоці. Тоді валідатор може використовувати лише ці фрагменти, щоб перевірити, чи пропонувач блоку виконав транзакції блоку та правильно оновив стан. Однак це означає, що свідок має передаватися між одноранговими вузлами в мережі Етеріум достатньо швидко, щоб кожен вузол міг безпечно отримати та обробити його протягом 12-секундного слота. Якщо свідок занадто великий, деяким вузлам може знадобитися занадто багато часу, щоб завантажити його та не відставати від ланцюга. Це є силою централізації, оскільки означає, що лише вузли зі швидким інтернет-з'єднанням можуть брати участь у перевірці блоків. З деревами Веркла немає потреби зберігати стан на жорсткому диску; усе, що вам потрібно для перевірки блоку, міститься в самому блоці. На жаль, свідки, які можна створити з дерев Меркла, занадто великі для підтримки безстанових клієнтів.

Чому дерева Веркла уможливлюють менших свідків?

Структура дерева Меркла робить розміри свідків дуже великими — занадто великими для безпечної трансляції між одноранговими вузлами протягом 12-секундного слота. Це пов'язано з тим, що свідок — це шлях, який з'єднує дані, що містяться в листі, з кореневим хешем. Для перевірки даних необхідно мати не лише всі проміжні хеші, які з'єднують кожен лист із коренем, але й усі «сестринські» вузли. Кожен вузол у доказі має сестринський вузол, з яким він хешується для створення наступного хешу вгору по дереву. Це дуже багато даних. Дерева Веркла зменшують розмір свідка шляхом скорочення відстані між листям дерева та його коренем, а також усунення необхідності надавати сестринські вузли для перевірки кореневого хешу. Ще більшої ефективності використання простору буде досягнуто завдяки використанню потужної схеми поліноміальної фіксації замість векторної фіксації на основі хешів. Поліноміальна фіксація дозволяє свідку мати фіксований розмір незалежно від кількості листя, яке він доводить.

За схемою поліноміальної фіксації свідки мають керовані розміри, які можна легко передавати в одноранговій мережі. Це дозволяє клієнтам перевіряти зміни стану в кожному блоці з мінімальним обсягом даних.

Розмір свідка змінюється залежно від кількості листя, яке він включає. Припускаючи, що свідок охоплює 1000 листків, свідок для дерева Меркла становитиме близько 3,5 МБ (за умови 7 рівнів дерева). Свідок для тих самих даних у дереві Веркла (за умови 4 рівнів дерева) становитиме близько 150 кБ — приблизно у 23 рази менше. Це зменшення розміру свідка дозволить свідкам безстанових клієнтів бути прийнятно малими. Поліноміальні свідки становлять 0,128–1 кБ залежно від того, яка саме поліноміальна фіксація використовується.

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

Дерева Веркла — це пари (key,value), де ключі є 32-байтовими елементами, що складаються з 31-байтової основи та однобайтового суфікса. Ці ключі організовані у вузли розширення та внутрішні вузли. Вузли розширення представляють одну основу для 256 нащадків з різними суфіксами. Внутрішні вузли також мають 256 нащадків, але вони можуть бути іншими вузлами розширення. Головна відмінність між структурою дерева Веркла та дерева Меркла полягає в тому, що дерево Веркла набагато плоскіше, тобто існує менше проміжних вузлів, що зв'язують лист із коренем, і, отже, потрібно менше даних для створення доказу.

Diagram of a Verkle tree data structure

Дізнайтеся більше про структуру дерев Веркла (opens in a new tab)

Поточний прогрес

Тестові мережі дерев Веркла вже запущені та працюють, але все ще існують значні невирішені оновлення клієнтів, які необхідні для підтримки дерев Веркла. Ви можете допомогти прискорити прогрес, розгортаючи контракти в тестових мережах або запускаючи клієнти тестової мережі.

Подивіться, як Гійом Балле пояснює тестову мережу Condrieu Verkle (opens in a new tab) (зверніть увагу, що тестова мережа Condrieu працювала на доказі виконання роботи (PoW) і тепер замінена тестовою мережею Verkle Gen Devnet 6).

Додаткові матеріали

Останнє оновлення сторінки: 6 червня 2026 р.