# Rantai yang Didukung

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

BlockVectra adalah penyedia data blockchain multichain: JSON-RPC di setiap rantai yang kami dukung, dan Data API di mana pun tersedia.

## Satu kunci, semua rantai

* **Kunci universal**: API key yang sama berfungsi di setiap jaringan blockchain yang didukung BlockVectra — tanpa kunci terpisah per rantai.
* **Rantai di URL**: setiap permintaan menyebutkan rantainya secara eksplisit melalui segmen path `{chain}`.
* **Penggunaan gabungan**: saldo akun, bucket batas laju Compute Unit (CU), dan batas permintaan per detik paket gratis dibagikan di seluruh rantai.
* **Harga**: lihat [Harga](https://blockvectra.com/en/pricing/).

## Coba tanpa API key

Pilih [endpoint RPC publik gratis](https://blockvectra.com/en/free/#public-rpc) untuk metode dompet tanpa API key. Metode publik dan batas per IP dicantumkan per jaringan; lihat [Mulai Cepat](https://docs.blockvectra.com/en/quickstart/) untuk contoh panggilan.

## Templat URL

Struktur URL standar untuk memanggil JSON-RPC dan Data API:

| Layanan  | Mode            | Templat URL                  | Catatan                                                                    |
| -------- | --------------- | ---------------------------- | -------------------------------------------------------------------------- |
| JSON-RPC | Kunci di path   | `POST /v1/{chain}/{api_key}` | Bentuk paling sederhana; disarankan untuk curl dan klien HTTP              |
| JSON-RPC | Kunci di header | `POST /v1/{chain}`           | Teruskan kunci dalam header permintaan `x-api-key: {api_key}`              |
| Data API | Endpoint REST   | `GET /v1/data/{chain}/…`     | Teruskan kunci dalam header permintaan `x-api-key`                         |
| Status   | Status publik   | `GET /v1/status`             | Tidak memerlukan kunci; mengembalikan status dan head setiap rantai publik |

> **Catatan**: permintaan tanpa segmen rantai (misalnya `POST /v1` atau `POST /v1/`) mengembalikan HTTP 404 dengan body kosong. Lihat [Mulai Cepat](https://docs.blockvectra.com/en/quickstart/) untuk detail pengaturan.

## Matriks rantai yang didukung

Jaringan blockchain yang saat ini tersedia di BlockVectra, beserta kapabilitas layanannya:

Endpoint, metode dengan API key, langganan, pengiriman transaksi, batas status dan log, dataset, testnet terkait, dan panduan ditampilkan per rantai. Fakta yang tidak diketahui tetap tidak diketahui. Perluas rantai di bawah matriks untuk melihat permintaan yang didukung oleh rantai tersebut.

| Rantai | {chain} | Chain ID | Tracing | Endpoint publik | WebSocket | Data API | Jumlah metode dengan kunci API | Push Webhook | Kirim Transaksi | Kirim Transaksi (Endpoint Publik Tanpa Key) | Jendela riwayat state | Rentang blok maksimum eth_getLogs | Dataset Data API | Testnet terkait | Panduan terkait |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [arb_mainnet RPC dan Data API](https://blockvectra.com/id/chains/arb_mainnet/) | arb_mainnet | 42161 | ✓ | `https://api.blockvectra.com/v1/arb_mainnet/public` | Tidak didukung | Terbuka | 43 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 6,000 blok terbaru | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Kesegaran data | Tidak dikenal | Tidak dikenal |
| [base_mainnet RPC dan Data API](https://blockvectra.com/id/chains/base_mainnet/) | base_mainnet | 8453 | — | `https://api.blockvectra.com/v1/base_mainnet/public` | Tidak didukung | Terbuka | 39 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 10,000 blok terbaru | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Kesegaran data | Tidak dikenal | [Base](https://docs.blockvectra.com/en/guides/base/) |
| [bsc_mainnet RPC dan Data API](https://blockvectra.com/id/chains/bsc_mainnet/) | bsc_mainnet | 56 | — | `https://api.blockvectra.com/v1/bsc_mainnet/public` | Tidak didukung | Terbuka | 25 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 100 blok terbaru | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Kesegaran data | Tidak dikenal | Tidak dikenal |
| [Ethereum RPC dan Data API](https://blockvectra.com/id/chains/eth_mainnet/) | eth_mainnet | 1 | ✓ | `https://api.blockvectra.com/v1/eth_mainnet/public` | Tidak didukung | Terbuka | 38 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 250,000 blok terbaru | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Kesegaran data | Tidak dikenal | Tidak dikenal |
| [eth_sepolia RPC dan Data API](https://blockvectra.com/id/chains/eth_sepolia/) | eth_sepolia | 11155111 | — | `https://api.blockvectra.com/v1/eth_sepolia/public` | Tidak didukung | Terbuka | 29 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | Tidak dikenal | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Kesegaran data | Tidak dikenal | Tidak dikenal |
| [HyperEVM RPC dan Data API](https://blockvectra.com/id/chains/hyperevm_mainnet/) | hyperevm_mainnet | 999 | — | `https://api.blockvectra.com/v1/hyperevm_mainnet/public` | Tidak didukung | Terbuka | 24 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Tidak didukung | Tidak didukung | Tidak dikenal | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Saldo, Pemegang, NFT, Kesegaran data | Tidak dikenal | [HyperEVM backfill and polling](https://docs.blockvectra.com/en/guides/hyperevm-backfill/) |
| [polygon_mainnet RPC dan Data API](https://blockvectra.com/id/chains/polygon_mainnet/) | polygon_mainnet | 137 | ✓ | `https://api.blockvectra.com/v1/polygon_mainnet/public` | Tidak didukung | Terbuka | 43 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 126 blok terbaru | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Kesegaran data | Tidak dikenal | Tidak dikenal |
| [Robinhood Chain RPC dan Data API](https://blockvectra.com/id/chains/robinhood_mainnet/) | robinhood_mainnet | 4663 | ✓ | `https://api.blockvectra.com/v1/robinhood_mainnet/public` | Didukung (newHeads, logs) | Terbuka | 43 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 900 blok terbaru | 1,000 blok | Blok, Transaksi, Transaksi alamat, Transfer, Metadata token, Saldo, Pemegang, NFT, Swap DEX, Harga DEX, Saham tertokenisasi, Trace transaksi, Kesegaran data | Tidak dikenal | [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/id/chains/robinhood_testnet/) | robinhood_testnet | 46630 | ✓ | `https://api.blockvectra.com/v1/robinhood_testnet/public` | Didukung (newHeads, logs) | Belum tersedia | 43 | [Didukung · Konfirmasi 1–1 (default 1)](https://blockvectra.com/id/webhooks/), [Panduan push Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Didukung | Didukung | State historis untuk 1,023 blok terbaru | 1,000 blok | Tidak didukung | Tidak dikenal | [Testnet faucet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/), [Robinhood Chain Testnet starter](https://docs.blockvectra.com/en/guides/robinhood-testnet-starter/) |

## Langkah berikutnya dengan kunci 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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](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/)

[Buat langganan Webhook](https://blockvectra.com/id/webhooks/) · [Buat langganan Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Penggunaan dan CU](https://console.blockvectra.com/usage/) · [Isi saldo](https://console.blockvectra.com/billing/)

**HyperEVM**
Blok HyperEVM mencakup transaksi sistem HyperCore (dari alamat 0x2222…2222 atau 0x20…, gasPrice 0).
Pengiriman transaksi belum didukung di rantai ini (`eth_sendRawTransaction` mengembalikan `-32601` `method_not_allowed`); metode baca berfungsi normal.

[Lihat status langsung →](https://blockvectra.com/id/status/)

## Ethereum

* **Chain ID**: `1`
* **Nama rantai (`{chain}` di URL)**: `eth_mainnet`, misalnya `POST /v1/eth_mainnet/{api_key}` atau `GET /v1/data/eth_mainnet/…`.

### JSON-RPC

* **Metode**: metode yang tersedia untuk setiap rantai ditentukan oleh `methods.allow` / `deny` di `GET /v1/chains` (lihat [Kebijakan Metode](https://docs.blockvectra.com/en/api/json-rpc/#method-policy)); metode di luar cakupan tersebut mengembalikan `-32601`.
* **Hanya data terbaru**: jendela status historis ditentukan oleh `state_window_blocks` di `GET /v1/chains`. Kueri status historis di luar jendela mengembalikan `-32011` (tidak ditagih); kueri blok, tanda terima, dan log di luar jendela mengembalikan `-32000 old data not available due to pruning` (tidak ditagih); transaksi yang dicari berdasarkan hash di luar jendela mengembalikan `result: null`.
* **`eth_getLogs`**: rentang blok maksimum per permintaan adalah `max_logs_block_range` di `GET /v1/chains`.

### Data API

* **Hanya data terbaru**: cakupan data Ethereum ditentukan oleh `coverage.from_block` di `GET /v1/data/chains`. Nomor blok atau jendela di bawah awal mengembalikan `422 no_coverage`; hash transaksi yang telah keluar dari jendela mengembalikan `404`.
* **Saat `from_block` bernilai `null`**: awal untuk sementara tidak diketahui. Jangan memperlakukannya sebagai `0` atau riwayat lengkap, dan jangan kirim permintaan historis (berdasarkan nomor blok, jendela, atau hash) untuk Ethereum sampai kembali bernilai integer; permintaan tersebut mengembalikan `503 unavailable`.
* **`503 gateway_overloaded`**: coba lagi dengan backoff (`Retry-After: 1`).
* **Dataset**: dataset yang dilayani Ethereum tercantum di `features` dari `GET /v1/data/chains`; yang lainnya mengembalikan `422 no_coverage` (tidak ditagih). Transaksi dan transfer alamat hanya mencakup jendela: respons yang melintasi awalnya ditandai `meta.coverage: "partial"`.

## Menemukan rantai secara terprogram

Gunakan endpoint publik ini untuk menemukan rantai yang didukung dan statusnya:

### 1. Status layanan (`GET /v1/status`)

Endpoint publik yang tidak memerlukan API key (CORS `*`). Ini hanya mencantumkan rantai yang tersedia secara publik dan mengembalikan status serta head terindeksnya:

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

Contoh respons:

```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
      }
    }
  ]
}
```

Bidang `name` setiap entri selalu merupakan nama tampilan bahasa Inggris dari rantai tersebut. `jsonrpc` dan `data` masing-masing melaporkan apakah rantai tersebut terbuka untuk JSON-RPC dan Data API; `status` adalah `"ok"` atau `"unavailable"`. Jika sebuah rantai sedang melakukan sinkronisasi, panggilan ke rantai tersebut mengembalikan `-32010`. Di `/v1/status`, `status` melaporkan apakah JSON-RPC sehat dan `data_status` melaporkan apakah Data API sehat (`"ok"`, `"syncing"`, atau `"unavailable"`); di `/v1/data/chains`, `coverage.has_data` bernilai `false` berarti rantai tersebut belum memiliki data yang diindeks.

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

Memerlukan API key di header `x-api-key` (ditagih). Mengembalikan rantai publik yang dilayani Data API, masing-masing dengan apa yang dilayaninya (`features`), blok yang dicakup datanya (`coverage`), penanda konsensus node `safe`/`finalized` beserta statusnya (`finality`), dan batas per permintaannya (`limits`):

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

Contoh respons:

```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` melaporkan penanda konsensus node (`model` adalah `"node_tags"`), kesehatan penanda (`status` adalah `"ok"`, `"stale"`, atau `"unavailable"`), dan `safe_block` serta `finalized_block` saat ini (`safe_block >= finalized_block`, dan keduanya bernilai `null` hanya jika status `"unavailable"`).

`coverage.from_block` adalah blok terendah yang diindeks, dibaca secara langsung. Nilainya `0` setelah riwayat rantai mencapai genesis. Nilainya hanya dapat `null` ketika rantai belum memiliki blok yang diindeks sama sekali (`has_data = false`), atau saat awalnya belum dapat ditentukan: perlakukan `null` sebagai tidak diketahui — bukan sebagai riwayat lengkap dan bukan sebagai `0` — dan permintaan historis saat itu mengembalikan `503 unavailable`. Selalu baca dari endpoint ini pada runtime daripada menetapkannya secara statis. `coverage.traces_from_block` adalah blok pertama dengan data trace; permintaan trace sebelumnya, atau di dalam celah, mengembalikan `422 no_coverage` (tidak ditagih).

Memanggil `/v1/data/{chain}/…` dengan rantai yang tidak dikenal atau tidak publik mengembalikan HTTP `404` dengan `error.code` `not_found` (tidak ditagih; nama rantai harus berupa slug huruf kecil yang tepat).
