# Panduan integrasi Robinhood Chain: klien RPC, deployment, dan peristiwa

> Source: https://docs.blockvectra.com/id/guides/robinhood-chain/

Gunakan RPC Robinhood Chain untuk pemeriksaan koneksi publik dan pembacaan terautentikasi, atau Data API untuk dataset mainnet yang didukung. Pengembang dan agen AI menggunakan endpoint yang sama; pisahkan permintaan mainnet dan testnet.

## Tugas yang dibantu panduan ini

* [Uji RPC Robinhood Chain](#connect-with-viem-or-ethers) dengan pembacaan publik menggunakan viem atau ethers, lalu gunakan kunci untuk metode terautentikasi.
* [Periksa koneksi RPC testnet](#testnet) dengan membaca `eth_chainId` sebelum menjalankan operasi testnet.
* [Kueri aktivitas saham tertokenisasi](#tokenized-stock-data) dengan Data API mainnet setelah memeriksa dukungan dataset; metrik tersebut menjelaskan aktivitas on-chain, bukan harga saham.

## Akses RPC dan WebSocket

* **URL RPC publik**: Temukan endpoint tanpa kunci, metode publik yang didukung, dan batas laju di [halaman mainnet Robinhood Chain](https://blockvectra.com/en/chains/robinhood_mainnet/) atau [halaman testnet](https://blockvectra.com/en/chains/robinhood_testnet/).
* **JSON-RPC dengan API key**: Gunakan endpoint dan contoh curl di bawah ini. Untuk log, lihat [referensi metode eth\_getLogs](https://docs.blockvectra.com/en/api/json-rpc/methods/eth_getLogs/) dan [panduan batas rentang blok](https://docs.blockvectra.com/en/guides/getlogs-block-range/).
* **WebSocket dengan API key**: Gunakan endpoint WebSocket di bawah ini dan ikuti [panduan langganan WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/) untuk `newHeads` dan `logs`. Akses RPC publik adalah HTTP JSON-RPC; koneksi WebSocket memerlukan kunci.

## Informasi jaringan dan endpoint

Setiap permintaan ke Robinhood Chain mengidentifikasi jaringan targetnya secara eksplisit di jalur URL menggunakan slug `robinhood_mainnet`. JSON-RPC mendukung autentikasi kunci berbasis jalur dan autentikasi header permintaan (`x-api-key`), sedangkan Data API melayani endpoint REST di bawah `/v1/data/robinhood_mainnet/`.

Parameter dan endpoint di bawah ini mencerminkan parameter jaringan aktif:

| Parameter / Endpoint | Nilai / Templat | Autentikasi |
|---|---|---|
| Chain ID (EIP-155) | `4663` | — |
| JSON-RPC (kunci di path) | `POST https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}` | API key di path URL |
| JSON-RPC (kunci di header) | `POST https://api.blockvectra.com/v1/robinhood_mainnet` | Header x-api-key: {api_key} |
| WebSocket (kunci di path) | `wss://api.blockvectra.com/v1/robinhood_mainnet/{api_key}` | API key di path URL |
| WebSocket (kunci di header) | `wss://api.blockvectra.com/v1/robinhood_mainnet` | Header x-api-key: {api_key} atau Authorization: Bearer {api_key} |
| Langganan WebSocket | `newHeads, logs` | — |
| Basis Data API | `GET https://api.blockvectra.com/v1/data/robinhood_mainnet/…` | Header x-api-key: {api_key} |
| Status publik | `GET https://api.blockvectra.com/v1/status` | Tanpa autentikasi (publik) |

## Hubungkan dengan viem atau ethers

Pengembang dan Agen AI dapat menggunakan pengaturan sisi server yang sama. Gunakan Node.js 24 atau lebih baru, viem 2 atau ethers 6, dan mulailah dengan pembacaan publik. Tetapkan `BLOCKVECTRA_API_KEY` secara aman di lingkungan untuk metode yang menggunakan kunci dan WebSocket. Jauhkan kunci dan URL RPC yang berisi kunci dari kode browser, log, dan kontrol versi.

Simpan ini sebagai `network.mjs`. Mulailah di testnet; tetapkan `BLOCKVECTRA_CHAIN=robinhood_mainnet` untuk beralih ke mainnet. Skrip ini membaca `chain_id` dan kebijakan metode dari [GET /v1/chains](https://api.blockvectra.com/v1/chains). Untuk pembacaan tanpa kunci, gunakan `public.url` dari katalog dan hanya metode yang tercantum dalam `public.methods`; ketersediaan HTTP publik tidak menyiratkan akses WebSocket.

```js
const chainSlug = process.env.BLOCKVECTRA_CHAIN ?? 'robinhood_testnet';
const key = process.env.BLOCKVECTRA_API_KEY;
const catalogUrl = 'https://api.blockvectra.com/v1/chains';
const response = await fetch(catalogUrl, { signal: AbortSignal.timeout(15_000) });
if (!response.ok) throw new Error(`Chains HTTP ${response.status}`);
const catalog = await response.json();
export const chainInfo = catalog.chains.find(item => item.chain === chainSlug);
if (!chainInfo || !Number.isSafeInteger(chainInfo.chain_id) || chainInfo.chain_id <= 0) {
  throw new Error('Missing chain or chain_id');
}
export function allows(method) {
  const matches = pattern => pattern.endsWith('*')
    ? method.startsWith(pattern.slice(0, -1)) : pattern === method;
  if (!key) return (chainInfo.public?.methods ?? []).some(matches);
  return (chainInfo.methods?.allow ?? []).some(matches)
    && !(chainInfo.methods?.deny ?? []).some(matches);
}
if (!allows('eth_chainId')) throw new Error('eth_chainId is unavailable');
export const rpcUrl = key
  ? new URL(`./${chainSlug}/${encodeURIComponent(key)}`, catalogUrl).href
  : chainInfo.public?.url;
if (!rpcUrl) throw new Error('Public RPC is unavailable; set BLOCKVECTRA_API_KEY');
```

Simpan sebagai `viem-client.mjs`, instal dengan `npm install viem@2`, lalu jalankan `node viem-client.mjs`.

```js
import { createPublicClient, defineChain, http } from 'viem';
import { chainInfo, rpcUrl } from './network.mjs';

export const chain = defineChain({
  id: chainInfo.chain_id,
  name: chainInfo.name,
  nativeCurrency: { name: 'ETH', symbol: 'ETH', decimals: 18 },
  rpcUrls: { default: { http: [rpcUrl] } },
});
export const client = createPublicClient({ chain, transport: http(rpcUrl) });
if (await client.getChainId() !== chain.id) throw new Error('RPC chain ID mismatch');
console.log(await client.getBlockNumber());
```

Untuk ethers, simpan sebagai `ethers-client.mjs`, instal dengan `npm install ethers@6`, lalu jalankan `node ethers-client.mjs`.

```js
import { JsonRpcProvider } from 'ethers';
import { chainInfo, rpcUrl } from './network.mjs';

const provider = new JsonRpcProvider(rpcUrl, chainInfo.chain_id, { batchMaxCount: 1 });
const network = await provider.getNetwork();
if (network.chainId !== BigInt(chainInfo.chain_id)) throw new Error('RPC chain ID mismatch');
console.log(await provider.getBlockNumber());
provider.destroy();
```

## Deploy dengan Foundry atau Hardhat

Danai deployer dengan test ETH melalui [faucet testnet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/) terlebih dahulu; transaksi mainnet memerlukan mainnet ETH. [Panduan jaringan dan deployment resmi](https://docs.robinhood.com/chain/deploy-smart-contracts/) mencantumkan Chain ID mainnet dan testnet (diakses: 2026-10-07). Tabel endpoint di halaman ini menggunakan `/v1/chains`.

Ekspor URL yang dipilih dan Chain ID dari `network.mjs`. Periksa `eth_sendRawTransaction` terhadap `methods.allow` dan `methods.deny` sebelum menyiarkan.

```bash
export RPC_URL="$(node --input-type=module -e "import { rpcUrl, allows } from './network.mjs'; if (!allows('eth_sendRawTransaction')) throw new Error('Broadcast unavailable'); console.log(rpcUrl)")"
export CHAIN_ID="$(node --input-type=module -e "import { chainInfo } from './network.mjs'; console.log(chainInfo.chain_id)")"
```

Lanjutkan dengan [tutorial deployment Foundry atau Hardhat](https://docs.blockvectra.com/en/guides/deploy-contract/) bersama untuk `Hello.sol`, pengaturan alat, penyiaran, dan pemeriksaan resi.

## Dengarkan peristiwa kontrak melalui WebSocket

Simpan sebagai `watch-logs.mjs` dan tetapkan `LOG_ADDRESS` ke kontrak yang di-deploy atau kontrak token yang Anda pantau. Jalankan `node watch-logs.mjs`. Kode memeriksa `ws` dan `subscriptions` dari `/v1/chains` sebelum berlangganan ke `logs`.

```js
import { createPublicClient, webSocket, isAddress } from 'viem';
import { chain } from './viem-client.mjs';
import { chainInfo, rpcUrl } from './network.mjs';

if (!process.env.BLOCKVECTRA_API_KEY) throw new Error('WebSocket requires BLOCKVECTRA_API_KEY');
const address = process.env.LOG_ADDRESS;
if (!chainInfo.ws || !chainInfo.subscriptions?.includes('logs')) {
  throw new Error('WebSocket logs are unavailable; use HTTP backfill or webhook push');
}
if (!address || !isAddress(address)) throw new Error('Set LOG_ADDRESS');
const wsUrl = new URL(rpcUrl);
wsUrl.protocol = 'wss:';
const client = createPublicClient({ chain, transport: webSocket(wsUrl.href) });
const unwatch = client.watchEvent({
  address, poll: false,
  onLogs: logs => console.log(logs),
  onError: error => console.error(error),
});
process.once('SIGINT', () => { unwatch(); process.exit(0); });
```

Setelah listener dimulai, kirim transaksi `ping()` dari terminal lain menggunakan variabel deployment yang diekspor yang sama:

```bash
cast send "$CONTRACT_ADDRESS" "ping()" --rpc-url "$RPC_URL" \
  --private-key "$DEPLOYER_PRIVATE_KEY"
```

Simpan blok terakhir yang diproses secara persisten dan hapus duplikasi berdasarkan `(blockHash, transactionHash, logIndex)`. Setelah menyambung kembali, lakukan backfill blok yang terlewat dengan permintaan `eth_getLogs` terbatas; rekonsiliasi log yang ditandai `removed` pada saat terjadi reorg. Lihat [langganan WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/) dan [batas rentang blok](https://docs.blockvectra.com/en/guides/getlogs-block-range/).

Untuk peristiwa alamat yang dikirimkan ke penerima HTTPS Anda, **GET /v1/push/chains mencantumkan rantai yang didukung** dan pengaturan konfirmasi; gunakan header `x-api-key`. Ikuti [panduan push webhook](https://docs.blockvectra.com/en/guides/webhook-push/) untuk langganan, verifikasi tanda tangan, deduplikasi, dan pemutaran ulang. Untuk kueri aktivitas token saham mainnet, lanjutkan dengan [panduan saham](https://docs.blockvectra.com/en/guides/stocks/).

## Contoh curl langsung

Anda dapat langsung melakukan panggilan JSON-RPC menggunakan klien HTTP standar. Ganti `{api_key}` dengan API key BlockVectra Anda:

**eth_chainId (Header)**

Kueri Chain ID EIP-155 menggunakan header permintaan `x-api-key`:

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: {api_key}" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
```


  **eth_blockNumber (Path)**

Kueri nomor blok terbaru dengan meneruskan API key Anda di jalur URL:

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```


### Struktur respons

Respons mengikuti spesifikasi JSON-RPC 2.0:

* **Berhasil**: Mengembalikan struktur respons dengan `jsonrpc: "2.0"`, `id` yang sama, dan string `result` yang berisi kuantitas berkode heksadesimal (`eth_chainId` mengembalikan Chain ID berkode heksadesimal; `eth_blockNumber` mengembalikan tinggi blok terbaru).
* **Metode yang tidak diizinkan**: Meminta metode di luar metode yang diizinkan jaringan mengembalikan kode error JSON-RPC `-32601` (`method not available`, tidak ditagih).
* **Kueri di luar jendela**: Permintaan status historis yang lebih awal dari jendela retensi status mengembalikan kode error JSON-RPC `-32011` (tidak ditagih).
* **Parameter tidak valid**: Parameter permintaan yang salah format atau tidak diizinkan mengembalikan kode error JSON-RPC `-32602` (tidak ditagih).

## Kemampuan dan kebijakan metode

Metode JSON-RPC yang tersedia, batas rentang blok log, dan retensi status historis di Robinhood Chain dipublikasikan secara dinamis melalui `GET /v1/chains`. Pelacakan eksekusi (`debug_trace*`, termasuk `debug_traceTransaction`) diatur oleh kebijakan metode rantai:

### Parameter dan batas jaringan

- **Rentang blok eth_getLogs**: Maksimal 1000 blok per permintaan
- **Jendela status historis**: 900 blok terakhir (kueri di luar itu mengembalikan -32011)
- **Pelacakan eksekusi (debug_trace*)**: Didukung (debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash)

Metode yang diizinkan per rantai: [Rantai yang Didukung](https://docs.blockvectra.com/en/chains/)

## Testnet

Untuk mendapatkan test ETH untuk transaksi, lihat [panduan faucet testnet Robinhood Chain](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/).

Testnet Robinhood Chain (Chain ID: 46630) menggunakan API key yang sama dengan mainnet pada endpoint `https://api.blockvectra.com/v1/robinhood_testnet`, diautentikasi melalui header permintaan `x-api-key`.

Permintaan testnet menggunakan bobot CU yang sama dengan mainnet dan memotong dari saldo serta kredit gratis yang sama. Metode JSON-RPC yang tersedia dan retensi status historis di Testnet Robinhood Chain dipublikasikan secara dinamis melalui `GET /v1/chains`.

Untuk panduan awal tiga langkah yang dapat dijalankan yang membaca testnet tanpa kunci, mengalirkan log melalui WebSocket, lalu memindahkan kunci yang sama ke mainnet, lihat [panduan awal Testnet Robinhood Chain](https://docs.blockvectra.com/en/guides/robinhood-testnet-starter/).

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_testnet" \
  -H "Content-Type: application/json" \
  -H "x-api-key: {api_key}" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
```

Respons yang diharapkan:

```json
{"jsonrpc":"2.0","id":1,"result":"0xb626"}
```

| Parameter / Endpoint | Nilai / Templat | Autentikasi |
|---|---|---|
| Chain ID (EIP-155) | `46630` | — |
| JSON-RPC (kunci di path) | `POST https://api.blockvectra.com/v1/robinhood_testnet/{api_key}` | API key di path URL |
| JSON-RPC (kunci di header) | `POST https://api.blockvectra.com/v1/robinhood_testnet` | Header x-api-key: {api_key} |
| WebSocket (kunci di path) | `wss://api.blockvectra.com/v1/robinhood_testnet/{api_key}` | API key di path URL |
| WebSocket (kunci di header) | `wss://api.blockvectra.com/v1/robinhood_testnet` | Header x-api-key: {api_key} atau Authorization: Bearer {api_key} |
| Langganan WebSocket | `newHeads, logs` | — |
| Basis Data API | `Belum tersedia` | — |
| Status publik | `GET https://api.blockvectra.com/v1/status` | Tanpa autentikasi (publik) |

### Parameter dan batas jaringan

- **Rentang blok eth_getLogs**: Maksimal 1000 blok per permintaan
- **Jendela status historis**: 1023 blok terakhir (kueri di luar itu mengembalikan -32011)
- **Pelacakan eksekusi (debug_trace*)**: Didukung (debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash)

Metode yang diizinkan per rantai: [Rantai yang Didukung](https://docs.blockvectra.com/en/chains/)

## Data saham tertokenisasi

Di Robinhood Chain, Data API BlockVectra menyediakan metrik on-chain harian dan metadata untuk saham tertokenisasi di dua endpoint:

* **Papan peringkat harian (`GET /v1/data/robinhood_mainnet/stocks`)**: Papan peringkat aktivitas harian dari saham tertokenisasi untuk tanggal kalender UTC tertentu, diurutkan berdasarkan aktivitas transfer secara menurun.
* **Dapatkan satu saham tertokenisasi (`GET /v1/data/robinhood_mainnet/stocks/{token}`)**: Metadata kontrak token dan hingga 30 hari metrik harian terbaru berdasarkan alamat token.

Untuk parameter permintaan terperinci, struktur respons (`StockDailyListEnvelope` dan `StockTokenEnvelope`), catatan paginasi, dan estimasi konsumsi CU, lihat [panduan saham tertokenisasi](https://docs.blockvectra.com/en/guides/stocks/).

Templat awal lengkap: [blockvectra/robinhood-stock-tokens](https://github.com/blockvectra/robinhood-stock-tokens)

## Memulai dan API key

Akun baru mendapatkan 30,000,000 CU saat pendaftaran — tanpa kartu kredit.

Anda dapat mencoba endpoint publik tanpa kunci `https://api.blockvectra.com/v1/robinhood_mainnet/public` terlebih dahulu (hanya metode JSON-RPC dompet, Data API memerlukan kunci; metode dan batas tunduk pada `/v1/chains`); daftar akun jika Anda memerlukan batas laju yang lebih tinggi.

* **Konsol web**: Daftar melalui tanda tangan dompet Ethereum, dan buat API key di [Konsol](https://console.blockvectra.com/login/?next=%2Fkeys%2F). Lihat [panduan Mulai Cepat](https://docs.blockvectra.com/en/quickstart/) untuk detail penyiapan.
* **Pendaftaran terprogram**: Agen AI otonom, skrip otomatis, dan alur CI dapat masuk dan menyediakan API key menggunakan tanda tangan dompet Ethereum (EIP-191) tanpa browser. Ikuti [panduan pendaftaran terprogram](https://docs.blockvectra.com/en/guides/programmatic-signup/).
* **Agen AI**: Agen AI otonom dapat menemukan kemampuan Robinhood Chain menggunakan server resmi Model Context Protocol (MCP). Lihat [Menghubungkan Agen AI ke BlockVectra](https://docs.blockvectra.com/en/guides/ai-agents/).
* **Meningkatkan batas**: Setelah melakukan top up, batas panggilan per detik di seluruh akun dihapus; setiap kunci tetap tunduk pada batas laju Compute Unit (CU) dan burst. Untuk tarif dan unit penagihan saat ini, lihat [halaman Harga](https://blockvectra.com/en/pricing/).

## Langkah selanjutnya

* [Telusuri direktori dataset](https://blockvectra.com/en/data/) untuk melihat setiap dataset yang diindeks oleh BlockVectra.
* [Lihat paket gratis dan harga](https://blockvectra.com/en/pricing/#free) untuk memeriksa apa yang termasuk dalam akun Anda.
* [Masuk ke konsol](https://console.blockvectra.com/login/?next=%2Fkeys%2F) untuk membuat API key.
