Автор
WhiteBIT
Дата
Перегляди
2
Час читання
10 хв..

Що таке дерево Меркла в блокчейні?

Що таке дерево Меркла в блокчейні?

Головне зі статті:

  1. Дерево Меркла зводить множину хешів до одного значення — Merkle Root.
  2. Merkle Proof дає змогу підтвердити включення елемента без перевірки всього набору даних.
  3. У Bitcoin Merkle Root пов’язує заголовок блоку з включеними до нього транзакціями.
  4. В Ethereum використовуються інші різновиди Merkle-структур, зокрема для роботи зі станом мережі.
  5. Merkle Proof має обмеження: він підтверджує включення даних, але не їхню коректність або валідність.

Відкрийте світ криптовалют із WhiteBIT

Створити акаунт

Що таке дерево Меркла?

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

Структура дерева Меркла

Дерево будується з хешів — унікальних значень фіксованої довжини, отриманих шляхом обробки вихідних даних хеш-функцією. Спочатку хешуються окремі блоки даних або транзакції — отримані значення утворюють «листки» дерева. Потім хеші попарно об’єднуються та знову хешуються. Процес повторюється доти, доки не залишиться єдине значення — корінь Меркла (Merkle Root). Розглянемо окремо кожен етап.

Листові вузли

Листові вузли (leaf nodes) — це нижній рівень дерева Меркла. Вони містять криптографічні хеші вихідних даних, наприклад транзакцій у блокчейні. Кожна транзакція пропускається через хеш-функцію, у результаті чого формується хеш фіксованої довжини.

Якщо позначити транзакції як Tx1, Tx2, Tx3 і Tx4, листові вузли можна представити таким чином:

H1 = Hash(Tx1) H2 = Hash(Tx2) H3 = Hash(Tx3) H4 = Hash(Tx4)

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

Батьківські вузли та гілки

На наступному рівні хеші дочірніх вузлів об’єднуються попарно та знову хешуються. Так формуються батьківські вузли:

H12 = Hash(H1 || H2) H34 = Hash(H3 || H4)

Тут || позначає конкатенацію — послідовне об’єднання двох значень. Цей процес повторюється на кожному рівні дерева. У результаті кожен батьківський вузол криптографічно пов’язаний з усіма даними, розташованими нижче нього.

Сукупність таких зв’язків утворює гілки дерева Меркла. Саме завдяки їм можна побудувати Merkle Proof і підтвердити наявність конкретного елемента в наборі, використовуючи лише частину хешів, а не всі вихідні дані.

Корінь Меркла

На вершині дерева розташований єдиний хеш, який представляє весь набір даних і слугує його криптографічним відбитком. Він формується шляхом хешування двох дочірніх вузлів попереднього рівня.

Merkle Root = Hash(H12 || H34)

Будь-яка зміна вихідних даних призводить до зміни відповідного листового хешу, потім батьківських вузлів і зрештою самого кореня. Завдяки цьому можна швидко перевірити цілісність даних, представлених деревом Меркла.

Як працює дерево Меркла?

Дерево Меркла послідовно об’єднує та хешує дані, доки множина вихідних значень не буде зведена до одного хешу — кореня Меркла. У Bitcoin дерево будується на основі TXID транзакцій: хеші об’єднуються попарно та хешуються знову, а процес повторюється до отримання єдиного значення.

Розглянемо спрощений приклад із чотирма транзакціями — A, B, C і D.

  1. Отримати листові хеші. Для кожної транзакції використовується її хеш. Позначимо чотири листові значення як H(A), H(B), H(C) і H(D).
  2. Об’єднати хеші попарно. Сусідні значення об’єднуються в заданому порядку: спочатку H(A) + H(B), потім H(C) + H(D). Порядок важливий: перестановка хешів змінить результат подальшого хешування.
  3. Обчислити батьківські хеші. Кожна отримана пара хешується: H(AB) = Hash(H(A) || H(B)) H(CD) = Hash(H(C) || H(D))

    Тут || означає конкатенацію — послідовне об’єднання двох значень.

  4. Об’єднати батьківські хеші. Отримані H(AB) і H(CD) також об’єднуються у встановленому порядку: H(AB) || H(CD)
  5. Обчислити корінь Меркла. Результат знову хешується: Merkle Root = Hash(H(AB) || H(CD))

Таким чином, чотири вихідні значення зводяться до одного кореневого хешу. У Bitcoin цей Merkle Root записується в заголовок блоку.
Схематично процес виглядає так:

Що відбувається за непарної кількості транзакцій?

У Bitcoin передбачено окреме правило для ситуації, коли на певному рівні дерева залишається хеш без пари. Він об’єднується з власною копією і після цього хешується. Офіційний посібник Bitcoin описує це правило як для вихідних TXID, так і для проміжних рівнів дерева.

Наприклад, для трьох TXID:

Тобто останній непарний хеш C дублюється, щоб сформувати пару.

Важливо: дублювання останнього непарного хешу — це правило побудови дерева Меркла в Bitcoin, а не універсальна властивість усіх дерев Меркла. В інших протоколах і реалізаціях можуть застосовуватися інші способи обробки непарної кількості елементів.

Що таке доказ Меркла?

Доказ Меркла — це спосіб підтвердити, що певна транзакція або інший елемент входить до набору даних, представленого конкретним Merkle Root.

Для перевірки не потрібне все дерево. Достатньо хешу елемента, що перевіряється, і кількох сусідніх хешів, необхідних для відновлення шляху до кореня. Наприклад, для підтвердження транзакції A у дереві з чотирьох елементів знадобляться H(A), H(B) і H(CD).

Отриманий під час перевірки корінь порівнюється з відомим Merkle Root. Якщо значення збігаються, належність елемента до відповідного набору вважається підтвердженою.

Розмір такого доказу зростає приблизно як O(log n), тому Merkle Proof залишається компактним навіть для великих наборів даних.

Як Merkle Proof використовується в Bitcoin: SPV

Одне з практичних застосувань Merkle Proof у Bitcoin пов’язане з Simplified Payment Verification (SPV) — спрощеною перевіркою платежів. Цей підхід дає змогу перевіряти включення транзакції до блоку без запуску повного вузла та зберігання всіх даних блокчейну.

SPV-клієнт працює переважно із заголовками блоків. Щоб пов’язати потрібну транзакцію з конкретним блоком, використовується Merkle Proof: за його допомогою клієнт перевіряє, чи відповідає транзакція Merkle Root, записаному в заголовку цього блоку.

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

Дерева Меркла в Ethereum

В Ethereum використовуються не класичні дерева Меркла, а їхні складніші різновиди. Історично ключову роль відігравали Merkle Patricia Trie — структури, які поєднують властивості дерева Меркла та префіксного дерева (trie).

Вони застосовуються для криптографічної фіксації стану мережі та дають змогу створювати компактні докази наявності або відсутності певних даних. У сучасному Ethereum також використовуються інші Merkle-структури, зокрема для даних консенсусного рівня.

Дерево Меркла та Proof of Reserves

У системах Proof of Reserves (PoR) дерево Меркла може використовуватися для фіксації набору зобов’язань платформи перед користувачами. Записи про залишки включаються до дерева, а отриманий Merkle Root слугує криптографічним відбитком цього набору на певний момент часу.

Користувач отримує Merkle Proof і може самостійно перевірити, що його запис було включено до набору зобов’язань, який відповідає опублікованому кореню.
Однак така перевірка має обмеження. Merkle Proof підтверджує лише включення конкретного запису і сам по собі не доводить:

  • володіння платформою заявленими активами та їхню достатність для покриття зобов’язань;
  • повноту обліку всіх зобов’язань;
  • актуальність опублікованих даних;
  • конфіденційність даних користувачів.

Тому використання дерева Меркла не замінює незалежний аудит і прозору методологію Proof of Reserves, а є лише одним з інструментів криптографічної перевірки даних.

Переваги дерев Меркла в блокчейні

Дерева Меркла спрощують перевірку великих обсягів даних і знижують вимоги до ресурсів.

  1. Ефективна перевірка даних. Для підтвердження включення елемента не потрібно обробляти весь набір.
  2. Компактні докази. Розмір Merkle Proof зростає приблизно як O(log n).
  3. Контроль цілісності. Зміна вихідних даних призводить до зміни пов’язаних хешів і кореня дерева.
  4. Економія ресурсів. Перевірка потребує менше даних, обчислень і мережевого трафіку порівняно з обробкою повного набору.
  5. Масштабованість. Структура залишається ефективною під час роботи з великою кількістю елементів.

Недоліки дерев Меркла в блокчейні

Попри ефективність, дерева Меркла мають низку технічних обмежень.

  1. Залежність від хеш-функції. Надійність структури визначається криптографічною стійкістю використовуваного алгоритму.
  2. Необхідність додаткових даних. Для перевірки елемента потрібен Merkle Proof із хешами сусідніх вузлів.
  3. Ускладнення оновлень. Зміна елемента потребує перерахунку всіх пов’язаних хешів аж до кореня.
  4. Обмеженість доказу. Merkle Proof підтверджує включення елемента до конкретного набору, але не достовірність самих вихідних даних.
  5. Відмінності в реалізаціях. Правила побудови дерева можуть відрізнятися між блокчейнами та протоколами, що необхідно враховувати під час перевірки.

Дерево Меркла, хеш-ланцюжок і блокчейн: відмінності

Ці поняття пов’язані з використанням криптографічних хешів, але описують різні структури та вирішують різні завдання.

Структура Основне завдання Зв’язок записів Застосування в криптовалютах
Дерево Меркла Ефективна перевірка цілісності та включення даних Множина елементів ієрархічно зводиться до одного кореневого хешу Перевірка транзакцій та інших наборів даних
Хеш-ланцюжок Послідовне зв’язування даних Кожен наступний запис пов’язаний хешем із попереднім Зв’язування послідовних записів або блоків
Блокчейн Ведення та узгодження розподіленого реєстру Блоки пов’язані в послідовність відповідно до правил конкретного протоколу Зберігання та валідація історії операцій із використанням механізмів консенсусу

Інші застосування дерев Меркла

Крім блокчейну, Merkle-структури застосовуються в розподілених файлових системах і адресації за вмістом, системах контролю версій на кшталт Git, автентифікованих базах даних та allowlists.

Дізнайся актуальну вартість Bitcoin

Ціна BTC

Висновок

Дерево Меркла перетворює впорядкований набір криптографічних зобов’язань на один кореневий хеш і дає змогу створювати компактні докази включення. У криптовалютах ця структура забезпечує ефективну перевірку даних, однак значення такого доказу залежить від довіри до підтвердженого кореня, правил побудови дерева та механізмів валідації конкретного протоколу.

Матеріал має виключно інформаційний характер і не є фінансовою чи інвестиційною рекомендацією.

FAQ

Дерево Меркла — структура з хешів, яка зводить множину елементів до одного кореня. Вона дає змогу ефективно перевіряти цілісність і включення даних без обробки всього набору.
Merkle Root — підсумковий хеш дерева, криптографічно пов’язаний з усіма його елементами. Зміна вихідних даних призводить до зміни кореня.
Merkle Proof — набір хешів, що дає змогу перевірити включення конкретного елемента до дерева відносно відомого Merkle Root.
У Bitcoin TXID транзакцій об’єднуються в дерево, а отриманий Merkle Root записується в заголовок блоку. Це дає змогу створювати компактні докази включення транзакцій.
Ні. Merkle Proof підтверджує включення транзакції до набору, але не її відповідність правилам протоколу. Валідність потребує окремої перевірки.
Це залежить від реалізації. У Bitcoin останній непарний хеш на відповідному рівні дублюється. Для інших дерев Меркла це правило не є обов’язковим.
Ні. Bitcoin використовує Merkle tree для транзакцій, тоді як в Ethereum застосовуються інші Merkle-структури, зокрема для роботи зі станом мережі.

Поділитися

Опубліковано

WhiteBIT

Весь світ криптовалют у вашій кишені

Завжди під рукою

Останні статті

Ще новини