Gateway
Gateway — сервіс Node.js (Fastify) між користувачами і нодою. Вебзастосунок, SDK і MCP-сервер звертаються саме до нього.
| Що робить | Деталі |
|---|---|
| Обслуговує REST API | Більшість шляхів проксує ноду; кілька — власні, див. REST |
| Обслуговує WebSocket | /ws — живі блоки, транзакції, AI-події, підписки на баланси; див. WebSocket |
| Маршрутизує за шардами | Надсилає кожну транзакцію ноді, що обслуговує шард відправника |
| Стежить за мережею | Опитує ноду, перетворює зміни на події, піднімає сповіщення про активність контрактів |
| Обмежує запити | На IP, глобально і для AI-ендпоінтів |
| Містить AI-інструменти | Проксі аудиту контрактів, генерація контрактів (SmartForge), помічник з документації |
Gateway нічого не вирішує щодо стану мережі: підписи, баланси й AI-оцінки надходять від ноди.
Запуск
bash
cd neurochain/gateway
npm install
NODE_RPC_URL=http://localhost:9933 node src/index.jsbash
curl -s http://localhost:3000/health
# {"status":"ok","network":"neurochain-mainnet-1","height":11,"peers":0,"round":0,"mempool":0}Він слухає порт PORT (3000) на всіх інтерфейсах.
Конфігурація
Підключення
| Змінна | За замовчуванням | Значення |
|---|---|---|
PORT | 3000 | Порт |
NODE_RPC_URL | http://localhost:9933 | RPC ноди |
NEUROCHAIN_SHARD_NODES | — | Маршрутизація за шардами, напр. 0=http://n0:9933,1=http://n1:9934 |
SHARD_NODE_URLS | — | Те саме, позиційно (індекс = шард); використовується, якщо попередню не задано |
NETWORK_ID | neurochain-mainnet-1 | Назва мережі в /health |
CORS_ALLOWED_ORIGINS | * | Дозволені джерела браузера — у продакшені вкажіть джерело свого сайту |
TLS_CERT, TLS_KEY | — | Шляхи до PEM, щоб обслуговувати HTTPS напряму |
Ліміти
| Змінна | За замовчуванням | Значення |
|---|---|---|
GLOBAL_RL_MAX_RPS | 200 | Запитів за секунду на IP |
AI_RL_MAX_RPM | 10 | Запитів до AI-ендпоінтів за хвилину на IP |
WS_MAX_MSG_BYTES | 65 536 | Найбільше повідомлення WebSocket |
WS_MAX_SUBS_PER_CLIENT | 50 | Підписок на баланс на з'єднання |
WS_RPC_MAX_RPS | 30 | RPC-викликів за секунду на з'єднання |
Спостереження за мережею
| Змінна | За замовчуванням | Значення |
|---|---|---|
POLL_NODE_INTERVAL_MS | 2000 | Як часто опитувати ноду про нові блоки |
SENTINEL_CHECK_INTERVAL_MS | 30000 | Перевірка активності контрактів |
SENTINEL_SPIKE_LOW_THRESHOLD / _HIGH_THRESHOLD | 10 / 50 | Викликів за інтервал, що піднімають середнє / високе сповіщення |
SENTINEL_LOW_SCORE_THRESHOLD | 60 | Сповіщення, коли починають викликати контракт з оцінкою безпеки нижче цієї |
ALERT_COOLDOWN_MS | 60000 | Мінімальна пауза між сповіщеннями для одного контракту |
PROTOCOL_PARAMS_REFRESH_MS | 60000 | Як часто перечитувати параметри протоколу з ноди |
Кран (тестові мережі)
| Змінна | За замовчуванням | Значення |
|---|---|---|
FAUCET_AMOUNT | 50 NRO | Сума за запит |
FAUCET_COOLDOWN_SECS | 86400 | На адресу й IP |
REDIS_URL | redis://localhost:6379 | Необов'язково — зберігає паузу крана між перезапусками gateway; без Redis вона тримається в пам'яті |
AI-інструменти
| Змінна | За замовчуванням | Значення |
|---|---|---|
ANTHROPIC_API_KEY | — | Вмикає генерацію контрактів SmartForge з Claude; без нього використовується вбудований генератор шаблонів |
SMARTFORGE_MODEL, SMARTFORGE_MAX_TOKENS | — | Модель і довжина для SmartForge |
AI_EXPORT_TOKEN | — | Якщо задано, /api/v1/ai/export/* вимагає його |
ASSISTANT_ENABLED | 0 | Помічник з документації (POST /api/v1/assistant/ask); перебудувати його індекс — npm run assistant:index |
Повний список з усіма значеннями за замовчуванням — у .env.example репозиторію.
Безпека
- Тримайте RPC ноди закритим і відкривайте лише gateway (за зворотним проксі з TLS або з
TLS_CERT/TLS_KEY). - Задайте в
CORS_ALLOWED_ORIGINSвласні джерела. POST /api/v1/wallet/derive-addressотримує фразу відновлення; у mainnet нода її відхиляє, і на публічному gateway цей ендпоінт ніколи не має бути доступним.- Деякі поля
/api/v1/network/status(tps_peak,block_time_ms, списокcrypto, показники AI-моделей) — фіксовані описові значення, а не виміри.
Тести
bash
cd neurochain/gateway
npm test # тести HTTP API; для повного набору нода має працювати