В прошлом месяце я писал о том, как самостоятельно проверить «обеспечение 1:1» для BRL1.p. Тогда я проверил лишь один снимок от 17 октября. Позже я и сам положил деньги в казначейство, и меня не отпускал вопрос: кто следит за всем в каждый день после снимка? На этой неделе я настроил автоматическую проверку каждые 6 часов, а заодно сверил все межсетевые переводы с момента запуска. В итоге обнаружил на два пункта больше, чем ожидал.

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

Я проверил все три аспекта BRL1.p. С момента запуска все 18 межсетевых переводов сошлись, а за 36 изменений баланса объём выпущенных токенов ни разу не превысил баланс хранилища. Но два момента не были видны в предыдущем снимке: один из трёх верификаторов, чья подпись обязательна, сменил ключи в первый же день работы BRL1.p, а позже его имя в реестре LayerZero сменилось с Nethermind на Twinstake; кроме того, все 54 проверки, проведённые тремя верификаторами, были отправлены в блокчейн одним и тем же аккаунтом.

Что не удалось увидеть по одному снимку

BRL1.p — это версия стейблкоина бразильского реала BRL1, переведённая в публичный блокчейн Rayls. Пользователь вносит BRL1 в контракт-хранилище в сети Polygon, LayerZero передаёт сообщение в Rayls, где выпускается такое же количество BRL1.p. В обратном направлении токены сначала сжигаются, а затем разблокируются.

В снимке от 17 октября баланс хранилища и объём выпущенных BRL1.p составляли 250,013.482911 — до последней цифры. Но сам снимок не может рассказать, что происходило между двумя снимками. Тогда я сопоставлял блокировку и выпуск по сумме, адресу и времени, не используя идентификаторы сообщений LayerZero. Если бы я что-то сопоставил неверно, это осталось бы незамеченным. Что касается «трёх верификаторов», в снимке были только три адреса из конфигурации — без информации о том, кто за ними стоит и какими ключами они подписывают сообщения.

Код, записи по каждой транзакции и журналы каждого запуска опубликованы в папке 2026-11-brl1p-monitor репозитория hansonhan0520-lang/rayls-verify. GitHub Actions автоматически запускает проверку каждые 6 часов и отправляет результаты обратно в репозиторий. Цифры в этой статье получены в ходе нескольких запусков с 03:25 до 03:56 UTC 6 ноября 2026 года.

Первое: сверка каждой транзакции по идентификатору сообщения

LayerZero присваивает каждому межсетевому сообщению уникальный идентификатор GUID. При отправке он записывается в событие OFTSent в исходной сети, а при получении — в событие OFTReceived в целевой сети. Только совпадение идентификаторов подтверждает, что речь идёт об одной и той же транзакции.

Результат: 18 транзакций — 16 из Polygon в Rayls и 2 из Rayls в Polygon. GUID каждой транзакции совпадает в обеих сетях, количество заблокированных токенов равно количеству выпущенных, а хеши транзакций в обеих сетях, указанные в собственном обозревателе сообщений LayerZero Scan, совпадают с данными блокчейна. LayerZero нумерует сообщения в каждом канале по порядку: у этих 16 транзакций номера от 1 до 16, а у транзакций в обратном направлении — 1 и 2. Пропусков нет, значит, в таблице не потеряно ни одного сообщения. Я также проверил обратное: каждому изменению баланса хранилища и объёма выпущенных BRL1.p соответствует межсетевая транзакция — не было ни одного выпуска или перевода «из ниоткуда».

Время доставки: из Polygon в Rayls — от 248 до 293 секунд, медиана — 267 секунд; в обратном направлении — 57 и 63 секунды. В прошлый раз диапазон для 13 транзакций составлял от 248 до 274 секунд. Новая транзакция от 28 октября заняла 293 секунды и увеличила верхнюю границу.

Второе: объединяем две сети в одну временную шкалу

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

Я расположил 36 изменений баланса в обеих сетях по времени блока и каждый раз рассчитывал разницу между ними. После каждого изменения разница оставалась неотрицательной, а минимальное значение было ровно 0: ни в какой момент объём выпущенных токенов не превышал баланс хранилища. Данные по Polygon проверялись не только по событиям: для блоков с 18 изменениями баланса я напрямую считал balanceOf хранилища на двух независимых архивных узлах (drpc и Tenderly). Все значения совпали с расчётными, расхождений не было.

Я также повторно проверил административные права. С 14 октября по 6 ноября каждый день в 00:00 UTC я считывал владельца хранилища Polygon, контракт на другой стороне, делегатов LayerZero и конфигурацию верификаторов. Все 24 дня данные были одинаковыми. Все 18 событий администрирования и конфигурации, которые удалось найти в обеих сетях, произошли во время развёртывания 13 октября с 18:05 до 18:10. После этого изменений не было. Описанная в прошлый раз ситуация не изменилась: права на выпуск и сжигание есть только у межсетевого адаптера, а администраторские права, права на приостановку и обновление, а также владение контрактами в обеих сетях по-прежнему принадлежат одному и тому же обычному адресу кошелька.

Третье: кто именно подписывает разрешение

В этом году здесь произошёл серьёзный инцидент. В апреле из межсетевого моста KelpDAO похитили около 292 млн долларов. В отчёте LayerZero об инциденте за май причиной названы манипуляции с RPC-узлами и конфигурация, в которой приложение полагалось только на одного верификатора. В терминологии LayerZero верификаторы называются DVN: они видят сообщение в исходной сети, дожидаются необходимого количества подтверждений и подписывают разрешение в целевой сети. В обоих направлениях BRL1.p требует подписи всех трёх DVN: LayerZero Labs, Canary и DVN с идентификатором nethermind.

Сначала проверим, действительно ли они подписывали сообщения. До поступления каждого сообщения в целевой сети остаётся по одной записи PayloadVerified от каждого DVN. Для 16 сообщений из Polygon в Rayls на Rayls приходится по три записи на каждое — всего 48; для двух сообщений в обратном направлении на Polygon также по три записи на каждое — всего 6. В каждой записи указано ровно требуемое количество подтверждений: 120 блоков для Polygon и 10 блоков для Rayls. Проверки на Rayls поступали через 232–253 секунды после блокировки в Polygon. Большая часть этих четырёх с лишним минут межсетевой передачи уходит на ожидание 120 блоков Polygon.

Теперь посмотрим, кто подписывал. Контракты DVN требуют, чтобы каждая проверка сопровождалась подписями заданного числа подписантов. Эти подписи содержатся во входных данных транзакции проверки, откуда можно восстановить адреса подписантов. Я восстановил подписи для всех 54 проверок: порог LayerZero Labs — 2 подписи из 3, и во всех 16 случаях использовались одни и те же два ключа; порог Canary — 1 подпись из 1, и во всех 16 случаях использовался один и тот же ключ.

Изменения произошли у третьего DVN. Первые 4 транзакции (14 октября) были подписаны ключом 0xbbd4; начиная с 5-й (15 октября) использовался ключ 0x86f0, а одна транзакция была подписана ключом 0x598c. Записи в блокчейне показывают, что с 19:55 14 октября до 00:30 15 октября UTC этот DVN одновременно в Polygon и Rayls добавил двух подписантов и удалил прежнего. Это произошло ровно между 4-й и 5-й транзакциями BRL1.p.

Изменилось и название. В журнале моего запуска от 17 октября публичный реестр DVN LayerZero указывал для этого адреса Nethermind; при повторной проверке 6 ноября — Twinstake, при этом идентификатор по-прежнему был nethermind. 19 августа Nethermind объявила, что прекращает работу в качестве DVN LayerZero и переключается на узлы Chainlink. Наиболее вероятное объяснение этих событий — DVN Nethermind перешёл под управление Twinstake, а вместе с этим сменились и ключи подписи. Это мой вывод: в блокчейне видно лишь, что ключи сменились 14 октября, но не видно, у кого они находятся; реестр — это офчейн-метки, которые поддерживает LayerZero, и мне доступны только версии за две даты, поэтому точное время переименования неизвестно.

Есть и ещё одна общая деталь. Все 54 транзакции проверки, независимо от DVN и сети, были отправлены одним и тем же аккаунтом 0xb8ff…47cb. Этот аккаунт и ещё один — 0xb52f…f0b6 — имеют административные роли во всех шести контрактах DVN (по три в каждой сети). В Polygon с этого аккаунта уже отправлено более 8,88 млн транзакций. Согласно коду контрактов и документации LayerZero, администратор отвечает за отправку, но каждая отправка должна содержать подписи необходимого числа подписантов. Администратор не может подделать проверку в одиночку. Поэтому моё понимание такое: с точки зрения безопасности три замка по-прежнему защищены тремя разными группами ключей, и для подделки сообщения потребуется получить как минимум 4 ключа подписи (2 + 1 + 1); с точки зрения доступности канал отправки централизован в одном аккаунте, и если он остановится, межсетевые переводы в обоих направлениях застрянут в ожидании. Последнее — вывод на основе кода; остановки я не наблюдал.

Проблема с воспроизводимостью: официальный узел не позволяет восстановить историю

Чтобы другие могли воспроизвести проверку, нужно объяснить, откуда взяты данные. Официальный публичный узел Rayls здесь мало помогает: при чтении любого исторического состояния он сообщает, что данные «обрезаны»; ему недоступен даже блок от 17 октября. При запросе журналов BRL1.p и адаптера в диапазоне до 1,5 млн блоков он возвращает 0 записей; получить квитанции ни для одной из 18 транзакций Rayls не удалось. При этом сами транзакции находятся, а во входных данных всех 16 транзакций получения содержатся соответствующие GUID, адрес получателя и сумма. Входные данные двух транзакций отправки также содержат адрес получателя и сумму.

Поэтому историю событий на стороне Rayls можно получить только из обозревателя блоков Rayls. Я сверил её по трём источникам: данным LayerZero Scan, входным данным транзакций, полученным от официального узла, и текущему объёму выпущенных токенов, считанному с официального узла, — 255,291.961901. Он полностью совпадает со значением, восстановленным по событиям обозревателя. Для журналов в Polygon я использовал узлы PublicNode и Tenderly; их данные совпали до каждой записи.

Резервы: всё тот же отчёт

Межсетевой мост обеспечивает только соотношение один к одному между BRL1.p и BRL1. Чтобы узнать, обеспечен ли сам BRL1 бразильскими реалами, нужно смотреть подтверждение резервов эмитента. На 6 ноября последним документом, который можно было скачать с brl1.io, оставался отчёт от 1 октября: резервы в размере 19,354,372 реалов против 17,381,384.54 BRL1, коэффициент обеспечения — 111.35%. В отчёте указано, что он подготовлен внутри компании и ещё не прошёл независимый аудит. При этом текст ссылки на сайте гласит: «последнее проверенное подтверждение резервов». Ссылка, отмеченная как «последняя» на странице «Как это работает», ведёт на отчёт от 14 апреля 2025 года, также подготовленный внутри компании. Для просмотра ещё одной ссылки требуется войти в Google, а страница резервов Fact Finance, на которую ведёт ссылка с сайта, возвращает ошибку 404.

Количество токенов в двух доступных отчётах я сверил по указанным в них номерам блоков; показания двух архивных узлов совпали с данными отчётов. Это подтверждает, что часть отчёта о «обязательствах» соответствует данным блокчейна; часть об «активах» по-прежнему основывается только на заявлениях эмитента. На 6 ноября в Polygon уже было 17,882,561.54 BRL1 — на 501,177 больше, чем 1 октября. Резервы, соответствующие этой части, не охвачены ни одним публичным отчётом.

В качестве примера независимого подтверждения можно взять США (закон GENIUS): эмитент ежемесячно раскрывает состав резервов, генеральный и финансовый директора заверяют его подписями, а внешняя бухгалтерская фирма проводит аттестацию. BRL1 — бразильский стейблкоин, на него этот закон не распространяется; здесь он служит лишь ориентиром. Когда BRL1 действительно опубликует независимый отчёт, сначала стоит проверить, подписан ли он независимой бухгалтерской фирмой и указано ли в нём, какой вид аттестации проводился и по каким стандартам. Проверить, можно ли считать количество токенов из отчёта на указанном в нём блоке, позволяет скрипт por_check.py из репозитория.

Что пока не удалось сделать

История событий на стороне Rayls зависит от обозревателя блоков; официальный узел позволяет лишь сверить данные, но не восстановить их независимо. Ежедневные показатели Polygon снимаются только в 00:00, однако каждое изменение баланса дополнительно проверено по соответствующему блоку. По данным блокчейна нельзя установить, кто владеет ключами подписи и кто управляет аккаунтом 0xb8ff. Автоматическая проверка запущена 6 ноября и охватывает только последующий период; более ранние данные были восстановлены по истории.


Моё мнение

Проверка каждой транзакции показала, что сам межсетевой перевод работает безупречно: все 18 транзакций сошлись, а объём выпущенных токенов ни разу не превысил баланс хранилища. Уровень подписей оказался сложнее, чем можно предположить по словам «три верификатора»: с точки зрения безопасности действительно используются три разные группы ключей, но одна из них сменила ключи в первый же день после запуска, а канал отправки только один. Самым слабым звеном по-прежнему остаётся уровень эмитента: последнее подтверждение резервов — это внутренний отчёт без аудита.

Критерий простой. Любой может запустить рабочий процесс brl1p-monitor в репозитории rayls-verify или посмотреть результаты, которые публикуются каждые 6 часов. Если появится новое событие администрирования или конфигурации, верификатор сменит подписантов, объём выпущенных токенов хоть раз превысит баланс хранилища или BRL1 опубликует отчёт о резервах с независимой аттестацией, это отразится при следующем запуске.

Источники:

Код статьи, записи по каждой транзакции и журналы запусков (отправлено 6 ноября 2026 года): https://github.com/hansonhan0520-lang/rayls-verify/tree/4e37e76f7541fbea2cba1c0b8967c46afa905677/2026-11-brl1p-monitor

Журналы запусков для предыдущего снимка (17 октября 2026 года): https://github.com/hansonhan0520-lang/rayls-verify/tree/main/2026-10-brl1p-backing

Техническая документация контракта LayerZero DVN: https://docs.layerzero.network/v2/workers/off-chain/dvn-technical-reference

Публичный реестр LayerZero DVN: https://metadata.layerzero-api.com/v1/metadata/dvns

Отчёт LayerZero об инциденте с KelpDAO (18 мая 2026 года): https://layerzero.network/publications/kelpdao-incident-report.pdf

crypto.news, Nethermind прекращает работу в качестве верификатора LayerZero (19 августа 2026 года): https://crypto.news/nethermind-leaves-layerzero-verifier-role-chainlink/

Официальный сайт BRL1 и документы с подтверждением резервов (по состоянию на 6 ноября 2026 года): https://brl1.io/en

Американский центр качества аудита, требования закона GENIUS к бухгалтерам (27 октября 2025 года): https://www.thecaq.org/audit-in-action-what-does-the-genius-act-require-of-accountants

#Rayls $RLS #стейблкоины