Подписка на поток данных (State History / SHiP)¶
Подписка на поток данных в экосистеме COOPOS — это клиентская библиотека и примеры на TypeScript: подключение к узлу с State History (SHiP) по WebSocket, приём бинарного потока (блоки, трассы, дельты таблиц) и выдача данных в приложение в удобном для обработки виде (в т.ч. через RxJS).
Исходный код и инструкции: репозиторий coopenomics/coopos-ship-reader.
Зачем нужен отдельный клиент¶
На стороне nodeos протокол SHiP минимален: узел отдаёт сырые бинарные сообщения. Клиент должен хранить актуальные ABI, десериализовать действия и строки таблиц и учитывать микрофорки, если состояние строится вне узла.
Библиотека закрывает эту часть: поток оформлен как подписка (RxJS), тяжёлую десериализацию можно выносить в worker threads — удобно для индексаторов, синхронизации с PostgreSQL, GraphQL и других сервисов с непрерывной историей, а не разовыми HTTP-запросами.
С чем работает в связке¶
| Компонент | Роль |
|---|---|
Узел COOPOS с state_history_plugin |
Источник потока по SHiP (TCP или Unix socket). См. State History (SHiP). |
| State-нода (выделенная или совмещённая с API) | Типовой хост SHiP для «архивной» подачи истории. |
| Light-нода | Состояние с момента снимка и новые блоки; при включённом SHiP поток ограничен тем, что есть на узле (не полная история с генезиса). Часто индексатор смотрит на отдельную state-ноду, а light оставляют под локальный API и P2P. |
| Клиент подписки | Подключение к ws_url, запрос диапазона блоков, обработка потоков блоков, дельт, ABI. |
Транспорт и формат сообщений — как у SHiP в COOPOS.
Как устроено кратко¶
- Приложение берёт
get_infoпо HTTP узла (часто тот же хост, что Chain API), чтобы знать голову цепи и при необходимостиchain_id. - Задаётся конфигурация: WebSocket SHiP (
state-history-endpointили аналог), число потоков десериализации, фильтры дельт/таблиц, параметры запроса (start_block_num, флагиfetch_block/fetch_traces/fetch_deltasи т.д.). - После
start()приложение получает Observable-потоки: блоки, строки по дельтам, обновления ABI послеsetabiв цепи. - Подписчики пишут данные во внешнее хранилище, в шину событий или в кэш.
Примеры — в examples и README coopos-ship-reader.
Где читать дальше¶
- State History (SHiP) — плагин и опции на узле.
- Ноды и синхронизация истории — роли узлов, в т.ч. HISTORY/state и light.
- Конфигурация: state-нода — пример профиля узла под выдачу истории.