nodecore: умный балансировщик RPC для блокчейна

Что такое 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
    ]
}'

Сборка из исходников

  1. Клонируйте репозиторий с подмодулями (обязательно — без них сборка завершится ошибкой):

    git clone --recursive https://github.com/drpcorg/nodecore.git

    Если вы уже клонировали без --recursive, выполните git submodule update --init --recursive.

  2. Соберите бинарный файл (команда автоматически запускает make generate-networks):

    make build
  3. Запустите. 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.

© 2026 meganuke