Пример конфигурации: API-нода¶
API-нода обслуживает приложения: запросы к состоянию цепочки (chain_api_plugin), при необходимости сеть (net_api_plugin), иногда трассировку и историю состояния. Она не подписывает блоки, но часто принимает транзакции от клиентов и передаёт их в сеть.
Зачем именно так¶
chain_api_plugin+http_plugin— основа публичного или внутреннего RPC. Количествоhttp-threadsи размерchain-state-db-size-mbувеличивают по фактической нагрузке (число одновременных запросов, тяжёлые таблицы).api-accept-transactions = true— если узел должен приниматьpush_transaction/ аналоги; если API только для чтения, можно выставитьfalseи разгрузить узел.read-mode:head— данные до последнего полученного блока; удобно для «свежих» ответов.irreversible— только до последнего необратимого блока; строже согласованность, но в режимеirreversibleтранзакции из P2P не ретранслируются и поведение API для пуша может отличаться (см. комментарии вconfig.example.iniкread-mode).validation-mode = full— стандарт для узла, который следует за сетью.- P2P — достаточно пиров для синхронизации; не обязательно держать сотни соединений, как на seed.
net_api_plugin— включайте осознанно: он раскрывает информацию о P2P и часто не выставляют публично. Для внутренней диагностики — за VPN/firewall.- Защита HTTP:
http-validate-host, лимитыhttp-max-in-flight-requests,http-max-bytes-in-flight-mb,max-body-size, reverse proxy с rate limit и TLS на границе.
Опционально подключайте trace_api_plugin и state_history_plugin, если приложениям нужны трассировки действий или поток истории состояния (см. State History (SHiP)). State-роль (поставка истории по WebSocket) может жить на этом же узле или на отдельной state-ноде — совмещение с API удобно для малых контуров, разделение — для нагрузки и безопасности.
Фрагмент config.ini¶
plugin = eosio::chain_plugin
plugin = eosio::net_plugin
plugin = eosio::http_plugin
plugin = eosio::chain_api_plugin
# Только защищённая внутренняя сеть:
# plugin = eosio::net_api_plugin
http-server-address = 0.0.0.0:8888
http-threads = 16
http-validate-host = true
http-max-in-flight-requests = 500
http-max-bytes-in-flight-mb = 256
max-body-size = 1048576
chain-threads = 8
chain-state-db-size-mb = 16384
chain-state-db-guard-size-mb = 256
validation-mode = full
read-mode = head
api-accept-transactions = true
p2p-listen-endpoint = 0.0.0.0:9876
p2p-peer-address = seed1.example.com:9876
p2p-peer-address = seed2.example.com:9876
max-clients = 50
net-threads = 4
# Нет producer-name / signature-provider
Для пользовательских доменов укажите access-control-allow-origin и связанные CORS-директивы только если это требуется браузерным клиентам; не используйте * на публичных эндпоинтах с чувствительными данными без понимания рисков.