Все записи

7 мин чтения

Proof of Reserves на основе корней Merkle

Корень Merkle, закреплённый меткой времени Label 309, позволяет зафиксировать снимок резервов, обязательств или свидетельств и доказать включение отдельным клиентам — не публикуя каждый счёт.

Корень Merkle способен сильно упростить проверку снимка proof-of-reserves, но сам по себе не доказывает платёжеспособность. Он подтверждает, что определённый набор записей был зафиксирован в определённый момент времени. А складываются ли эти записи в платёжеспособный бизнес — вопрос отдельный.

Схема выглядит так. Биржа, кастодиан, финтех-компания, маркетплейс, эмитент стейблкоина или внутренняя казначейская команда строит дерево Merkle над снимком резервов или обязательств, а затем закрепляет единственный 32-байтовый корень записью Label 309 в Cardano. Каждый клиент, кошелёк или строка баланса — это лист. Позже любому участнику можно передать короткое доказательство включения, показывающее, что его запись входила в зафиксированный снимок, — при этом весь набор данных так и не публикуется.

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

Что такое снимок proof-of-reserves?

Снимок proof-of-reserves — это свидетельство об активах на определённый момент времени.

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

Снимок может включать:

  • балансы резервных кошельков;
  • идентификаторы активов;
  • высоты блоков;
  • балансы обязательств;
  • обязательства по клиентским счетам;
  • исключения и корректировки;
  • отчёты аудиторов;
  • свидетельства контроля;
  • файлы сверки;
  • заявления руководства.

Снимок — это не «живой» баланс. Это обязательство, зафиксированное на конкретный момент времени.

Зачем использовать корень Merkle?

Затем, что полный снимок обычно слишком велик или слишком чувствителен, чтобы его публиковать.

Дерево Merkle позволяет компании зафиксировать множество записей одним 32-байтовым корнем. Каждый клиент, счёт, кошелёк или строка баланса становится листом, листья хешируются вместе в дерево, и в блокчейн попадает только корень. Корень ничего не раскрывает о листьях, которые фиксирует, но при этом связан со всеми ними: измените любой лист или число листьев — и корень уже не совпадёт. Позже участник получает доказательство включения — короткий путь из соседних узлов, порядка log n хешей, — показывающее, что его запись входила в зафиксированный снимок.

Именно это и делает возможным избирательное раскрытие:

  • отдельный клиент может проверить только своё собственное включение;
  • аудитору можно передать полный список листьев и сопоставление со счетами;
  • публика видит лишь корень с меткой времени;
  • чувствительные детали счетов раскрывать не приходится.

Это тот же механизм пакетирования, что стоит за закреплением одной записи для тысяч файлов: корень компактен, но по-настоящему важен лежащий в основе процесс.

Что добавляет Label 309?

Он добавляет независимую публичную метку времени, которую не контролирует ни одна сторона.

Отчёт proof-of-reserves часто живёт на сайте или в PDF, а корень Merkle — в записи блога. Но сайт можно изменить. PDF можно подменить. Отчёт можно тихо обновить, и старый корень исчезнет вместе с ним.

Публикация корня снимка в записи Label 309 даёт обязательству вместо этого публичную точку фиксации во времени в Cardano. Любой сможет позже убедиться, что тот же самый корень существовал к моменту блока транзакции, — используя только метаданные транзакции и публичный обозреватель блокчейна Cardano, без сервера издателя и без доверия к домену или инфраструктуре CardanoWall.

Запись также может содержать:

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

Что должно входить в снимок?

Определите утверждение прежде, чем строить дерево.

Снимок должен ясно показывать, что именно он подтверждает. Снимок только резервов — не то же самое, что снимок резервов и обязательств. Снимок только кошельков — не то же самое, что проверенная аудитором финансовая отчётность.

Полезными полями могут быть:

  • идентификатор снимка;
  • время снимка;
  • блокчейн и идентификатор актива;
  • высота блока или ссылка на реестр;
  • адрес кошелька или внутренний идентификатор счёта;
  • баланс;
  • хеш записи обязательства;
  • хеш идентификатора клиента или обезличенный идентификатор;
  • хеш листа включения;
  • ссылка на аудитора или проверяющего;
  • хеш отчёта;
  • описание охвата;
  • исключения;
  • индекс листа Merkle.

Схема должна быть детерминированной. Если построение листа неоднозначно, проверка становится хрупкой.

Как клиенты могут проверить включение?

Компания передаёт каждому клиенту пакет доказательства.

Этот пакет может включать:

  • собственную балансовую запись клиента;
  • соль или обезличивающий материал, если они используются;
  • путь Merkle;
  • корень;
  • ссылку на транзакцию Label 309;
  • хеш отчёта;
  • инструкции по проверке.

Клиент проверяет, что его запись хешируется в лист, что путь Merkle сворачивается до опубликованного корня и что этот корень совпадает с тем, что записан в Label 309 в блокчейне. Ничего из этого не требует, чтобы серверы компании были в сети или честны, — открытые инструменты Label 309, включая консольную утилиту cardanowall, могут проверить запись и независимо сверить доказательства включения.

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

Как этим могут пользоваться аудиторы?

Аудиторы могут изучить полный набор свидетельств.

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

Label 309 может помочь, закрепив:

  • публичный корень;
  • хеш полного приватного манифеста;
  • свидетельства о балансах кошельков;
  • файлы обязательств;
  • выгрузки сверок;
  • черновики аудиторского отчёта;
  • итоговый подписанный отчёт.

Это затрудняет переписывание аудиторского следа задним числом.

А как быть с исправлениями?

Исправления должны быть видны, а не спрятаны.

Если компания обнаруживает ошибку в снимке, ей следует опубликовать исправленную запись, а не молча подменять старый отчёт. В Label 309 для этого есть встроенный механизм: указатель supersedes несёт хеш транзакции предыдущей записи, создавая связь только для добавления — от исправления обратно к тому, что оно замещает.

В этой связи стоит понять две вещи. Во-первых, замещение не удаляет и не аннулирует предыдущую запись — блокчейн работает только на добавление, поэтому исходный корень остаётся в сети и навсегда проверяем независимо. Новая запись располагается рядом и указывает назад; читатель видит обе. Во-вторых, чтобы этой связи можно было доверять, обе записи должны быть подписаны одним и тем же ключом. Кто угодно может опубликовать запись, которая утверждает, что замещает вашу, поэтому верификаторы и инструменты должны учитывать указатель замещения только тогда, когда замещающая запись подписана ключом, который присутствует и в исходной. Если вы намерены выпускать исправления — подписывайте свои снимки.

Это куда лучше, чем делать вид, что первого корня никогда не существовало.

Что это не доказывает?

Само по себе это не доказывает платёжеспособность.

Не доказывает, что были учтены все обязательства.

Не доказывает, что активы свободны от обременений.

Не доказывает, что ключи находятся под надёжным контролем.

Не доказывает, что активы не были временно заимствованы ради снимка.

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

Доказывает же оно нечто узкое, но по-настоящему полезное: конкретное обязательство существовало в публичный момент времени, и можно показать, что отдельные записи входят в него. Как и любое Proof of Existence, это подтверждение времени и целостности, а не истинности или прав.

Где это может пригодиться за пределами криптобирж?

Та же схема работает везде, где у снимка много приватных записей.

Примеры:

  • резервы стейблкоинов;
  • отчёты о токенизированных активах;
  • балансы продавцов на маркетплейсах;
  • кастодиальные балансы финтех-компаний;
  • внутренние казначейские снимки;
  • реестры долей сотрудников;
  • обязательства по бонусным баллам;
  • запасы углеродных кредитов;
  • резервы по страховым требованиям;
  • реестры клиентских депозитов.

Общая идея проста: зафиксировать множество записей, раскрывать избирательно, сохранить метку времени.

Коротко

Корни Merkle делают снимки proof-of-reserves масштабируемыми. Label 309 делает корень помеченным во времени и независимо проверяемым по публичному блокчейну.

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

И затем честно признайте предел: корень Merkle с меткой времени — это не платёжеспособность. Это один сильный, защищённый от подделки элемент более широкого процесса доказательства. Сам Label 309 — открытый, независимый от вендоров стандарт, поданный в процесс Cardano CIP и в настоящее время рассматриваемый редакторами CIP как предложение категории Metadata; описанные выше механики пакетирования, хеширования и замещения определены в стандарте, а не в каком-либо отдельном продукте.

Что почитать дальше

compliance-legalmerkleaudit