
Merkle root — це одиничний геш, який підсумовує всі транзакції в блоці. Його створюють шляхом рекурсивного об’єднання гешів транзакцій у деревоподібній структурі. Merkle root зберігають у заголовку блоку, і він слугує компактним підсумком складу транзакцій у блоці.
У цьому контексті “геш-функція” означає алгоритм, що стискає довільні дані у відбиток фіксованої довжини. “Заголовок блоку” — це сегмент метаданих із такими елементами, як позначка часу, геш попереднього блоку й Merkle root, що дозволяє мережі швидко перевіряти блоки.
Merkle root має вирішальне значення, оскільки дозволяє користувачам перевіряти включення транзакції до блоку без завантаження всіх транзакцій цього блоку. Для перевірки потрібен лише мінімальний обсяг даних. Це дає змогу легким вузлам — клієнтам, які завантажують тільки заголовки блоків, — і мобільним гаманцям працювати безпечно з обмеженими ресурсами.
У Bitcoin SPV (спрощена перевірка платежу) базується на Merkle root. Гаманці завантажують заголовок блоку і використовують короткий “proof path” для порівняння з Merkle root, визначаючи включення транзакції. Для блоків із тисячами транзакцій це значно знижує вимоги до пропускної здатності та зберігання.
За даними публічних блок-експлорерів, більшість блоків Bitcoin зазвичай містять близько 1 000–3 000 транзакцій станом на 2025 рік (джерело: mempool.space, 2025-10). На такому рівні ефективність використання Merkle root особливо висока.
Обчислення Merkle root передбачає об’єднання гешів транзакцій у Merkle tree угору, доки не залишиться лише один геш.
Крок 1: Обчисліть геш для кожної транзакції. Геш транзакції — це відбиток фіксованої довжини, отриманий шляхом гешування даних транзакції.
Крок 2: Попарно об’єднайте сусідні геші транзакцій, конкатенуйте їх і прогешуйте результат для формування геша батьківського вузла. Продовжуйте об’єднання попарно для побудови наступного шару.
Крок 3: Якщо у шарі непарна кількість гешів (як у Bitcoin), дублюйте останній геш для завершення парування — деталі можуть відрізнятися залежно від блокчейну.
Крок 4: Повторюйте цей процес, доки не залишиться лише один геш угорі. Це і є Merkle root. У Bitcoin проміжні результати часто піддають подвійному гешуванню (застосовують геш-функцію двічі) для підвищення стійкості до колізій і атак на розширення довжини.
Merkle tree структурує великі обсяги даних у вигляді гешів в ієрархічному “бінарному дереві”. Кожен листок — це геш транзакції, а кожен батьківський вузол — об’єднаний геш двох дочірніх вузлів. Merkle root — це найвищий батьківський геш цього дерева, який підсумовує всі підлеглі дані.
Це можна уявити як папку: листки — це відбитки окремих файлів, верхні шари — відбитки підпапок, а Merkle root — загальний відбиток усієї папки. Якщо змінити будь-який листок, змінюються всі батьківські геші до самого кореня, що робить Merkle root надійним індикатором змін у наборі даних.
Щоб перевірити, чи входить транзакція до блоку, потрібно відтворити “proof path” від цієї транзакції до Merkle root і порівняти його з Merkle root у заголовку блоку.
Крок 1: Отримайте геш транзакції — його можна скопіювати зі свого гаманця або зі сторінки деталей у блок-експлорері.
Крок 2: Отримайте Merkle proof — блок-експлорери зазвичай надають послідовність “path hashes” (сусідніх гешів до вашої транзакції) для багаторівневого об’єднання.
Крок 3: Послідовно конкатенуйте й гешуйте геш транзакції з кожним path hash шар за шаром, доки не отримаєте геш верхнього рівня.
Крок 4: Порівняйте отриманий геш верхнього рівня з Merkle root блоку. Якщо вони збігаються, ваша транзакція підтверджена як частина цього блоку.
На практиці, наприклад, під час внесення депозиту на Gate, на сторінці підтвердження буде вказано висоту блоку та надано посилання на відповідні блок-експлорери. Можна перейти на ці сторінки, перевірити Merkle root у заголовку блоку й використати ці кроки для самостійної перевірки.
У Bitcoin Merkle root — це геш верхнього рівня бінарного Merkle tree, побудованого з усіх транзакцій, і записується у поле “merkle root” заголовка блоку.
В Ethereum заголовки блоків містять кілька коренів: transactionsRoot (для транзакцій), stateRoot (для глобального стану) і receiptsRoot (для квитанцій). Вони побудовані за допомогою структур “Merkle Patricia Trie” — варіанта, пристосованого для зберігання ключ-значення, що забезпечує складніший стан і індексацію. Незважаючи на різні реалізації, всі вони стискають великі набори даних у перевірювані дайджести.
Спільнота продовжує досліджувати ефективніші структури даних — наприклад, Verkle tree — для подальшого зменшення розміру доказів і вартості синхронізації для легких клієнтів. Водночас конструкції на основі Merkle залишаються стандартом для створення перевірюваних дайджестів і доказів.
По-перше, Merkle root підтверджує лише “цілісність набору”, а не вказує безпосередньо, які саме транзакції містяться. Для підтвердження включення потрібні як Merkle proof, так і геш транзакції.
По-друге, SPV-верифікація ґрунтується на довірі до того, що отримані заголовки блоків належать основному ланцюгу. Атаки в мережі (наприклад, ізоляція зловмисними вузлами) можуть тимчасово вводити користувачів в оману. Тому для операцій із коштами слід чекати достатньої кількості підтверджень; біржі на кшталт Gate вимагають різну кількість підтверджень для різних мереж, щоб зменшити ризики подвійних витрат і реорганізації.
По-третє, деталі реалізації відрізняються у різних блокчейнах — порядок об’єднання, обробка непарних листків, алгоритми гешування, формати кодування. Помилки в цих процесах можуть призводити до невдалих перевірок.
По-четверте, безпека залежить від стійкості геш-функцій до колізій і підробок. Хоча нині застосовують перевірені геш-алгоритми, будь-яка вразливість на рівні алгоритму безпосередньо підриває надійність Merkle root.
Крок 1: Введіть геш транзакції у блок-експлорер, відкрийте сторінку деталей, знайдіть відповідний блок і відкрийте сторінку цього блоку.
Крок 2: У розділі “заголовок блоку” знайдіть поля на кшталт “merkle root” (Bitcoin) або “transactionsRoot/stateRoot/receiptsRoot” (Ethereum). Це і є відповідні Merkle root.
Крок 3: Якщо на сторінці передбачено “Merkle Proof” або “proof path”, скористайтеся попередніми кроками для обчислення й порівняння з Merkle root для перевірки транзакції.
На сторінці записів депозитів Gate можна знайти висоту блоку вашої транзакції й перейти на відповідну сторінку блок-експлорера, щоб знайти поля заголовка блоку та краще зрозуміти функцію Merkle root.
Опанування Merkle root допомагає зрозуміти, чому блоки надійні, як гаманці здійснюють легку перевірку й як різні публічні ланцюги обирають структури даних. Merkle root стискає численні транзакції чи стани в єдиний перевірюваний дайджест, підвищуючи ефективність і зберігаючи межі безпеки. Для початківців знання про використання Merkle root і proof path дозволяє впевнено перевіряти депозити, перекази й ончейн-взаємодії, а також краще оцінювати кількість підтверджень і ризики.
Легкі гаманці не зберігають усі транзакції з кожного блоку. Їм достатньо мати Merkle root і proof path, щоб перевірити, чи змінена конкретна транзакція — це схоже на перевірку лише штрихкоду на пакунку замість огляду вмісту. Це суттєво знижує вимоги до сховища й пропускної здатності для мобільних пристроїв, забезпечуючи безпечну роботу мобільних гаманців.
Merkle root є “електронним відбитком пальця” для всього блоку. Будь-яке втручання навіть у одну транзакцію змінює її геш і, відповідно, всі батьківські геші до Merkle root. Такий каскадний ефект дозволяє всім вузлам мережі миттєво виявити зміни. Такий підхід забезпечує антивтручальну властивість блокчейну — його основу безпеки.
Пряме об’єднання всіх гешів транзакцій створило б занадто великий рядок, який складно зберігати й порівнювати. Бінарна ієрархія Merkle tree експоненційно стискає складність до одного геша фіксованої довжини. Це забезпечує ефективну перевірку для будь-якої кількості транзакцій без лінійного зростання часу перевірки.
Покладатися лише на Merkle root від одного вузла ризиковано; однак SPV-гаманці зазвичай запитують Merkle root для того ж блоку у кількох незалежних вузлів для перехресної перевірки. Якщо більшість вузлів чесні, підробити помилковий Merkle root надзвичайно складно. Такий баланс між продуктивністю й безпекою підходить для повсякденних платіжних сценаріїв.
Щоразу, коли майнери обирають різні комбінації транзакцій для нового блоку, Merkle root змінюється — відповідно змінюється й геш заголовка блоку. Майнери постійно змінюють порядок транзакцій і nonce для пошуку гешів, що відповідають складності мережі; у цьому процесі перерахунок Merkle root є обов’язковим. Це гарантує, що майнери дійсно обробляють і перевіряють транзакції блоку.


