
Merkle root — это единый хеш, который агрегирует все транзакции в блоке. Его получают путем последовательного объединения хешей транзакций в виде дерева. Этот хеш сохраняется в заголовке блока и служит компактным подтверждением состава транзакций в блоке.
В данном контексте «хеш-функция» — это алгоритм, сжимающий любые данные в отпечаток фиксированной длины. «Заголовок блока» — это часть метаданных, содержащая такие элементы, как временная метка, хеш предыдущего блока и Merkle root, что позволяет сети быстро проверять блоки.
Merkle root позволяет пользователям проверить наличие транзакции в блоке без необходимости загружать все транзакции. Для проверки требуется минимальный объем данных, что дает возможность легким нодам — клиентам, скачивающим только заголовки блоков, — и мобильным кошелькам безопасно работать с ограниченными ресурсами.
В Bitcoin механизм SPV (Simplified Payment Verification) основан на Merkle root. Кошельки скачивают заголовок блока и используют короткий путь доказательства для сравнения с Merkle root, чтобы определить наличие транзакции. Для блоков с тысячами транзакций это существенно снижает требования к пропускной способности и объему хранения.
По данным публичных блок-эксплореров, в большинстве блоков Bitcoin содержится от 1 000 до 3 000 транзакций (источник: mempool.space, октябрь 2025). На таком уровне эффективность Merkle root особенно заметна.
Чтобы вычислить Merkle root, хеши транзакций объединяют вверх по дереву Merkle, пока не останется один хеш.
Шаг 1. Для каждой транзакции вычисляется хеш — отпечаток фиксированной длины, получаемый из данных транзакции.
Шаг 2. Соседние хеши транзакций объединяют попарно, конкатенируют и хешируют, чтобы получить хеш родительского узла. Так формируется следующий уровень дерева.
Шаг 3. Если в уровне нечетное число хешей (как в Bitcoin), последний хеш дублируют для завершения пары — детали могут различаться в зависимости от блокчейна.
Шаг 4. Процесс повторяют, пока наверху не останется один хеш — это и есть Merkle root. В Bitcoin промежуточные хеши часто дополнительно хешируют дважды для повышения устойчивости к коллизиям и атакам на удлинение.
Дерево Merkle структурирует большие массивы данных в виде хешей, расположенных иерархически в двоичном дереве. Каждый лист — это хеш транзакции, а каждый родительский узел — объединенный хеш двух дочерних. Merkle root — это верхний хеш дерева, который резюмирует все нижележащие данные.
Это похоже на структуру папки: листья — отпечатки файлов, верхние уровни — отпечатки подпапок, а Merkle root — общий отпечаток всей папки. Если изменяется любой лист, меняются все вышестоящие хеши до самого корня, что делает Merkle root надежным показателем изменений данных.
Чтобы проверить, включена ли транзакция в блок, восстанавливают путь доказательства от транзакции до Merkle root и сравнивают его с Merkle root в заголовке блока.
Шаг 1. Получите хеш транзакции — его можно скопировать из кошелька или из блок-эксплорера на странице транзакции.
Шаг 2. Получите Merkle proof — блок-эксплореры обычно предоставляют набор «хешей пути» (соседних хешей для объединения по уровням).
Шаг 3. Последовательно объединяйте и хешируйте хеш транзакции с каждым хешем пути на каждом уровне, пока не получите верхний хеш.
Шаг 4. Сравните полученный верхний хеш с Merkle root блока. Если значения совпадают, транзакция действительно входит в этот блок.
На практике, например при пополнении на Gate, на странице подтверждения указывают высоту блока и предоставляют ссылки на блок-эксплореры. Можно перейти по этим ссылкам, найти Merkle root в заголовке блока и выполнить самопроверку по описанным шагам.
В Bitcoin Merkle root — это верхний хеш двоичного дерева Merkle, построенного из всех транзакций, который записывается в поле «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 roots.
Шаг 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 экспоненциально сжимает сложность до одного фиксированного по длине корневого хеша. Это обеспечивает эффективную проверку любого количества транзакций без роста времени проверки по мере увеличения их числа.
Полагаясь только на Merkle root одного узла, есть риск ошибки, однако SPV-кошельки обычно запрашивают Merkle root для одного и того же блока у нескольких независимых узлов для перекрестной проверки. Пока большинство узлов честны, подделать ложный Merkle root практически невозможно. Такой подход обеспечивает баланс между производительностью и безопасностью для повседневных платежей.
Каждый раз, когда майнеры выбирают разные наборы транзакций для нового блока, Merkle root меняется, что приводит к изменению хеша заголовка блока. Майнеры постоянно меняют порядок транзакций и nonce, подбирая хеши, которые соответствуют требованиям сложности сети; в этом процессе пересчет Merkle root обязателен. Это гарантирует, что майнеры действительно обрабатывают и проверяют содержимое транзакций.


