Один ключ для множества сетей: перенос примера на другую сеть
Один и тот же API key работает во всех поддерживаемых сетях. Узнайте структуру URL, как программно обнаруживать сети и как объединяются балансы и лимиты.
1. Один ключ для всех поддерживаемых сетей
Один и тот же API key работает во всех поддерживаемых сетях для JSON-RPC, а также для Data API в тех сетях, где он доступен. Ключи принадлежат вашему аккаунту и не привязаны к конкретной сети; нет необходимости создавать отдельные API keys для каждой сети.
Кредиты и лимиты запросов распределяются между всеми сетями, а также между JSON-RPC API и Data API; они не разделяются по сетям. Подробные правила тарификации см. на странице Цены.
- Общий баланс: платные пополнения и бесплатные кредиты действуют во всех сетях. Вызовы в любой сети расходуют один и тот же баланс аккаунта.
- Общие лимиты запросов: скорость восстановления Compute Units (CU) и лимиты всплесков (burst) действуют во всех сетях для каждого ключа. Лимиты вызовов в секунду на бесплатном тарифе суммируются по всем поддерживаемым сетям, а не разделяются по отдельным сетям.
- Переход на платный тариф: после пополнения ограничение бесплатного тарифа на количество вызовов в секунду снимается; для каждого ключа продолжают действовать лимиты скорости CU и всплесков, как описано в документации JSON-RPC.
2. Структура URL и параметр {chain}
Каждый запрос в рамках сети определяет целевую сеть в пути URL с помощью параметра {chain}. Параметр {chain} представляет собой слаг-идентификатор сети в нижнем регистре (например, robinhood_mainnet).
| Сервис | Аутентификация | Шаблон URL | Описание |
|---|---|---|---|
| JSON-RPC | Ключ в пути URL | POST /v1/{chain}/{api_key} | Простейшая форма, подходит для curl и HTTP-клиентов |
| JSON-RPC | Ключ в заголовке запроса | POST /v1/{chain} | Передача ключа через заголовок запроса x-api-key: {api_key} |
| Data API | Маршруты REST | GET /v1/data/{chain}/… | Передача ключа через заголовок запроса x-api-key: {api_key} |
| Публичный список сетей | Без аутентификации | GET /v1/chains | Публичный список сетей и статические параметры (не тарифицируется) |
| Публичный статус | Без аутентификации | GET /v1/status | Текущий статус сервиса и вершины сетей (не тарифицируется) |
GET /v1/chains возвращает флаги jsonrpc и data для каждой сети. Обращайтесь к сети по URL JSON-RPC, если она поддерживает JSON-RPC, и через GET /v1/data/{chain}/…, если флаг data равен true (Data API обслуживает только эти сети).
Совет: при передаче ключа через заголовки запроса формируйте URL так, чтобы он заканчивался именем сети, без закрывающего слэша. JSON-RPC доступен исключительно по путям
/v1/{chain}и/v1/{chain}/{api_key}. Запросы с закрывающим слэшем (например,/v1/{chain}/) или без сегмента сети возвращают HTTP 404 с пустым телом. Запросы к неизвестному{chain}возвращают HTTP 404 сerror.data.reason: "unknown_chain"(не тарифицируются).
3. Программное обнаружение сетей и их возможностей
Поддерживаемые сети и их возможности предоставляются динамически. Не хардкодьте статический список сетей в своем приложении. Вместо этого определяйте доступные сети и их возможности во время выполнения:
Получение статических параметров через GET /v1/chains
Этот публичный эндпоинт не требует аутентификации и не тарифицируется, возвращая все общедоступные сети:
GET /v1/chainsПример ответа:
{
"chains": [
{
"chain": "robinhood_mainnet", "name": "Robinhood Chain", "chain_id": 4663,
"jsonrpc": true,
"data": true,
"methods": {
"allow": ["eth_blockNumber", "eth_call", "eth_chainId", "debug_traceTransaction"],
"deny": ["eth_newFilter", "eth_newBlockFilter", "eth_newPendingTransactionFilter", "eth_getFilterLogs", "eth_getFilterChanges", "eth_uninstallFilter", "eth_subscribe", "eth_unsubscribe"]
},
"max_logs_block_range": 1000,
"state_window_blocks": 900
}
]
}Описание полей:
chain: слаг-идентификатор сети (используется для{chain}в URL)name: понятное отображаемое имяchain_id: chain ID по стандарту EIP-155 (десятичное целое число)jsonrpc: включен ли JSON-RPCdata: включен ли Data APImethods: политика методов JSON-RPC для сети, включаяallow(разрешенные методы) иdeny(явно запрещенные методы)max_logs_block_range: максимальный диапазон блоков, допустимый в одном запросеeth_getLogsstate_window_blocks: размер окна исторического состояния в блоках;null, если ограничение отсутствует
Проверка рабочего состояния через GET /v1/status
Этот публичный эндпоинт не требует аутентификации и не тарифицируется, возвращая информацию о готовности сервиса и вершинах сетей:
GET /v1/statusПример ответа:
{
"checked_at": "2026-09-28T12:00:00Z",
"gateway": {
"status": "ok"
},
"chains": [
{
"chain": "robinhood_mainnet", "name": "Robinhood Chain", "chain_id": 4663,
"jsonrpc": true,
"data": true,
"data_features": ["blocks", "transactions", "address_transactions", "transfers", "token_metadata", "freshness"],
"status": "ok",
"head": {
"block": 73017329,
"time": "2026-09-28T11:59:58Z",
"lag_seconds": 2
}
}
]
}Описание полей:
gateway.status: статус сервиса (okилиdegraded)chains[].data_features: возможности, предоставляемые Data API для данной сетиchains[].status: рабочий статус ноды (okилиunavailable)chains[].head: последняя вершина блока (block,time,lag_seconds)
4. Различия между сетями, которые следует учитывать
При переключении между сетями проверяйте поля, возвращаемые GET /v1/chains:
- Доступность методов и политика (
methods.allow/methods.deny): доступные методы JSON-RPC различаются в зависимости от политики методов сети. Запрос запрещенного метода возвращает HTTP 200 с кодом ошибки JSON-RPC-32601(method not available, не тарифицируется). - Диапазон блоков для логов (
max_logs_block_range): максимальные интервалы блоков для запросовeth_getLogsразличаются в зависимости от сети. Превышение лимита сети возвращает HTTP 200 с кодом ошибки JSON-RPC-32602(eth_getLogs block range too large, не тарифицируется). - Окно хранения состояния (
state_window_blocks): сети с полной историей возвращаютnull. В сетях с прунингом состояния запросы к историческому состоянию за пределами окна возвращают HTTP 200 с кодом ошибки JSON-RPC-32011(historical state is not available beyond the most recent <N> blocks, не тарифицируется). - Возможности и покрытие Data API (
data/data_features): сети, предоставляющие набор данных, перечислены на странице Поддерживаемые сети. Запрос набора данных, который сеть не поддерживает, или блока до начала индексированного покрытия возвращает HTTP422(error.codeno_coverage, не тарифицируется). При временной недоступности сервиса — например, при высокой нагрузке на сеть — запросы возвращают HTTP503с заголовкомRetry-After(не тарифицируются).
5. Примеры кода
Полный начальный шаблон: blockvectra/multichain-viem
Один и тот же код работает в различных сетях при обновлении переменной сети (или ее чтении из GET /v1/chains), запрашивая eth_blockNumber через JSON-RPC и актуальность набора данных через Data API:
export BLOCKVECTRA_API_KEY="rgw_your_api_key"
# Change the chain variable to target another chain from Supported Chains
CHAIN="robinhood_mainnet"
# 1. JSON-RPC: Query eth_blockNumber (POST /v1/{chain}, key in the x-api-key header).
RPC_URL="https://api.blockvectra.com/v1/$CHAIN"
curl -s "$RPC_URL" \
-H "Content-Type: application/json" \
-H "x-api-key: $BLOCKVECTRA_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
# 2. Data API: Query dataset freshness (GET /v1/data/{chain}/status/freshness)
curl -s "https://api.blockvectra.com/v1/data/$CHAIN/status/freshness" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"Примеры ответов
Успешный ответ JSON-RPC eth_blockNumber (тарифицируется по весу CU метода):
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x45a27f1"
}Успешный ответ Data API GET /v1/data/{chain}/status/freshness (тарифицируется в CU, тарифицируются только успешные ответы 2xx):
{
"data": [
{
"dataset": "blocks",
"category": "raw",
"max_block_number": 72313256,
"max_day": null,
"max_time": "2026-09-28T03:41:07Z",
"seconds_behind": 0,
"blocks_behind": null,
"days_behind": null,
"checked_at": "2026-09-28T03:41:10Z"
},
{
"dataset": "traces",
"category": "raw",
"max_block_number": 72313256,
"max_day": null,
"max_time": "2026-09-28T03:41:07Z",
"seconds_behind": 0,
"blocks_behind": null,
"days_behind": null,
"coverage_from_block": 72050949,
"coverage_to_block": 72313256,
"coverage_complete": true,
"checked_at": "2026-09-28T03:41:10Z"
},
{
"dataset": "dex_prices",
"category": "derived",
"max_block_number": null,
"max_day": "2026-09-27",
"max_time": "2026-09-27T00:00:00Z",
"seconds_behind": 99667,
"blocks_behind": null,
"days_behind": 1,
"checked_at": "2026-09-28T03:41:10Z"
}
],
"meta": {
"chain": "robinhood_mainnet",
"chain_slug": "ROBINHOOD_MAINNET",
"chain_external_id": "eip155:4663",
"as_of_block": 72313256,
"safe_block": 72313100,
"finalized_block": 72313000,
"coverage": "full",
"refreshed_at": "2026-09-28T03:41:10Z"
}
}Следующие шаги
- Изучите каталог наборов данных, чтобы увидеть все наборы данных, индексируемые BlockVectra.
- Ознакомьтесь с бесплатным тарифом и ценами, чтобы узнать, что включено в ваш аккаунт.
- Войдите в консоль, чтобы создать API key.
Последнее обновление:
Логи против Transfers API
Выбирайте eth_getLogs для журналов событий контрактов или Token Transfers API для индексированной истории переводов ERC-20. Сравнение диапазонов блоков, пагинации, покрытия и финализации.
Программная регистрация
Регистрируйтесь и создавайте API key программно с помощью подписи кошелька Ethereum (EIP-191) без использования браузера для ИИ-агентов, скриптов и рабочих процессов CI.