# 지원 체인

> Source: https://docs.blockvectra.com/ko/chains/

BlockVectra는 멀티체인 블록체인 데이터 서비스입니다. 지원되는 모든 체인에서 JSON-RPC를 제공하며, Data API가 제공되는 체인에서는 Data API도 사용할 수 있습니다.

## 하나의 API 키로 모든 체인 사용

* **공통 API 키**: 같은 API 키를 BlockVectra가 지원하는 모든 블록체인 네트워크에서 사용할 수 있습니다. 체인마다 키를 발급할 필요가 없습니다.
* **URL로 체인 지정**: 모든 요청은 `{chain}` 경로 구간으로 체인을 명시합니다.
* **사용량 합산**: 계정 잔액, Compute Unit (CU) 속도 제한 버킷 및 무료 플랜의 초당 요청 한도는 모든 체인에서 공유됩니다.
* **요금**: [요금 안내](https://blockvectra.com/en/pricing/)를 확인하세요.

## API 키 없이 사용해 보기

API 키 없이 지갑용 메서드를 호출하려면 [무료 공개 RPC 엔드포인트](https://blockvectra.com/en/free/#public-rpc)를 선택하세요. 공개 메서드와 IP별 한도는 네트워크마다 안내되어 있습니다. 호출 예제는 [빠른 시작](https://docs.blockvectra.com/en/quickstart/)을 확인하세요.

## URL 형식

JSON-RPC 및 Data API 호출에 사용하는 기본 URL 형식입니다.

| 서비스      | 인증 방식        | URL 형식                       | 설명                                 |
| -------- | ------------ | ---------------------------- | ---------------------------------- |
| JSON-RPC | 경로에 API 키 포함 | `POST /v1/{chain}/{api_key}` | 가장 간단한 형식으로, curl 및 HTTP 클라이언트에 권장 |
| JSON-RPC | 헤더에 API 키 포함 | `POST /v1/{chain}`           | `x-api-key: {api_key}` 요청 헤더로 키 전달 |
| Data API | REST 엔드포인트   | `GET /v1/data/{chain}/…`     | `x-api-key` 요청 헤더로 키 전달            |
| 상태       | 공개 상태 조회     | `GET /v1/status`             | 키 없이 공개 체인별 상태 및 최신 블록 조회          |

> **참고**: 체인 경로 구간이 없는 요청(예: `POST /v1` 또는 `POST /v1/`)은 빈 본문과 함께 HTTP 404를 반환합니다. 설정 방법은 [빠른 시작](https://docs.blockvectra.com/en/quickstart/)을 확인하세요.

## 체인별 지원 기능

현재 BlockVectra에서 사용할 수 있는 블록체인 네트워크와 제공 기능입니다.

체인별 엔드포인트, API 키로 호출하는 메서드, 구독, 트랜잭션 전송, 상태 및 로그 조회 한도, 데이터셋, 관련 테스트넷과 가이드를 표시합니다. 확인되지 않은 정보는 알 수 없음으로 표시합니다. 표 아래에서 체인을 펼치면 해당 체인에서 지원하는 요청을 확인할 수 있습니다.

| 체인 | {chain} | Chain ID | Tracing | 공개 엔드포인트 | WebSocket | Data API | API 키로 사용할 수 있는 메서드 수 | Webhook 푸시 | 트랜잭션 전송 | 트랜잭션 전송 (key 없는 공개 엔드포인트) | 상태 기록 보관 기간 | eth_getLogs 최대 블록 범위 | Data API 데이터셋 | 관련 테스트넷 | 관련 가이드 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [arb_mainnet RPC 및 Data API](https://blockvectra.com/ko/chains/arb_mainnet/) | arb_mainnet | 42161 | ✓ | `https://api.blockvectra.com/v1/arb_mainnet/public` | 미지원 | 사용 가능 | 43 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 6,000개 블록의 과거 상태 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 데이터 최신성 | 알 수 없음 | 알 수 없음 |
| [base_mainnet RPC 및 Data API](https://blockvectra.com/ko/chains/base_mainnet/) | base_mainnet | 8453 | — | `https://api.blockvectra.com/v1/base_mainnet/public` | 미지원 | 사용 가능 | 39 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 10,000개 블록의 과거 상태 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 데이터 최신성 | 알 수 없음 | [Base](https://docs.blockvectra.com/en/guides/base/) |
| [bsc_mainnet RPC 및 Data API](https://blockvectra.com/ko/chains/bsc_mainnet/) | bsc_mainnet | 56 | — | `https://api.blockvectra.com/v1/bsc_mainnet/public` | 미지원 | 사용 가능 | 25 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 100개 블록의 과거 상태 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 데이터 최신성 | 알 수 없음 | 알 수 없음 |
| [Ethereum RPC 및 Data API](https://blockvectra.com/ko/chains/eth_mainnet/) | eth_mainnet | 1 | ✓ | `https://api.blockvectra.com/v1/eth_mainnet/public` | 미지원 | 사용 가능 | 38 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 250,000개 블록의 과거 상태 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 데이터 최신성 | 알 수 없음 | 알 수 없음 |
| [eth_sepolia RPC 및 Data API](https://blockvectra.com/ko/chains/eth_sepolia/) | eth_sepolia | 11155111 | — | `https://api.blockvectra.com/v1/eth_sepolia/public` | 미지원 | 사용 가능 | 29 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 알 수 없음 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 데이터 최신성 | 알 수 없음 | 알 수 없음 |
| [HyperEVM RPC 및 Data API](https://blockvectra.com/ko/chains/hyperevm_mainnet/) | hyperevm_mainnet | 999 | — | `https://api.blockvectra.com/v1/hyperevm_mainnet/public` | 미지원 | 사용 가능 | 24 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 미지원 | 미지원 | 알 수 없음 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 잔액, 보유자, NFT, 데이터 최신성 | 알 수 없음 | [HyperEVM backfill and polling](https://docs.blockvectra.com/en/guides/hyperevm-backfill/) |
| [polygon_mainnet RPC 및 Data API](https://blockvectra.com/ko/chains/polygon_mainnet/) | polygon_mainnet | 137 | ✓ | `https://api.blockvectra.com/v1/polygon_mainnet/public` | 미지원 | 사용 가능 | 43 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 126개 블록의 과거 상태 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 데이터 최신성 | 알 수 없음 | 알 수 없음 |
| [Robinhood Chain RPC 및 Data API](https://blockvectra.com/ko/chains/robinhood_mainnet/) | robinhood_mainnet | 4663 | ✓ | `https://api.blockvectra.com/v1/robinhood_mainnet/public` | 지원 (newHeads, logs) | 사용 가능 | 43 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 900개 블록의 과거 상태 | 1,000개 블록 | 블록, 트랜잭션, 주소 트랜잭션, 전송, 토큰 메타데이터, 잔액, 보유자, NFT, DEX 스왑, DEX 가격, 토큰화 주식, 트레이스, 데이터 최신성 | 알 수 없음 | [Robinhood Chain](https://docs.blockvectra.com/en/guides/robinhood-chain/), [Stock token multiplier](https://docs.blockvectra.com/en/guides/stock-token-multiplier/), [Tokenized stocks](https://docs.blockvectra.com/en/guides/stocks/) |
| [robinhood_testnet RPC](https://blockvectra.com/ko/chains/robinhood_testnet/) | robinhood_testnet | 46630 | ✓ | `https://api.blockvectra.com/v1/robinhood_testnet/public` | 지원 (newHeads, logs) | 아직 제공되지 않음 | 43 | [지원 · 확인 수 1–1 (기본값 1)](https://blockvectra.com/ko/webhooks/), [Webhook 푸시 가이드](https://docs.blockvectra.com/en/guides/webhook-push/) | 지원 | 지원 | 최근 1,023개 블록의 과거 상태 | 1,000개 블록 | 미지원 | 알 수 없음 | [Testnet faucet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/), [Robinhood Chain Testnet starter](https://docs.blockvectra.com/en/guides/robinhood-testnet-starter/) |

## API 키를 받은 후

### arb_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/arb_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/arb_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/arb_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### base_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/base_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/base_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/base_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### bsc_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/bsc_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/bsc_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/bsc_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### Ethereum

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/eth_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/eth_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/eth_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### eth_sepolia

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/eth_sepolia' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/eth_sepolia' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/eth_sepolia/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### HyperEVM

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/hyperevm_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/hyperevm_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/hyperevm_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### polygon_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/polygon_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/polygon_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/polygon_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### Robinhood Chain

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/robinhood_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/robinhood_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

#### WebSocket

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}' | websocat --no-close -H="x-api-key: $BLOCKVECTRA_API_KEY" 'wss://api.blockvectra.com/v1/robinhood_mainnet'
```

[WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

### robinhood_testnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/robinhood_testnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/robinhood_testnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### WebSocket

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}' | websocat --no-close -H="x-api-key: $BLOCKVECTRA_API_KEY" 'wss://api.blockvectra.com/v1/robinhood_testnet'
```

[WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/)

[Webhook 구독 만들기](https://blockvectra.com/ko/webhooks/) · [Webhook 구독 만들기](https://docs.blockvectra.com/en/guides/webhook-push/) · [사용량과 CU](https://console.blockvectra.com/usage/) · [충전](https://console.blockvectra.com/billing/)

**HyperEVM**
HyperEVM 블록에는 HyperCore 시스템 트랜잭션(발신 주소 0x2222…2222 또는 0x20…, gasPrice 0)이 포함됩니다.
이 체인에서는 아직 트랜잭션 전송을 지원하지 않습니다(`eth_sendRawTransaction`은 `-32601` `method_not_allowed` 반환). 읽기 메서드는 정상적으로 사용할 수 있습니다.

[실시간 상태 보기 →](https://blockvectra.com/ko/status/)

## Ethereum

* **Chain ID**: `1`
* **체인 이름(URL의 `{chain}`)**: `eth_mainnet`. 예: `POST /v1/eth_mainnet/{api_key}` 또는 `GET /v1/data/eth_mainnet/…`.

### JSON-RPC

* **메서드**: 체인별 지원 메서드는 `GET /v1/chains`의 `methods.allow` / `deny`로 결정됩니다([메서드 정책](https://docs.blockvectra.com/en/api/json-rpc/#method-policy) 참고). 이 범위 밖의 메서드는 `-32601`을 반환합니다.
* **최근 데이터만 조회 가능**: 과거 상태 조회 범위는 `GET /v1/chains`의 `state_window_blocks`로 결정됩니다. 범위 밖의 과거 상태 조회는 `-32011`(과금 없음), 블록·영수증·로그 조회는 `-32000 old data not available due to pruning`(과금 없음)을 반환합니다. 범위 밖의 트랜잭션을 해시로 조회하면 `result: null`을 반환합니다.
* **`eth_getLogs`**: 요청당 최대 블록 범위는 `GET /v1/chains`의 `max_logs_block_range`로 결정됩니다.

### Data API

* **최근 데이터만 조회 가능**: Ethereum 데이터 범위는 `GET /v1/data/chains`의 `coverage.from_block`로 결정됩니다. 시작 블록보다 이전 블록 번호나 구간을 요청하면 `422 no_coverage`, 범위를 벗어난 트랜잭션 해시를 요청하면 `404`를 반환합니다.
* **`from_block`이 `null`인 경우**: 시작 블록을 일시적으로 알 수 없는 상태입니다. 이를 `0`이나 전체 이력으로 해석하지 마세요. 다시 정수가 될 때까지 Ethereum의 과거 데이터 요청(블록 번호, 구간 또는 해시)을 보내지 마세요. 해당 요청은 `503 unavailable`을 반환합니다.
* **`503 gateway_overloaded`**: 백오프를 적용해 재시도하세요(`Retry-After: 1`).
* **데이터셋**: Ethereum에서 제공하는 데이터셋은 `GET /v1/data/chains`의 `features`에 나열됩니다. 그 밖의 데이터셋은 `422 no_coverage`를 반환하며 과금하지 않습니다. 주소별 트랜잭션과 전송 이력도 이 범위만 포함합니다. 시작 블록을 넘어가는 응답은 `meta.coverage: "partial"`로 표시됩니다.

## API로 체인 목록 조회

다음 공개 엔드포인트에서 지원 체인과 상태를 조회할 수 있습니다.

### 1. 서비스 상태 (`GET /v1/status`)

API 키가 필요 없는 공개 엔드포인트입니다(CORS `*`). 공개된 체인만 나열하며, 체인별 상태와 인덱싱된 최신 블록을 반환합니다.

```bash
curl -s "https://api.blockvectra.com/v1/status"
```

응답 예제:

```json
{
  "checked_at": "2026-09-28T07:40:00Z",
  "gateway": { "status": "ok" },
  "chains": [
    {
      "chain": "robinhood_mainnet",
      "name": "Robinhood Chain",
      "chain_id": 4663,
      "jsonrpc": true,
      "data": true,
      "status": "ok",
      "data_status": "ok",
      "sync": { "stage": "synced", "node_block": 74600000, "target_block": null },
      "head": {
        "block": 74600000,
        "time": "2026-09-28T07:39:58Z",
        "lag_seconds": 3
      }
    },
    {
      "chain": "eth_mainnet",
      "name": "Ethereum",
      "chain_id": 1,
      "jsonrpc": true,
      "data": true,
      "status": "ok",
      "data_status": "ok",
      "sync": { "stage": "synced", "node_block": 26010000, "target_block": null },
      "head": {
        "block": 26010000,
        "time": "2026-09-28T07:39:59Z",
        "lag_seconds": 1
      }
    }
  ]
}
```

각 항목의 `name`은 항상 체인의 영문 표시 이름입니다. `jsonrpc`와 `data`는 각각 해당 체인에서 JSON-RPC와 Data API가 제공되는지 나타냅니다. `status`는 `"ok"` 또는 `"unavailable"`입니다. 체인이 동기화 중이면 해당 체인 호출은 `-32010`을 반환합니다. `/v1/status`에서 `status`는 JSON-RPC의 정상 여부, `data_status`는 Data API의 상태(`"ok"`, `"syncing"`, `"unavailable"`)를 나타냅니다. `/v1/data/chains`의 `coverage.has_data`가 `false`이면 아직 인덱싱된 데이터가 없습니다.

### 2. Data API 체인 (`GET /v1/data/chains`)

`x-api-key` 헤더에 API 키가 필요하며 과금되는 호출입니다. Data API가 제공되는 공개 체인과 각 체인의 기능(`features`), 데이터가 포함하는 블록 범위(`coverage`), 노드 합의의 `safe`/`finalized` 기준 블록 및 상태(`finality`), 요청당 한도(`limits`)를 반환합니다.

```bash
curl -s "https://api.blockvectra.com/v1/data/chains" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

응답 예제:

```json
{
  "data": [
    {
      "chain": "robinhood_mainnet",
      "chain_slug": "ROBINHOOD_MAINNET",
      "name": "Robinhood Chain",
      "chain_id": 4663,
      "chain_external_id": "eip155:4663",
      "features": [
        "blocks", "transactions", "address_transactions", "transfers", "token_metadata",
        "balances", "holders", "nfts", "dex_swaps", "dex_prices", "stocks", "traces", "freshness"
      ],
      "coverage": { "from_block": 0, "traces_from_block": 1000000, "has_data": true },
      "finality": { "model": "node_tags", "status": "ok", "safe_block": 74599400, "finalized_block": 74598900 },
      "limits": { "max_page_size": 500, "max_window_blocks": 100000, "max_pools_for_token": 200, "max_batch_addresses": 100 }
    },
    {
      "chain": "eth_mainnet",
      "chain_slug": "ETH_MAINNET",
      "name": "Ethereum",
      "chain_id": 1,
      "chain_external_id": "eip155:1",
      "features": ["blocks", "transactions", "address_transactions", "transfers", "token_metadata", "freshness"],
      "coverage": { "from_block": 1000000, "traces_from_block": null, "has_data": true },
      "finality": { "model": "node_tags", "status": "stale", "safe_block": 26009950, "finalized_block": 26009900 },
      "limits": { "max_page_size": 500, "max_window_blocks": 100000, "max_pools_for_token": 200, "max_batch_addresses": 100 }
    }
  ]
}
```

`finality`는 노드의 합의 기준 블록(`model`은 `"node_tags"`), 기준 블록의 상태(`status`는 `"ok"`, `"stale"`, `"unavailable"`) 및 현재 `safe_block`과 `finalized_block`을 나타냅니다. `safe_block >= finalized_block`이며, 상태가 `"unavailable"`일 때만 두 값 모두 `null`입니다.

`coverage.from_block`은 실시간으로 읽은 가장 낮은 인덱싱 블록입니다. 체인의 이력이 제네시스 블록까지 포함되면 `0`입니다. 인덱싱된 블록이 전혀 없거나(`has_data = false`) 시작점을 확인할 수 없을 때만 `null`일 수 있습니다. `null`은 알 수 없음으로 처리하세요. 전체 이력이나 `0`을 뜻하지 않으며, 이 상태에서 과거 데이터 요청은 `503 unavailable`을 반환합니다. 값을 하드코딩하지 말고 실행 시 이 엔드포인트에서 읽으세요. `coverage.traces_from_block`은 trace 데이터가 있는 첫 블록입니다. 이 블록 이전이나 데이터가 누락된 구간의 trace 요청은 `422 no_coverage`를 반환하며 과금하지 않습니다.

알 수 없거나 공개되지 않은 체인으로 `/v1/data/{chain}/…`를 호출하면 HTTP `404`와 `error.code` 값 `not_found`를 반환하며 과금하지 않습니다. 체인 이름은 정확한 소문자 slug여야 합니다.
