Что такое nodecore
nodecore располагается перед вашими RPC-провайдерами блокчейна и интеллектуально распределяет запросы между ними, оптимизируя такие метрики производительности, как задержка, пропускная способность и частота ошибок. Система непрерывно оценивает апстримы (upstream) в режиме реального времени и направляет каждый запрос к наиболее подходящему из них — с кешированием, хеджированием, повторными попытками, ограничением скорости и кворумной верификацией.
nodecore не привязан к конкретному API или протоколу: он не зависит от одной формы RPC. Система поддерживает интерфейсы JSON-RPC, WebSocket и REST, что позволяет использовать её перед любым блокчейн-API, а не только перед EVM JSON-RPC.
|
Примечание
|
⚠️ Статус проекта: nodecore всё ещё находится в активной разработке. По мере развития проекта стоит ожидать частых обновлений и улучшений. |
Поддерживаемые сети, методы и интерфейсы
-
Интерфейсы — коннекторы
json-rpc(поверх HTTP),websocketиrest. Набор, доступный для конкретной сети, объявляется в docs/nodecore/11-method-specs.md[спецификации методов] этой сети. -
Сети — все сети, определённые в
chains.yaml. На данный момент поддерживаются семейства EVM (Ethereum, Polygon, Optimism, Arbitrum, Base, BSC и многие другие), Solana, Algorand, Aztec, а также Ethereum/Gnosis Beacon Chain (консенсусный уровень, только REST). -
Методы — поведение RPC для каждой сети задаётся декларативно через docs/nodecore/11-method-specs.md[спецификации методов], охватывающие стандартные методы EVM/Solana, подписки и методы EVM-фильтров. Методы, не поддерживаемые апстримом, автоматически блокируются для него, чтобы исключить лишние запросы.
Ключевые возможности
-
Интеллектуальная маршрутизация — динамически выбирает наиболее подходящий апстрим на основе метрик производительности в реальном времени (задержка, частота ошибок, доступность) для оптимальной скорости, надёжности и отказоустойчивости. Подробнее: docs/nodecore/05-upstream-config.md[настройка апстримов].
-
Независимость от API/протокола — интерфейсы JSON-RPC, WebSocket и REST для EVM, Solana, Algorand, Aztec и Ethereum/Gnosis Beacon Chain, управляемые декларативными docs/nodecore/11-method-specs.md[спецификациями методов]. Методы EVM-фильтров (
eth_newFilter,eth_getFilterLogsи др.) направляются только к тому апстриму, на котором был создан фильтр. -
Подписки — WebSocket-подписки агрегируются так, что множество одинаковых клиентских подписок разделяют один поток апстрима; поддерживается опциональная локальная синтезация EVM-топиков (
newHeads,logs, отложенные транзакции). Подробнее: docs/nodecore/13-subscriptions.md[подписки]. -
Кеширование — сокращает избыточный трафик, кешируя частые запросы с использованием бэкендов in-memory, Redis или Postgres и настраиваемыми политиками. Подробнее: docs/nodecore/04-cache.md[кеш].
-
Механизмы отказоустойчивости — хеджирование запросов (дублирование медленных запросов к нескольким апстримам) и настраиваемые автоматические повторы. Подробнее: docs/nodecore/05-upstream-config.md[настройка апстримов].
-
Ограничение скорости — троттлинг трафика к апстримам на уровне отдельных методов или по паттернам с помощью переиспользуемых бюджетов или встроенных правил. Подробнее: docs/nodecore/06-rate-limiting.md[ограничение скорости].
-
Кворум — запрос и проверка независимо подписанных ответов от апстримов перед возвратом данных клиенту. Подробнее: docs/nodecore/10-quorum.md[кворум].
-
Гибкая аутентификация — токен-based и JWT-аутентификация, а также области доступа (scoped access keys) с детальными ограничениями (белые списки IP-адресов, методов и адресов контрактов). Подробнее: docs/nodecore/03-auth.md[аутентификация].
-
Наблюдаемость — docs/nodecore/08-prometheus-metrics.md[метрики Prometheus] и публичный docs/nodecore/12-grpc-server.md[gRPC API] для получения состояния апстримов и сетей.
-
Потоковая архитектура — ответы могут передаваться потоком, что минимизирует потребление памяти и эффективно обрабатывает большие нагрузки.
Быстрый старт
Запуск через Docker с монтированием конфигурации:
docker run -p 9090:9090 -v /path/to/config:/nodecore.yml drpcorg/nodecore
Минимальная конфигурация требует хотя бы одного апстрима; все остальные настройки используют значения по умолчанию:
upstream-config:
upstreams:
- id: my-super-upstream
chain: ethereum
connectors:
- type: json-rpc
url: https://path-to-eth-provider.com
- id: my-super-upstream-2
chain: polygon
connectors:
- type: json-rpc
url: https://path-to-polygon-provider.com
Отправьте первый запрос:
curl --location 'http://localhost:9090/queries/ethereum' \
--header 'Content-Type: application/json' \
--data '{
"id": 1,
"jsonrpc": "2.0",
"method": "eth_getBlockByNumber",
"params": [
"latest",
false
]
}'
Сборка из исходников
-
Клонируйте репозиторий с подмодулями (обязательно — без них сборка завершится ошибкой):
git clone --recursive https://github.com/drpcorg/nodecore.gitЕсли вы уже клонировали без
--recursive, выполнитеgit submodule update --init --recursive. -
Соберите бинарный файл (команда автоматически запускает
make generate-networks):make build -
Запустите.
make runпо умолчанию читает./nodecore.yml; путь можно переопределить черезNODECORE_CONFIG_PATH:make run # или NODECORE_CONFIG_PATH=/path/to/your/config make runПримечание:
make runне регенерирует данные сетей — выполнитеmake generate-networksзаранее, если сборка ещё не производилась. Файлnodecore-local.ymlдобавлен в.gitignoreи предназначен для вашей личной конфигурации.
Документация
Полная документация находится в docs/nodecore[docs/nodecore]. Основная схема конфигурации и точка входа — docs/nodecore/01-config.md[01-config.md].
| Руководство | Что охватывает |
|---|---|
docs/nodecore/01-config.md[Config] |
Точка входа в конфигурацию и полная схема |
docs/nodecore/02-server-config.md[Server] |
Настройки HTTP, gRPC, метрик, профилирования и TLS |
docs/nodecore/03-auth.md[Auth] |
Аутентификация по токену/JWT и ограничения доступа на уровне ключа |
docs/nodecore/04-cache.md[Cache] |
Хранилища кеша и политики кеширования |
docs/nodecore/05-upstream-config.md[Upstream] |
Провайдеры апстримов, отказоустойчивость, оценка и метки |
docs/nodecore/06-rate-limiting.md[Rate limiting] |
Управление пропускной способностью по методу/паттерну |
docs/nodecore/07-app-storages.md[App storages] |
Общие подключения к Redis/Postgres |
docs/nodecore/07-tor-setup.md[Tor setup] |
Запуск nodecore через Tor |
docs/nodecore/08-prometheus-metrics.md[Metrics] |
Каталог метрик Prometheus |
docs/nodecore/09-integration.md[Integration] |
Интеграция с платформой DRPC |
docs/nodecore/10-quorum.md[Quorum] |
Кворумная верификация подписанных ответов |
docs/nodecore/11-method-specs.md[Method specs] |
Определения методов для каждой сети и расширение спецификаций |
docs/nodecore/12-grpc-server.md[gRPC API] |
Публичный gRPC API для получения состояния апстримов и сетей |
docs/nodecore/13-subscriptions.md[Subscriptions] |
Агрегация подписок и локальная синтезация |
Интеграции
nodecore можно интегрировать со внешними платформами для расширения функциональности — например, с DRPC для централизованного управления ключами и аналитики. Подробнее: docs/nodecore/09-integration.md[интеграция].
Развёртывание
Helm-чарт и инструкции по развёртыванию находятся в chart/nodecore. Чарт также публикуется как OCI-артефакт в GitHub Container Registry (GHCR).
Специальные варианты развёртывания
Запуск nodecore как Tor hidden service
nodecore можно развернуть как скрытый сервис Tor (.onion) для анонимного доступа, устойчивого к цензуре:
docker-compose -f docker-compose.tor.yml up -d
cat tor-data/hostname # Получить .onion-адрес
Подробнее о полной настройке, соображениях безопасности и устранении неполадок — в docs/nodecore/07-tor-setup.md[руководстве по настройке Tor].
Лицензия
Распространяется под лицензией MIT.