Деревья Меркла в доказательстве резервов: как один хеш запирает миллионы балансов

2026-09-10

Деревья Меркла в доказательстве резервов: как один хеш запирает миллионы балансов

Дерево Меркла позволяет бирже опубликовать одно короткое значение, которое разом связывает её с каждым пользовательским балансом. Каждый пользователь становится листом, листья попарно хешируются вверх, пока не останется единственный корень, и любое изменение где угодно ниже даёт совершенно другой корень. Поэтому опубликованный корень является обязательством, а не обещанием, и поэтому вы доказываете своё включение, не видя чужих данных.

Как работает дерево Меркла в доказательстве резервов: листья, попарное хеширование вверх и корень, меняющийся при любом изменении ниже

Какую задачу решает дерево Меркла

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

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

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

Части и их названия

Термин Что это Почему важно
Лист Хеш снимка балансов одного пользователя Это та строка, которую вы проверяете лично
Текст листа Точная строка, которую хешируют в лист Различие в формате меняет хеш
Сосед Второй хеш, нужный на каждом уровне Именно они лежат в вашем файле доказательства
Путь доказательства Соседи от вашего листа до корня Он короткий даже при миллионах пользователей
Корень Единственный хеш на вершине Это и есть значение, публикуемое биржей

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

Как строится лист

Лист — это хеш небольшого фрагмента текста, описывающего один счёт на момент снимка. Этот текст называет версию алгоритма, идентификатор раскрытия, к которому он относится, идентификатор записи для счёта и балансы в охваченных активах.

Два правила форматирования делают больше, чем кажется. Балансы записываются с фиксированным числом знаков после запятой, поэтому одна и та же сумма всегда даёт один и тот же текст, а активы идут в фиксированном порядке, а не в том, в каком их выдала система. Без любого из этих правил две реализации хешировали бы один счёт по-разному, и независимая проверка падала бы по причинам, не связанным с честностью.

Счёт обозначается идентификатором записи, а не чем-либо о вас. Именно это позволяет публиковать структуру дерева, оставаясь неинформативным о том, кто в нём. Публикуемые вокруг него поля разобраны в статье как читать отчёт о доказательстве резервов.

Как дерево строится вверх

Листья соединяются парами. Два хеша складываются в одну строку, эта строка хешируется и даёт узел уровнем выше; такие узлы соединяются попарно тем же способом, и процесс повторяется, пока не останется одно значение.

Порядок важен на каждом соединении, и именно эта деталь подводит тех, кто пишет верификатор. У каждого шага есть левая и правая сторона, и хеширование их в обратном порядке даёт другой результат. Поэтому файл доказательства записывает не только какой соседний хеш брать на каждом уровне, но и с какой он стороны, а ваш верификатор обязан следовать этой инструкции, а не сортировать два значения.

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

Почему подмена обнаруживается

У хеш-функций есть свойство: малое изменение на входе даёт никак не связанный выход. Измените один баланс на минимально представимую величину, и его лист изменится полностью, изменится его родитель, и вместе с ним изменится каждый узел на пути до корня.

Именно это превращает публикацию в обязательство. Как только корень стал публичным, биржа не может исправить баланс, вставить счёт или убрать его, не получив другого корня. Она не может сделать это тихо и не может сделать это для одного пользователя, не сломав проверку всем, чей путь идёт через ту же ветвь.

Обязательство связывает лишь тогда, когда корень был опубликован раньше, чем кому-то понадобилось, чтобы он оказался неверным: поэтому момент публикации и публичная запись корня важны не меньше самой математики. Как прогнать сравнение самому, изложено в статье как проверить доказательство резервов.

Почему соседи остаются приватными

Ваш путь доказательства содержит хеши других частей дерева, а хеш необратим в данные, из которых получен. Вы узнаёте, что сосед существует и каков его хеш; вы не узнаёте, чьи балансы под ним и каковы они.

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

Реализации обычно усиливают это ещё и тем, что выполняют проверку локально, а не отправляют ваши данные обратно на сервер. Здесь довод приватности и довод проверяемости указывают в одну сторону, что редкость и стоит внимания.

Где структура перестаёт помогать

Дерево Меркла доказывает членство в множестве. Оно говорит, что ваша строка была в дереве, чей корень опубликован, и не говорит ровным счётом ничего о том, было ли это множество правильным.

Отсюда прямо следуют три ограничения. Дерево не скажет, все ли счета были включены, потому что пропущенный счёт не оставляет следа для тех, кто остался. Оно не скажет, существуют ли активы: это отдельное ончейн-утверждение, а не свойство структуры. И оно ничего не скажет об обязательствах сверх вошедших балансов, о чём и идёт речь в статье доказательство резервов и обязательства.

Ничто из этого не является изъяном криптографии. Это граница того, о чём можно просить доказательство членства, и знание границы не даёт продавать структуру дороже, чем она стоит.

Итог

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

Его сила в том, что подмену после публикации невозможно скрыть, а включение доказывается, никого не раскрывая. Его граница в том, что доказывается только членство: полнота множества, существование активов и размер обязательств лежат вне дерева. Читайте дальше материалы Bitbase Academy.

Дисклеймер: эта статья — образовательный материал Bitbase Academy, только для информационных целей. Она не является инвестиционным, торговым, налоговым или финансовым советом. Криптоактивы волатильны — оценивайте риски самостоятельно. Написано в сентябре 2026 года; сверяйтесь с актуальной официальной информацией.

Источники

[1] Bitbase, «Доказательство резервов» — ежемесячное раскрытие, корень Меркла и открытый верификатор www.bitbase.com