คู่มือการรวมระบบ Robinhood Chain: ไคลเอนต์ RPC, การดีพลอย และอีเวนต์

เชื่อมต่อกับ Robinhood Chain ด้วย viem หรือ ethers, ดีพลอยด้วย Foundry หรือ Hardhat, รับฟัง log ของ WebSocket หรืออีเวนต์ webhook และสืบค้นกิจกรรมโทเค็นหุ้น

ใช้ Robinhood Chain RPC สำหรับการตรวจสอบการเชื่อมต่อสาธารณะและการอ่านที่มีการยืนยันตัวตน หรือใช้ Data API สำหรับชุดข้อมูล mainnet ที่รองรับ ทั้งนักพัฒนาและ AI agent ใช้ endpoint เดียวกัน โปรดแยกคำขอของ mainnet และ testnet ออกจากกัน

  • ขั้นตอนแรก: เชื่อมต่อด้วย viem หรือ ethers โดยบันทึก network.mjs และตัวอย่างไคลเอนต์หนึ่งรายการก่อนที่จะรัน
  • เสร็จสมบูรณ์เมื่อ: ไคลเอนต์ยืนยันว่า RPC chain ID ตรงกับ chain_id ในแคตตาล็อก และพิมพ์หมายเลขบล็อกล่าสุดโดยไม่มีข้อผิดพลาด RPC chain ID mismatch

พารามิเตอร์ Mainnet และตัวเลือกการเข้าถึง

งานที่คู่มือนี้จะช่วยให้คุณทำสำเร็จ

การเข้าถึง RPC และ WebSocket

ข้อมูลเครือข่ายและ endpoint

ทุกคำขอไปยัง Robinhood Chain จะระบุเครือข่ายเป้าหมายอย่างชัดเจนในพาธ URL โดยใช้สลัก robinhood_mainnet โดย JSON-RPC รองรับทั้งการยืนยันตัวตนด้วยคีย์ในพาธและการยืนยันตัวตนผ่านส่วนหัวของคำขอ (x-api-key) ในขณะที่ Data API ให้บริการ REST endpoint ภายใต้ /v1/data/robinhood_mainnet/

พารามิเตอร์และ endpoint ด้านล่างแสดงถึงพารามิเตอร์เครือข่ายที่ใช้งานอยู่ในปัจจุบัน:

พารามิเตอร์ / เอนด์พอยต์ค่า / เทมเพลตการยืนยันตัวตน
Chain ID (EIP-155)4663—
JSON-RPC (คีย์ในพาธ)POST https://api.blockvectra.com/v1/robinhood_mainnet/{api_key}API key ในพาธ URL
JSON-RPC (คีย์ในส่วนหัว)POST https://api.blockvectra.com/v1/robinhood_mainnetส่วนหัว x-api-key: {api_key}
WebSocket (คีย์ในพาธ)wss://api.blockvectra.com/v1/robinhood_mainnet/{api_key}API key ในพาธ URL
WebSocket (คีย์ในส่วนหัว)wss://api.blockvectra.com/v1/robinhood_mainnetส่วนหัว x-api-key: {api_key} หรือ Authorization: Bearer {api_key}
การสมัครรับข้อมูล WebSocketnewHeads, logs—
ที่อยู่หลัก Data APIGET https://api.blockvectra.com/v1/data/robinhood_mainnet/…ส่วนหัว x-api-key: {api_key}
สถานะสาธารณะGET https://api.blockvectra.com/v1/statusไม่ต้องยืนยันตัวตน (สาธารณะ)

เชื่อมต่อด้วย viem หรือ ethers

นักพัฒนาและ AI Agent สามารถใช้การตั้งค่าฝั่งเซิร์ฟเวอร์แบบเดียวกันได้ ใช้ Node.js 24 ขึ้นไป, viem 2 หรือ ethers 6 และเริ่มต้นด้วยการอ่านแบบสาธารณะ กำหนดค่า BLOCKVECTRA_API_KEY ในสภาพแวดล้อมอย่างปลอดภัยสำหรับเมธอดที่ใช้คีย์และ WebSocket เก็บรักษาคีย์และ RPC URL ที่มีคีย์ให้พ้นจากโค้ดเบราว์เซอร์, log และระบบควบคุมเวอร์ชัน

บันทึกไฟล์นี้เป็น network.mjs เริ่มต้นบน testnet; กำหนดค่า BLOCKVECTRA_CHAIN=robinhood_mainnet เพื่อย้ายไปยัง mainnet โค้ดนี้จะอ่าน chain_id และนโยบายเมธอดจาก GET /v1/chains สำหรับการอ่านแบบไม่ต้องใช้คีย์ ให้ใช้ public.url ในแคตตาล็อกและเฉพาะเมธอดที่ระบุใน public.methods เท่านั้น ความพร้อมใช้งานของ HTTP สาธารณะไม่ได้หมายความว่าสามารถเข้าถึง WebSocket ได้

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');

บันทึกเป็น viem-client.mjs, ติดตั้งด้วย npm install viem@2 แล้วรัน node viem-client.mjs

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());

สำหรับ ethers ให้บันทึกเป็น ethers-client.mjs, ติดตั้งด้วย npm install ethers@6 แล้วรัน node ethers-client.mjs

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();

ดีพลอยด้วย Foundry หรือ Hardhat

เติมเงิน ETH ทดสอบให้กับบัญชีผู้ดีพลอยผ่าน testnet faucet ก่อน; ธุรกรรมบน mainnet จำเป็นต้องใช้ ETH บน mainnet โดย คู่มือเครือข่ายและการดีพลอยอย่างเป็นทางการ ได้ระบุ chain ID ของ mainnet และ testnet ไว้ (เข้าถึงเมื่อ: 2026-10-07) ตาราง endpoint ในหน้านี้ใช้ข้อมูลจาก /v1/chains

ส่งออก URL และ chain ID ที่เลือกจาก network.mjs ตรวจสอบ eth_sendRawTransaction เทียบกับ methods.allow และ methods.deny ก่อนทำการบรอดแคสต์

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)")"

ดำเนินการต่อด้วย บทเรียนการดีพลอยด้วย Foundry หรือ Hardhat ที่ใช้ร่วมกันสำหรับ Hello.sol, การตั้งค่าเครื่องมือ, การบรอดแคสต์ และการตรวจสอบใบเสร็จ

รับฟังอีเวนต์ของสัญญาผ่าน WebSocket

บันทึกเป็น watch-logs.mjs และตั้งค่า LOG_ADDRESS เป็นสัญญาที่ถูกดีพลอยหรือสัญญาโทเค็นที่คุณกำลังเฝ้าดู รัน node watch-logs.mjs โค้ดจะตรวจสอบ ws และ subscriptions จาก /v1/chains ก่อนที่จะสมัครรับข้อมูล logs

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); });

หลังจากตัวรับฟังเริ่มต้นทำงาน ให้ส่งธุรกรรม ping() จากอีกเทอร์มินัลหนึ่งโดยใช้ตัวแปรการดีพลอยที่ export ไว้เดียวกัน:

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

บันทึกบล็อกล่าสุดที่ประมวลผลแล้วและตัดข้อมูลซ้ำซ้อนด้วย (blockHash, transactionHash, logIndex) หลังจากเชื่อมต่อใหม่ ให้ดึงข้อมูลบล็อกที่พลาดไปด้วยคำขอ eth_getLogs ที่จำกัดช่วง; ตรวจสอบปรับปรุง log ที่ทำเครื่องหมาย removed ในกรณีที่มี reorg ดู การสมัครรับข้อมูล WebSocket และ ขีดจำกัดช่วงบล็อก

สำหรับอีเวนต์ของที่อยู่ที่ส่งไปยังตัวรับ HTTPS ของคุณ GET /v1/push/chains จะแสดงรายการเชนที่รองรับ และการตั้งค่าการยืนยัน; โดยใช้ส่วนหัว x-api-key ทำตาม คู่มือ webhook push สำหรับการสมัครรับข้อมูล, การตรวจสอบลายเซ็น, การตัดข้อมูลซ้ำซ้อน และการเล่นซ้ำ สำหรับการสืบค้นกิจกรรมโทเค็นหุ้นบน mainnet ให้ดำเนินการต่อด้วย คู่มือหุ้น

ตัวอย่าง curl โดยตรง

คุณสามารถเรียก JSON-RPC ได้ทันทีโดยใช้ไคลเอนต์ HTTP มาตรฐาน แทนที่ {api_key} ด้วย BlockVectra API key ของคุณ:

สืบค้น EIP-155 chain ID โดยใช้ส่วนหัวของคำขอ x-api-key:

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":[]}'

โครงสร้างการตอบกลับ

การตอบกลับจะเป็นไปตามข้อกำหนด JSON-RPC 2.0:

  • สำเร็จ: ส่งคืน envelope พร้อม jsonrpc: "2.0", id เดียวกัน และสตริง result ที่มีปริมาณที่เข้ารหัสเลขฐานสิบหก (eth_chainId ส่งคืน chain ID ที่เข้ารหัสเลขฐานสิบหก; eth_blockNumber ส่งคืนความสูงของบล็อกล่าสุด)
  • เมธอดที่ไม่อนุญาต: การขอเมธอดที่อยู่นอกเหนือเมธอดที่อนุญาตของเครือข่ายจะส่งคืนรหัสข้อผิดพลาด JSON-RPC -32601 (method not available, ไม่ถูกเรียกเก็บเงิน)
  • การสืบค้นนอกหน้าต่างข้อมูล: คำขอสถานะย้อนหลังที่เก่ากว่าหน้าต่างการเก็บรักษาสถานะจะส่งคืนรหัสข้อผิดพลาด JSON-RPC -32011 (ไม่ถูกเรียกเก็บเงิน)
  • พารามิเตอร์ไม่ถูกต้อง: พารามิเตอร์คำขอที่ไม่ถูกต้องตามรูปแบบหรือไม่อนุญาตจะส่งคืนรหัสข้อผิดพลาด JSON-RPC -32602 (ไม่ถูกเรียกเก็บเงิน)

ความสามารถและนโยบายเมธอด

เมธอด JSON-RPC ที่พร้อมใช้งาน, ขีดจำกัดช่วงบล็อกของ log และการเก็บรักษาสถานะย้อนหลังบน Robinhood Chain จะเผยแพร่แบบไดนามิกผ่าน GET /v1/chains การทำ execution tracing (debug_trace* รวมถึง debug_traceTransaction) อยู่ภายใต้นโยบายเมธอดของเชน:

พารามิเตอร์และขีดจำกัดของเครือข่าย

  • ช่วงบล็อก eth_getLogs: สูงสุด 1000 บล็อกต่อคำขอ
  • หน้าต่างสถานะย้อนหลัง: 900 บล็อกล่าสุด (การสืบค้นนอกเหนือจากนี้ส่งคืน -32011)
  • การติดตามการประมวลผล (debug_trace*): รองรับ (debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash)

เมธอดที่อนุญาตตามแต่ละเชน: เชนที่รองรับ

Testnet

หากต้องการรับ test ETH สำหรับการทำธุรกรรม โปรดดู คู่มือ Robinhood Chain testnet faucet

Robinhood Chain Testnet (chain ID: 46630) ใช้ API key เดียวกันกับ mainnet ที่ endpoint https://api.blockvectra.com/v1/robinhood_testnet โดยยืนยันตัวตนผ่านส่วนหัวคำขอ x-api-key

คำขอ testnet ใช้น้ำหนัก CU เดียวกันกับ mainnet และหักจากยอดคงเหลือและเครดิตฟรีเดียวกัน เมธอด JSON-RPC ที่พร้อมใช้งานและการเก็บรักษาสถานะย้อนหลังบน Robinhood Chain Testnet ได้รับการเผยแพร่แบบไดนามิกผ่าน GET /v1/chains

สำหรับบทเรียนเริ่มต้น 3 ขั้นตอนที่สามารถรันได้ ซึ่งอ่าน testnet โดยไม่ต้องใช้คีย์, สตรีม log ผ่าน WebSocket แล้วย้ายคีย์เดียวกันไปยัง mainnet โปรดดู คู่มือเริ่มต้นสำหรับ Robinhood Chain Testnet

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":[]}'

Expected response:

{"jsonrpc":"2.0","id":1,"result":"0xb626"}
พารามิเตอร์ / เอนด์พอยต์ค่า / เทมเพลตการยืนยันตัวตน
Chain ID (EIP-155)46630—
JSON-RPC (คีย์ในพาธ)POST https://api.blockvectra.com/v1/robinhood_testnet/{api_key}API key ในพาธ URL
JSON-RPC (คีย์ในส่วนหัว)POST https://api.blockvectra.com/v1/robinhood_testnetส่วนหัว x-api-key: {api_key}
WebSocket (คีย์ในพาธ)wss://api.blockvectra.com/v1/robinhood_testnet/{api_key}API key ในพาธ URL
WebSocket (คีย์ในส่วนหัว)wss://api.blockvectra.com/v1/robinhood_testnetส่วนหัว x-api-key: {api_key} หรือ Authorization: Bearer {api_key}
การสมัครรับข้อมูล WebSocketnewHeads, logs—
ที่อยู่หลัก Data APIยังไม่พร้อมใช้งาน—
สถานะสาธารณะGET https://api.blockvectra.com/v1/statusไม่ต้องยืนยันตัวตน (สาธารณะ)

พารามิเตอร์และขีดจำกัดของเครือข่าย

  • ช่วงบล็อก eth_getLogs: สูงสุด 1000 บล็อกต่อคำขอ
  • หน้าต่างสถานะย้อนหลัง: 1023 บล็อกล่าสุด (การสืบค้นนอกเหนือจากนี้ส่งคืน -32011)
  • การติดตามการประมวลผล (debug_trace*): รองรับ (debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash)

เมธอดที่อนุญาตตามแต่ละเชน: เชนที่รองรับ

ข้อมูลโทเค็นหุ้น (Tokenized Stock)

บน Robinhood Chain นั้น BlockVectra Data API ให้บริการเมตริกบนเชนรายวันและ metadata สำหรับโทเค็นหุ้นผ่านสอง endpoint:

  • กระดานผู้นำรายวัน (GET /v1/data/robinhood_mainnet/stocks): กระดานผู้นำกิจกรรมรายวันของโทเค็นหุ้นสำหรับวันที่ UTC ที่ระบุ โดยเรียงลำดับตามกิจกรรมการโอนจากมากไปน้อย
  • รับข้อมูลโทเค็นหุ้นหนึ่งรายการ (GET /v1/data/robinhood_mainnet/stocks/{token}): metadata ของสัญญาโทเค็นและเมตริกรายวันย้อนหลังสูงสุด 30 วันตามที่อยู่โทเค็น

สำหรับพารามิเตอร์คำขอโดยละเอียด, response envelope (StockDailyListEnvelope และ StockTokenEnvelope), บันทึกการแบ่งหน้า และการประเมินการใช้ CU โปรดดู คู่มือโทเค็นหุ้น

เทมเพลตเริ่มต้นฉบับสมบูรณ์: blockvectra/robinhood-stock-tokens

การเริ่มต้นใช้งานและ API key

บัญชีใหม่รับ 30,000,000 CU เมื่อลงทะเบียน — ไม่ต้องใช้บัตรเครดิต

คุณสามารถทดลองใช้ public endpoint แบบไม่ต้องใช้คีย์ https://api.blockvectra.com/v1/robinhood_mainnet/public ดูก่อนได้ (เฉพาะเมธอดกระเป๋าเงิน JSON-RPC เท่านั้น ส่วน Data API จำเป็นต้องใช้คีย์ ทั้งนี้ เมธอดและขีดจำกัดเป็นไปตาม /v1/chains) และสามารถลงทะเบียนบัญชีได้หากคุณต้องการขีดจำกัดอัตราที่สูงขึ้น

  • เว็บคอนโซล: ลงทะเบียนผ่านลายเซ็นกระเป๋าเงิน Ethereum และสร้าง API key ใน คอนโซล ดูรายละเอียดการตั้งค่าได้ที่ คู่มือเริ่มต้นอย่างรวดเร็ว
  • การลงทะเบียนแบบเป็นโปรแกรม: autonomous AI agent, สคริปต์อัตโนมัติ และไปป์ไลน์ CI สามารถเข้าสู่ระบบและจัดสรร API key โดยใช้ลายเซ็นกระเป๋าเงิน Ethereum (EIP-191) โดยไม่ต้องใช้เบราว์เซอร์ ทำตาม คู่มือการลงทะเบียนแบบเป็นโปรแกรม
  • AI Agent: autonomous AI agent สามารถค้นหาความสามารถของ Robinhood Chain ได้โดยใช้เซิร์ฟเวอร์ Model Context Protocol (MCP) อย่างเป็นทางการ ดู การเชื่อมต่อ AI Agent เข้ากับ BlockVectra
  • การอัปเกรดขีดจำกัด: หลังจากเติมเงินแล้ว ขีดจำกัดจำนวนการเรียกต่อวินาทีทั่วทั้งบัญชีจะถูกยกเลิก โดยแต่ละคีย์ยังคงอยู่ภายใต้ขีดจำกัดอัตราและขีดจำกัด burst ของ Compute Unit (CU) สำหรับอัตราและหน่วยเรียกเก็บเงินปัจจุบัน โปรดดูที่ หน้าการกำหนดราคา

ขั้นตอนถัดไป

อัปเดตล่าสุด:

ในหน้านี้