Перейти к основному содержимому

Эксплорер: обзор

hlf-explorer — это обозреватель блоков Hyperledger Fabric, построенный на hlf-core. Если сам hlf-core отвечает на вопрос «как писать chaincode и клиентов», то эксплорер отвечает на другой, не менее важный вопрос: «что на самом деле происходит в ledger прямо сейчас». Он читает блоки, раскладывает их в базу и отдаёт наружу: и через REST, и в реальном времени по сокету.

Как устроен поток данных​

Проще всего держать в голове одну линию: ledger → backend → база → API → интерфейс.

Ledger (Fabric)source of blocksBackendreads blocks via qscc, parses themPostgreSQLblocks, events, transactionsAPIREST + socketUIreal-time updates@hlf-explorer/monitorparses business eventsof application-level apps
Data flow: the backend fills the database, monitor is an API-consuming layer on top.

Всё начинается с backend. Он подключается к сети напрямую — именно здесь используются @hlf-core/transport, @hlf-core/api и @hlf-core/transport-common. По таймеру backend сверяет высоту ledger с тем, что уже сохранено, вычисляет непрочитанные блоки и на каждый ставит задачу разбора. Разбор читает сырой блок через qscc, прогоняет его через TransportFabricBlockParser и раскладывает в сущности — сам блок, его сырое представление, события и транзакции, после чего сохраняет всё это в PostgreSQL.

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

Из чего он собран​

Сервер — это backend на NestJS с TypeORM и PostgreSQL. Общие модели, DTO и клиент к API вынесены в @hlf-explorer/common — это публикуемый пакет, единый контракт для всех частей. Отдельно стоит @hlf-explorer/monitor — тоже публикуемая библиотека, но уже не про сам эксплорер, а про то, как прикладные приложения потребляют его данные. Ей посвящён следующий раздел.

Веб-интерфейс мы сейчас переписываем заново, поэтому его архитектуру здесь намеренно не фиксируем — она будет описана, когда новый фронтенд встанет на место.