# 対応チェーン

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

BlockVectra は、複数のチェーンに対応したブロックチェーンデータプロバイダーです。すべての対応チェーンで JSON-RPC を、提供されているチェーンでは Data API も利用できます。

## 1 つのキーですべてのチェーンにアクセス

* **共通キー**：同じ API key を BlockVectra が対応するすべてのブロックチェーンネットワークで利用できます。チェーンごとに別のキーを用意する必要はありません。
* **URL でチェーンを指定**：すべてのリクエストで、`{chain}` パスセグメントを使ってチェーンを明示的に指定します。
* **利用量の集計**：アカウント残高、Compute Unit (CU) のレート制限バケット、無料プランの毎秒リクエスト数上限は、すべてのチェーンで共有されます。
* **料金**：[料金ページ](https://blockvectra.com/en/pricing/)をご覧ください。

## API key なしで試す

[無料の公開 RPC エンドポイント](https://blockvectra.com/en/free/#public-rpc)を選ぶと、API key なしでウォレット向けメソッドを利用できます。公開メソッドと IP ごとの上限はネットワークごとに記載されています。呼び出し例は[クイックスタート](https://docs.blockvectra.com/en/quickstart/)をご覧ください。

## URL テンプレート

JSON-RPC と Data API を呼び出すための標準的な URL 構造：

| サービス     | 方式           | URL テンプレート                   | 備考                                     |
| -------- | ------------ | ---------------------------- | -------------------------------------- |
| JSON-RPC | パスにキーを指定     | `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` リクエストヘッダーでキーを渡す            |
| ステータス    | 公開ステータス      | `GET /v1/status`             | キー不要。公開チェーンごとのステータスと最新ブロックを返す          |

> **注**：チェーンセグメントがないリクエスト（例：`POST /v1` または `POST /v1/`）は、空のレスポンスボディと HTTP 404 を返します。設定の詳細は[クイックスタート](https://docs.blockvectra.com/en/quickstart/)をご覧ください。

## 対応チェーンの一覧

現在 BlockVectra で利用できるブロックチェーンネットワークと、各サービスの対応機能：

エンドポイント、API key で利用できるメソッド、購読、トランザクション送信、状態とログの制限、データセット、関連するテストネットとガイドをチェーンごとに表示します。不明な情報は不明のまま表示します。一覧の下でチェーンを展開すると、そのチェーンが対応するリクエストを確認できます。

| チェーン | {chain} | Chain ID | Tracing | 公開エンドポイント | WebSocket | Data API | API キーで利用できるメソッド数 | Webhook プッシュ | トランザクション送信 | トランザクション送信（key 不要の公開エンドポイント） | 状態履歴ウィンドウ | eth_getLogs 最大ブロック範囲 | Data API データセット | 関連テストネット | 関連ガイド |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [arb_mainnet RPC および Data API](https://blockvectra.com/ja/chains/arb_mainnet/) | arb_mainnet | 42161 | ✓ | `https://api.blockvectra.com/v1/arb_mainnet/public` | 非対応 | 利用可能 | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 6,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [base_mainnet RPC および Data API](https://blockvectra.com/ja/chains/base_mainnet/) | base_mainnet | 8453 | — | `https://api.blockvectra.com/v1/base_mainnet/public` | 非対応 | 利用可能 | 39 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/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/ja/chains/bsc_mainnet/) | bsc_mainnet | 56 | — | `https://api.blockvectra.com/v1/bsc_mainnet/public` | 非対応 | 利用可能 | 25 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 100 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [Ethereum RPC および Data API](https://blockvectra.com/ja/chains/eth_mainnet/) | eth_mainnet | 1 | ✓ | `https://api.blockvectra.com/v1/eth_mainnet/public` | 非対応 | 利用可能 | 38 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 250,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [eth_sepolia RPC および Data API](https://blockvectra.com/ja/chains/eth_sepolia/) | eth_sepolia | 11155111 | — | `https://api.blockvectra.com/v1/eth_sepolia/public` | 非対応 | 利用可能 | 29 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 不明 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [HyperEVM RPC および Data API](https://blockvectra.com/ja/chains/hyperevm_mainnet/) | hyperevm_mainnet | 999 | — | `https://api.blockvectra.com/v1/hyperevm_mainnet/public` | 非対応 | 利用可能 | 24 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/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/ja/chains/polygon_mainnet/) | polygon_mainnet | 137 | ✓ | `https://api.blockvectra.com/v1/polygon_mainnet/public` | 非対応 | 利用可能 | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 126 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [Robinhood Chain RPC および Data API](https://blockvectra.com/ja/chains/robinhood_mainnet/) | robinhood_mainnet | 4663 | ✓ | `https://api.blockvectra.com/v1/robinhood_mainnet/public` | 対応 (newHeads, logs) | 利用可能 | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/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/ja/chains/robinhood_testnet/) | robinhood_testnet | 46630 | ✓ | `https://api.blockvectra.com/v1/robinhood_testnet/public` | 対応 (newHeads, logs) | まだ利用できません | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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/ja/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"` が付けられます。

## プログラムでチェーンを取得する

以下の公開エンドポイントで、対応チェーンとそのステータスを取得できます。

### 1. サービスのステータス（`GET /v1/status`）

API key 不要の公開エンドポイントです（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 key が必要です（課金対象）。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` で、両方が `null` になるのはステータスが `"unavailable"` の場合のみです）。

`coverage.from_block` は、インデックス化された最も古いブロックで、リアルタイムに取得されます。チェーンの履歴がジェネシスブロックまで到達すると `0` になります。`null` になるのは、インデックス化されたブロックがまったくない場合（`has_data = false`）か、開始位置を判定できない間のみです。`null` は不明として扱い、全履歴があるとも `0` とも解釈しないでください。その間、過去データのリクエストは `503 unavailable` を返します。値をハードコードせず、常に実行時にこのエンドポイントから取得してください。`coverage.traces_from_block` はトレースデータがある最初のブロックです。それより前、またはデータが欠けている範囲のトレースリクエストは `422 no_coverage`（課金対象外）を返します。

不明なチェーンや非公開のチェーンを指定して `/v1/data/{chain}/…` を呼び出すと、HTTP `404` と `error.code` の `not_found` を返します（課金対象外。チェーン名は小文字の slug と完全に一致する必要があります）。
