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

Подключайтесь к Robinhood Chain с помощью viem или ethers, развертывайте контракты через Foundry или Hardhat, слушайте логи через WebSocket или события webhook и запрашивайте активность токенизированных акций.

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

  • Первый шаг: Подключитесь с помощью viem или ethers, сохранив network.mjs и один пример клиента перед его запуском.
  • Критерий готовности: клиент подтверждает, что chain ID в RPC совпадает с chain_id из каталога, и выводит номер последнего блока без ошибки RPC chain ID mismatch.

Параметры mainnet и варианты доступа.

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

Доступ через 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}
Подписки WebSocketnewHeads, logs—
Базовый URL Data APIGET 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. Для чтения без ключа используйте public.url из каталога и только методы, перечисленные в public.methods; доступность публичного HTTP не означает доступ к WebSocket.

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.

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.

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; для транзакций в mainnet требуется ETH в mainnet. В официальном руководстве по сети и развертыванию перечислены chain ID для mainnet и testnet (по состоянию на 2026-10-07). Таблицы эндпоинтов на этой странице используют данные из /v1/chains.

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

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 для ознакомления с Hello.sol, настройками инструментов, отправкой транзакций и проверкой квитанций (receipts).

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

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

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() из другого терминала, используя те же экспортированные переменные развертывания:

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

Сохраняйте последний обработанный блок и дедуплицируйте по кортежу (blockHash, transactionHash, logIndex). После переподключения догружайте пропущенные блоки с помощью ограниченных запросов eth_getLogs; выполняйте согласование логов, помеченных как removed, при реорганизациях (reorg). См. подписки WebSocket и лимиты диапазонов блоков.

Для доставки событий адресов на ваш HTTPS-приемник эндпоинт GET /v1/push/chains возвращает поддерживаемые сети и настройки подтверждения; используйте заголовок x-api-key. Следуйте руководству по Webhook Push для настройки подписок, проверки подписей, дедупликации и повторов. Для запросов активности токенизированных акций в mainnet перейдите к руководству по акциям.

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

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

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

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":[]}'

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

Ответы соответствуют спецификации 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)

Разрешенные методы для каждой сети: Поддерживаемые сети

Testnet

Чтобы получить тестовый ETH для транзакций, см. руководство по крану Robinhood Chain testnet.

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.

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":[]}'

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

{"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}
Подписки WebSocketnewHeads, 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)

Разрешенные методы для каждой сети: Поддерживаемые сети

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

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

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

Подробные параметры запросов, форматы ответов (StockDailyListEnvelope и StockTokenEnvelope), примечания по пагинации и оценки расхода CU см. в руководстве по токенизированным акциям.

Полный начальный шаблон: 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 в консоли. Подробности настройки см. в руководстве Быстрый старт.
  • Программная регистрация: автономные ИИ-агенты, автоматизированные скрипты и конвейеры CI могут входить в систему и создавать API keys с помощью подписи кошелька Ethereum (EIP-191) без использования браузера. Следуйте руководству по программной регистрации.
  • ИИ-агенты: автономные ИИ-агенты могут определять возможности Robinhood Chain с помощью официального сервера Model Context Protocol (MCP). См. Подключение ИИ-агентов к BlockVectra.
  • Повышение лимитов: после пополнения ограничение на количество вызовов в секунду для всего аккаунта снимается; для каждого ключа продолжают действовать лимиты скорости Compute Units (CU) и лимиты всплесков (burst). Актуальные тарифы и расчетные единицы см. на странице Цены.

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

Последнее обновление:

На этой странице