Вики ZooBC
Интеграции

Обозреватель и архивные узлы

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

Что хранит обычный узел

Обычный узел хранит текущее состояние (балансы, записи, реестр) и недавнее окно блоков: один–два периода снимков, что в mainnet составляет 30–60 дней. Этого достаточно, чтобы проверять цепочку и помогать новым узлам подключаться со снимка (снимки и быстрая синхронизация). Более старые блоки, транзакции и квитанции обрезаются (обрезка истории), что сохраняет узлы лёгкими. Оператор, который хочет хранить обрезанную историю локально, может задать keep_all_history в node.conf.

Следствие: сам по себе узел не может ответить на запрос «каждая транзакция начиная с блока 0», как и выполнить полнотекстовый поиск по сообщениям.

Архивный сервис

Этот пробел закрывает архивный сервис, zoobc-archival-api. Узел, оператор которого задаёт archival_node = true, запускает его и следит за ним. Сервис читает собственную базу данных SQLite узла и ведёт индекс блоков и транзакций в хранилище MySQL, поэтому может отвечать на запросы об истории, хронологии аккаунтов, статистике и на поисковые запросы. Помимо архивных вариантов обычных маршрутов, он обслуживает собственные:

МаршрутНа что отвечает
/search/transactionsпоиск по транзакциям, включая их сообщения
/stats/…статистика сети
/spine/blocksблоки [[spine-chainspine-цепочки]]
/network/mapкарта сети
/archive/statsстатистика самого архива

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

Объявление в цепочке

Владелец зарегистрированного узла объявляет архивный сервис транзакцией RegisterArchival (тип 46). Названный ключ узла должен принадлежать зарегистрированному узлу, которым владеет отправитель. Стейк не блокируется, а UnregisterArchival (тип 47) отзывает запись. Любой может получить список объявленных сервисов по адресу GET /api/v1/registry/archivals, а веб-кошелёк читает этот список, когда его шлюз отказывает.

Узел, хранящий состояние и недавние блоки; архивный сервис читает его базу данных в индекс MySQL из блоков, транзакций и сообщений; шлюз отдаёт из него страницу обозревателя; RegisterArchival связывает сервис с его зарегистрированным узлом
Узел, хранящий состояние и недавние блоки; архивный сервис читает его базу данных в индекс MySQL из блоков, транзакций и сообщений; шлюз отдаёт из него страницу обозревателя; RegisterArchival связывает сервис с его зарегистрированным узлом

Обозреватель

Обозреватель — веб-страница, которую отдают шлюзы. Он построен на архивных маршрутах: блоки, транзакции, аккаунты, узлы, spine-цепочка, статистика и поиск. Шлюз отправляет каждый запрос на чтение к API сначала своему архивному сервису, а для маршрутов, которых у архивного сервиса нет, переходит к узлу. Обозреватель также показывает версию программы каждого узла, так что операторы и наблюдатели могут видеть, кто обновился (релизы и обновления).

Всё это — публичные данные цепочки: ключ нужен, чтобы действовать в цепочке, но никогда — чтобы на неё смотреть (API узла).

Не единственный способ прочитать прошлое

Архивный сервис — это удобство, а не память цепочки.

Каждый снимок начиная с блока 0 хранит децентрализованное хранилище, а не каждый узел, чтобы любой мог пройти по spine-цепочке назад до снимка нужного времени и восстановить состояние таким, каким оно было, не опираясь ни на какой архивный узел (архив и чтение прошлого).

Чего архивные сервисы не делают: они не создают блоков — это делают только зарегистрированные узлы, — и нет никакой центральной базы данных ZooBC Foundation, которой отчитываются узлы. Ретрансляторы передают звонки между кошельками, а не транзакции (ретрансляторы).

См. также