# JSON-RPC через HTTP

Отправляйте стандартные JSON-RPC 2.0 запросы к блокчейн-узлам через единый HTTPS-эндпоинт. Сеть указывается в пути URL, всё остальное - нативный JSON-RPC самого узла.

POST `rpc.vilna.io/{chain}`
JSON-RPC 2.0
EVM · Solana · Bitcoin
Заголовок `X-Api-Key`

## Формат запроса 

```
POST https://rpc.vilna.io/{chain}
```

`{chain}` - CAIP-2 ID или алиас сети, см. [поддерживаемые сети](/ru/apis/rpc#supported-networks). EVM, Bitcoin и Solana используют JSON-RPC; для Solana также поддерживаются `solana:mainnet` и `solana:testnet`. Tron использует [gRPC](/ru/apis/rpc/grpc).

| Параметр | Значение |
|  --- | --- |
| Content-Type | `application/json` |
| Аутентификация | Заголовок `X-Api-Key` |
| Лимит тела запроса, настраиваемое значение по умолчанию | 1 048 576 байт (1 МиБ) |
| Таймаут запроса, настраиваемое значение по умолчанию | 30 секунд |


## Примеры 

Выберите сеть - каждая принимает свои нативные методы, по алиасу или идентификатору маршрутизации RPC.

Ethereum

EVM-сети - методы eth_*

алиас: ethereum

По алиасу

```bash
curl -X POST https://rpc.vilna.io/ethereum \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1 }'
```

По CAIP-2 ID

```bash
curl -X POST https://rpc.vilna.io/eip155:1 \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1 }'
```

Все EVM-совместимые сети (Ethereum, BSC, Polygon, Avalanche, Arbitrum, Optimism, Base, …) используют один и тот же набор [Ethereum JSON-RPC методов](https://ethereum.org/en/developers/docs/apis/json-rpc/).

Solana

Нативный JSON-RPC Solana

алиас: solana

По алиасу

```bash
curl -X POST https://rpc.vilna.io/solana \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "getBalance", "params": ["83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"], "id": 1 }'
```

По идентификатору RPC

```bash
curl -X POST https://rpc.vilna.io/solana:mainnet \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "getBalance", "params": ["83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"], "id": 1 }'
```

Solana предоставляет свои нативные [JSON-RPC API методы](https://solana.com/docs/rpc).

Bitcoin

Bitcoin Core JSON-RPC

алиас: bitcoin

По алиасу

```bash
curl -X POST https://rpc.vilna.io/bitcoin \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "getblockcount", "params": [], "id": 1 }'
```

По CAIP-2 ID

```bash
curl -X POST https://rpc.vilna.io/bip122:000000000019d6689c085ae165831e93 \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "method": "getblockcount", "params": [], "id": 1 }'
```

Bitcoin поддерживает стандартные [Bitcoin Core JSON-RPC методы](https://developer.bitcoin.org/reference/rpc/).

## Обработка ошибок 

При неизвестном результате отправки транзакции следуйте [порядку проверки перед повтором](/ru/apis/rpc#retries).

Ошибки доступа и ошибки проксирования имеют разные форматы.

**Ошибки аутентификации и доступа** возвращаются в формате [problem+json](/ru/apis/errors). Например, при отсутствующем или невалидном ключе:

```json
{
  "type": "https://docs.vilna.io/apis/errors#unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "code": "auth.unauthorized",
  "detail": "Invalid or missing credentials"
}
```

**Ошибки прокси** возвращаются как JSON-RPC 2.0 с `data.source: vilna`:

```json
{ "jsonrpc": "2.0", "error": { "code": -32001, "message": "chain not found", "data": { "source": "vilna" } }, "id": null }
```

| Ситуация | HTTP-статус | Формат |
|  --- | --- | --- |
| Отсутствует или невалидный ключ | `401` | problem+json |
| Неподходящий тип ключа или недостаточно прав | `403` | problem+json |
| Сеть не найдена | `404` | JSON-RPC, `-32001` |
| Ошибка соединения с узлом | `502` | JSON-RPC, `-32003`, `bad gateway` |
| Сервис узла недоступен | `503` | JSON-RPC, `-32003`, `service unavailable` |
| Истёк срок ожидания ответа узла | `504` | JSON-RPC, `-32003`, `gateway timeout` |
| Превышен лимит частоты запросов | `429` | JSON-RPC, `-32005`, `rate limit exceeded` |


Ошибки доступа и таймауты до передачи запроса узлу могут возвращаться в problem+json; формат определяется местом отказа. Подробнее - [Ошибки](/ru/apis/errors).

**Ошибки узла** приходят напрямую от блокчейн-узла в его нативном формате [ошибки JSON-RPC 2.0](https://www.jsonrpc.org/specification#error_object):

```json
{
  "jsonrpc": "2.0",
  "error": { "code": -32601, "message": "Method not found" },
  "id": 1
}
```