Пример конфигурации: state-нода (история / SHiP)¶
State-нода в прикладном смысле — это узел, на котором включён state_history_plugin, чтобы отдавать историю цепи потоком (блоки, трассировки, дельты таблиц) по протоколу State History (SHiP). Такой узел обычно называют близко к HISTORY-ноде в обзоре ролей узлов.
Совмещение с API-нодой¶
Один и тот же процесс nodeos может одновременно:
- обслуживать Chain API (
chain_api_plugin+http_plugin); - вести журналы SHiP и слушать WebSocket на
state-history-endpoint.
Это удобно для небольших установок: один хост и для get_table_rows, и для индексатора по SHiP. Обязательным совмещение не является: для изоляции нагрузки и безопасности часто выделяют отдельную машину только под историю (большой диск, ограниченный круг клиентов по сети), а HTTP API держат на других узлах.
Зачем именно так¶
state_history_plugin— без него нет SHiP-канала, только обычный RPC и при необходимости Trace API с файлов.trace-historyиchain-state-historyвключают по потребности: для обозревателей и индексаторов чаще нужны и трассы, и дельты; только дельты уменьшают объём, если не нужны детальные трассы.state-history-endpoint— слушать на 127.0.0.1 или внутреннем интерфейсе; наружу — только через VPN/SSH-туннель или reverse proxy с ограничением доступа. Поток истории не должен быть публичным без жёсткой политики.chain_plugin+net_plugin— узел должен догонять сеть и применять блоки, иначе журнал SHiP неполный.- Размер диска и опции stride / retain / archive (
state-history-stride,max-retained-history-files,state-history-archive-dirи др.) задают политику хранения; для долгоживущей ноды см. Параметры.
Индексаторы в экосистеме COOPOS могут использовать подписку на поток данных (SHiP) как готовый клиент к этому endpoint.
Фрагмент config.ini¶
plugin = eosio::chain_plugin
plugin = eosio::net_plugin
plugin = eosio::http_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::state_history_plugin
# Синхронизация с сетью
p2p-listen-endpoint = 0.0.0.0:9876
p2p-peer-address = seed1.example.com:9876
p2p-peer-address = seed2.example.com:9876
validation-mode = full
read-mode = head
# HTTP API — по желанию на этой же ноде; для только-SHIP можно оставить 127.0.0.1
http-server-address = 127.0.0.1:8888
api-accept-transactions = false
# SHiP: только внутренняя сеть
trace-history = true
chain-state-history = true
state-history-endpoint = 127.0.0.1:8080
# state-history-unix-socket-path = ship.sock
state-history-dir = state-history
# state-history-stride = ...
# max-retained-history-files = ...
# Нет producer-name / signature-provider
Подробнее по протоколу и эксплуатации: State History (SHiP).