# Руководство по интеграции с Robinhood Chain: клиенты RPC, развертывание и события

> Source: https://docs.blockvectra.com/ru/guides/robinhood-chain/

Используйте RPC Robinhood Chain для публичных проверок подключения и аутентифицированного чтения, или Data API для поддерживаемых наборов данных mainnet. Разработчики и ИИ-агенты используют одни и те же эндпоинты; разделяйте запросы к mainnet и testnet.

* **Первый шаг:** [Подключитесь с помощью viem или ethers](#connect-with-viem-or-ethers), сохранив `network.mjs` и один пример клиента перед его запуском.
* **Критерий готовности:** клиент подтверждает, что chain ID в RPC совпадает с `chain_id` из каталога, и выводит номер последнего блока без ошибки `RPC chain ID mismatch`.

[Параметры mainnet и варианты доступа](https://blockvectra.com/ru/chains/robinhood_mainnet/).

## Задачи, которые помогает решить это руководство

* [Протестируйте RPC Robinhood Chain](#connect-with-viem-or-ethers) с помощью публичного чтения через viem или ethers, затем используйте ключ для аутентифицированных методов.
* [Проверьте подключение к RPC testnet](#testnet), прочитав `eth_chainId` перед выполнением операций в testnet.
* [Запросите активность токенизированных акций](#tokenized-stock-data) с помощью Data API mainnet после проверки поддержки набора данных; метрики отражают активность ончейн, а не цены акций.

## Доступ через RPC и WebSocket

* **Публичный RPC URL**: найдите эндпоинт без ключа, поддерживаемые публичные методы и лимиты запросов на [странице Robinhood Chain mainnet](https://blockvectra.com/ru/chains/robinhood_mainnet/) или [странице testnet](https://blockvectra.com/ru/chains/robinhood_testnet/).
* **JSON-RPC с API key**: используйте эндпоинты и примеры с curl ниже. Для логов см. [справочник по методу eth\_getLogs](https://docs.blockvectra.com/en/api/json-rpc/methods/eth_getLogs/) и [руководство по лимитам диапазонов блоков](https://docs.blockvectra.com/en/guides/getlogs-block-range/).
* **WebSocket с API key**: используйте эндпоинты WebSocket ниже и следуйте [руководству по подпискам WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/) для `newHeads` и `logs`. Публичный доступ к RPC осуществляется через HTTP JSON-RPC; подключения по WebSocket требуют ключ.

## Информация о сети и эндпоинты

Каждый запрос к Robinhood Chain явно определяет целевую сеть в пути URL с помощью слага `robinhood_mainnet`. JSON-RPC поддерживает аутентификацию по ключу как в пути URL, так и в заголовке запроса (`x-api-key`), тогда как Data API предоставляет эндпоинты REST по пути `/v1/data/robinhood_mainnet/`.

Параметры и эндпоинты ниже отражают актуальные параметры сети:

| Параметр / Конечная точка | Значение / Шаблон | Аутентификация |
|---|---|---|
| Chain ID (EIP-155) | `4663` | — |
| JSON-RPC (key в пути) | `POST https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}` | API key в URL пути |
| JSON-RPC (key в заголовке) | `POST https://api.blockvectra.com/v1/robinhood_mainnet` | Заголовок x-api-key: {api_key} |
| WebSocket (key в пути) | `wss://api.blockvectra.com/v1/robinhood_mainnet/{api_key}` | API key в URL пути |
| WebSocket (key в заголовке) | `wss://api.blockvectra.com/v1/robinhood_mainnet` | Заголовок x-api-key: {api_key} или Authorization: Bearer {api_key} |
| Подписки WebSocket | `newHeads, logs` | — |
| Базовый URL Data API | `GET https://api.blockvectra.com/v1/data/robinhood_mainnet/…` | Заголовок x-api-key: {api_key} |
| Публичный статус | `GET https://api.blockvectra.com/v1/status` | Без аутентификации (публичный) |

## Подключение с помощью viem или ethers

Разработчики и ИИ-агенты могут использовать одни и те же настройки на стороне сервера. Используйте Node.js 24 или новее, viem 2 или ethers 6, и начните с публичного чтения. Задайте `BLOCKVECTRA_API_KEY` в переменных окружения для методов с ключом и WebSocket. Не допускайте попадания ключей и содержащих их RPC URL в браузерный код, логи и системы контроля версий.

Сохраните этот код как `network.mjs`. Начните с testnet; задайте `BLOCKVECTRA_CHAIN=robinhood_mainnet` для перехода на mainnet. Скрипт считывает `chain_id` и политику методов из [GET /v1/chains](https://api.blockvectra.com/v1/chains). Для чтения без ключа используйте `public.url` из каталога и только методы, перечисленные в `public.methods`; доступность публичного HTTP не означает доступ к WebSocket.

```js
const chainSlug = process.env.BLOCKVECTRA_CHAIN ?? 'robinhood_testnet';
const key = process.env.BLOCKVECTRA_API_KEY;
const catalogUrl = 'https://api.blockvectra.com/v1/chains';
const response = await fetch(catalogUrl, { signal: AbortSignal.timeout(15_000) });
if (!response.ok) throw new Error(`Chains HTTP ${response.status}`);
const catalog = await response.json();
export const chainInfo = catalog.chains.find(item => item.chain === chainSlug);
if (!chainInfo || !Number.isSafeInteger(chainInfo.chain_id) || chainInfo.chain_id <= 0) {
  throw new Error('Missing chain or chain_id');
}
export function allows(method) {
  const matches = pattern => pattern.endsWith('*')
    ? method.startsWith(pattern.slice(0, -1)) : pattern === method;
  if (!key) return (chainInfo.public?.methods ?? []).some(matches);
  return (chainInfo.methods?.allow ?? []).some(matches)
    && !(chainInfo.methods?.deny ?? []).some(matches);
}
if (!allows('eth_chainId')) throw new Error('eth_chainId is unavailable');
export const rpcUrl = key
  ? new URL(`./${chainSlug}/${encodeURIComponent(key)}`, catalogUrl).href
  : chainInfo.public?.url;
if (!rpcUrl) throw new Error('Public RPC is unavailable; set BLOCKVECTRA_API_KEY');
```

Сохраните как `viem-client.mjs`, установите зависимость с помощью `npm install viem@2`, затем запустите `node viem-client.mjs`.

```js
import { createPublicClient, defineChain, http } from 'viem';
import { chainInfo, rpcUrl } from './network.mjs';

export const chain = defineChain({
  id: chainInfo.chain_id,
  name: chainInfo.name,
  nativeCurrency: { name: 'ETH', symbol: 'ETH', decimals: 18 },
  rpcUrls: { default: { http: [rpcUrl] } },
});
export const client = createPublicClient({ chain, transport: http(rpcUrl) });
if (await client.getChainId() !== chain.id) throw new Error('RPC chain ID mismatch');
console.log(await client.getBlockNumber());
```

Для ethers сохраните как `ethers-client.mjs`, установите зависимость с помощью `npm install ethers@6`, затем запустите `node ethers-client.mjs`.

```js
import { JsonRpcProvider } from 'ethers';
import { chainInfo, rpcUrl } from './network.mjs';

const provider = new JsonRpcProvider(rpcUrl, chainInfo.chain_id, { batchMaxCount: 1 });
const network = await provider.getNetwork();
if (network.chainId !== BigInt(chainInfo.chain_id)) throw new Error('RPC chain ID mismatch');
console.log(await provider.getBlockNumber());
provider.destroy();
```

## Развертывание с помощью Foundry или Hardhat

Сначала пополните баланс деплоера тестовым ETH через [кран testnet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/); для транзакций в mainnet требуется ETH в mainnet. В [официальном руководстве по сети и развертыванию](https://docs.robinhood.com/chain/deploy-smart-contracts/) перечислены chain ID для mainnet и testnet (по состоянию на 2026-10-07). Таблицы эндпоинтов на этой странице используют данные из `/v1/chains`.

Экспортируйте выбранный URL и chain ID из `network.mjs`. Перед отправкой транзакции в сеть проверьте `eth_sendRawTransaction` по спискам `methods.allow` и `methods.deny`.

```bash
export RPC_URL="$(node --input-type=module -e "import { rpcUrl, allows } from './network.mjs'; if (!allows('eth_sendRawTransaction')) throw new Error('Broadcast unavailable'); console.log(rpcUrl)")"
export CHAIN_ID="$(node --input-type=module -e "import { chainInfo } from './network.mjs'; console.log(chainInfo.chain_id)")"
```

Перейдите к общему [руководству по развертыванию через Foundry или Hardhat](https://docs.blockvectra.com/en/guides/deploy-contract/) для ознакомления с `Hello.sol`, настройками инструментов, отправкой транзакций и проверкой квитанций (receipts).

## Прослушивание событий контракта через WebSocket

Сохраните как `watch-logs.mjs` и укажите в `LOG_ADDRESS` адрес развернутого контракта или токена, который вы отслеживаете. Запустите `node watch-logs.mjs`. Скрипт проверяет параметры `ws` и `subscriptions` из `/v1/chains` перед подпиской на `logs`.

```js
import { createPublicClient, webSocket, isAddress } from 'viem';
import { chain } from './viem-client.mjs';
import { chainInfo, rpcUrl } from './network.mjs';

if (!process.env.BLOCKVECTRA_API_KEY) throw new Error('WebSocket requires BLOCKVECTRA_API_KEY');
const address = process.env.LOG_ADDRESS;
if (!chainInfo.ws || !chainInfo.subscriptions?.includes('logs')) {
  throw new Error('WebSocket logs are unavailable; use HTTP backfill or webhook push');
}
if (!address || !isAddress(address)) throw new Error('Set LOG_ADDRESS');
const wsUrl = new URL(rpcUrl);
wsUrl.protocol = 'wss:';
const client = createPublicClient({ chain, transport: webSocket(wsUrl.href) });
const unwatch = client.watchEvent({
  address, poll: false,
  onLogs: logs => console.log(logs),
  onError: error => console.error(error),
});
process.once('SIGINT', () => { unwatch(); process.exit(0); });
```

После запуска слушателя отправьте транзакцию `ping()` из другого терминала, используя те же экспортированные переменные развертывания:

```bash
cast send "$CONTRACT_ADDRESS" "ping()" --rpc-url "$RPC_URL" \
  --private-key "$DEPLOYER_PRIVATE_KEY"
```

Сохраняйте последний обработанный блок и дедуплицируйте по кортежу `(blockHash, transactionHash, logIndex)`. После переподключения догружайте пропущенные блоки с помощью ограниченных запросов `eth_getLogs`; выполняйте согласование логов, помеченных как `removed`, при реорганизациях (reorg). См. [подписки WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/) и [лимиты диапазонов блоков](https://docs.blockvectra.com/en/guides/getlogs-block-range/).

Для доставки событий адресов на ваш HTTPS-приемник эндпоинт **GET /v1/push/chains возвращает поддерживаемые сети** и настройки подтверждения; используйте заголовок `x-api-key`. Следуйте [руководству по Webhook Push](https://docs.blockvectra.com/en/guides/webhook-push/) для настройки подписок, проверки подписей, дедупликации и повторов. Для запросов активности токенизированных акций в mainnet перейдите к [руководству по акциям](https://docs.blockvectra.com/en/guides/stocks/).

## Прямые примеры вызовов через curl

Вы можете выполнять вызовы JSON-RPC напрямую с помощью стандартных HTTP-клиентов. Замените `{api_key}` вашим API key BlockVectra:

**eth_chainId (Header)**

Запросите chain ID стандарта EIP-155 с помощью заголовка запроса `x-api-key`:

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: {api_key}" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
```


  **eth_blockNumber (Path)**

Запросите номер последнего блока, передав API key в пути URL:

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```


### Структура ответа

Ответы соответствуют спецификации JSON-RPC 2.0:

* **Успех**: возвращает оболочку с `jsonrpc: "2.0"`, тем же `id` и строкой `result`, содержащей шестнадцатерично закодированное значение (`eth_chainId` возвращает шестнадцатеричный chain ID; `eth_blockNumber` возвращает высоту последнего блока).
* **Запрещенные методы**: запрос метода, не входящего в список разрешенных сетью методов, возвращает код ошибки JSON-RPC `-32601` (`method not available`, не тарифицируется).
* **Запросы за пределами окна**: запросы к историческому состоянию ранее окна хранения состояния возвращают код ошибки JSON-RPC `-32011` (не тарифицируется).
* **Некорректные параметры**: неверно сформированные или недопустимые параметры запроса возвращают код ошибки JSON-RPC `-32602` (не тарифицируется).

## Возможности и политика методов

Доступные методы JSON-RPC, лимиты диапазонов блоков для логов и хранение исторического состояния в Robinhood Chain публикуются динамически через `GET /v1/chains`. Трассировка выполнения (`debug_trace*`, включая `debug_traceTransaction`) регулируется политикой методов сети:

### Параметры сети и лимиты

- **Диапазон блоков eth_getLogs**: Максимум 1000 блоков на запрос
- **Окно исторического состояния**: Последние 900 блоков (запросы за пределами возвращают -32011)
- **Трассировка выполнения (debug_trace*)**: Поддерживается (debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash)

Разрешенные методы для каждой сети: [Поддерживаемые сети](https://docs.blockvectra.com/en/chains/)

## Testnet

Чтобы получить тестовый ETH для транзакций, см. [руководство по крану Robinhood Chain testnet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/).

Robinhood Chain Testnet (chain ID: 46630) использует тот же API key, что и mainnet, по эндпоинту `https://api.blockvectra.com/v1/robinhood_testnet` с аутентификацией через заголовок запроса `x-api-key`.

Запросы в testnet используют те же веса CU, что и в mainnet, и списываются из того же баланса и бесплатных кредитов. Доступные методы JSON-RPC и хранение исторического состояния в Robinhood Chain Testnet публикуются динамически через `GET /v1/chains`.

Для запуска готового трехэтапного руководства, которое считывает данные testnet без ключа, передает логи через WebSocket, а затем использует тот же ключ в mainnet, см. [руководство для начинающих по Robinhood Chain Testnet](https://docs.blockvectra.com/en/guides/robinhood-testnet-starter/).

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_testnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: {api_key}" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
```

Ожидаемый ответ:

```json
{"jsonrpc":"2.0","id":1,"result":"0xb626"}
```

| Параметр / Конечная точка | Значение / Шаблон | Аутентификация |
|---|---|---|
| Chain ID (EIP-155) | `46630` | — |
| JSON-RPC (key в пути) | `POST https://api.blockvectra.com/v1/robinhood_testnet/{api_key}` | API key в URL пути |
| JSON-RPC (key в заголовке) | `POST https://api.blockvectra.com/v1/robinhood_testnet` | Заголовок x-api-key: {api_key} |
| WebSocket (key в пути) | `wss://api.blockvectra.com/v1/robinhood_testnet/{api_key}` | API key в URL пути |
| WebSocket (key в заголовке) | `wss://api.blockvectra.com/v1/robinhood_testnet` | Заголовок x-api-key: {api_key} или Authorization: Bearer {api_key} |
| Подписки WebSocket | `newHeads, logs` | — |
| Базовый URL Data API | `Пока недоступно` | — |
| Публичный статус | `GET https://api.blockvectra.com/v1/status` | Без аутентификации (публичный) |

### Параметры сети и лимиты

- **Диапазон блоков eth_getLogs**: Максимум 1000 блоков на запрос
- **Окно исторического состояния**: Последние 1023 блоков (запросы за пределами возвращают -32011)
- **Трассировка выполнения (debug_trace*)**: Поддерживается (debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash)

Разрешенные методы для каждой сети: [Поддерживаемые сети](https://docs.blockvectra.com/en/chains/)

## Данные токенизированных акций

В сети Robinhood Chain Data API BlockVectra предоставляет ежедневные ончейн-метрики и метаданные для токенизированных акций через два эндпоинта:

* **Ежедневный рейтинг (`GET /v1/data/robinhood_mainnet/stocks`)**: таблица ежедневной активности токенизированных акций за указанную дату UTC с сортировкой по убыванию активности переводов.
* **Получение одной токенизированной акции (`GET /v1/data/robinhood_mainnet/stocks/{token}`)**: метаданные контракта токена и до 30 дней недавних ежедневных метрик по адресу токена.

Подробные параметры запросов, форматы ответов (`StockDailyListEnvelope` и `StockTokenEnvelope`), примечания по пагинации и оценки расхода CU см. в [руководстве по токенизированным акциям](https://docs.blockvectra.com/en/guides/stocks/).

Полный начальный шаблон: [blockvectra/robinhood-stock-tokens](https://github.com/blockvectra/robinhood-stock-tokens)

## Начало работы и API keys

Новые аккаунты получают 30,000,000 CU при регистрации — банковская карта не требуется.

Вы можете сначала опробовать публичный эндпоинт без ключа `https://api.blockvectra.com/v1/robinhood_mainnet/public` (только методы кошелька JSON-RPC, Data API требует ключ; методы и лимиты определяются `/v1/chains`); зарегистрируйте аккаунт, если вам нужны более высокие лимиты запросов.

* **Веб-консоль**: зарегистрируйтесь с помощью подписи кошелька Ethereum и создайте API key в [консоли](https://console.blockvectra.com/login/?next=%2Fkeys%2F). Подробности настройки см. в руководстве [Быстрый старт](https://docs.blockvectra.com/en/quickstart/).
* **Программная регистрация**: автономные ИИ-агенты, автоматизированные скрипты и конвейеры CI могут входить в систему и создавать API keys с помощью подписи кошелька Ethereum (EIP-191) без использования браузера. Следуйте [руководству по программной регистрации](https://docs.blockvectra.com/en/guides/programmatic-signup/).
* **ИИ-агенты**: автономные ИИ-агенты могут определять возможности Robinhood Chain с помощью официального сервера Model Context Protocol (MCP). См. [Подключение ИИ-агентов к BlockVectra](https://docs.blockvectra.com/en/guides/ai-agents/).
* **Повышение лимитов**: после пополнения ограничение на количество вызовов в секунду для всего аккаунта снимается; для каждого ключа продолжают действовать лимиты скорости Compute Units (CU) и лимиты всплесков (burst). Актуальные тарифы и расчетные единицы см. на странице [Цены](https://blockvectra.com/ru/pricing/).

## Следующие шаги

* [Изучите каталог наборов данных](https://blockvectra.com/ru/data/), чтобы увидеть все наборы данных, индексируемые BlockVectra.
* [Ознакомьтесь с бесплатным тарифом и ценами](https://blockvectra.com/ru/pricing/#free), чтобы узнать, что включено в ваш аккаунт.
* [Войдите в консоль](https://console.blockvectra.com/login/?next=%2Fkeys%2F), чтобы создать API key.
