Эксплорер: обзор
hlf-explorer — это обозреватель блоков Hyperledger Fabric, построенный на hlf-core. Если сам hlf-core отвечает на вопрос «как писать chaincode и клиентов», то эксплорер отвечает на другой, не менее важный вопрос: «что на самом деле происходит в ledger прямо сейчас». Он читает блоки, раскладывает их в базу и отдаёт наружу: и через REST, и в реальном времени по сокету.
Как устроен поток данных
Проще всего держать в голове одну линию: ledger → backend → база → API → интерфейс.
Всё начинается с 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 — тоже публикуемая библиотека, но уже не про сам эксплорер, а про то, как
прикладные приложения потребляют его данные. Ей посвящён следующий раздел.
Веб-интерфейс мы сейчас переписываем заново, поэтому его архитектуру здесь намеренно не фиксируем — она будет описана, когда новый фронтенд встанет на место.