JSON-RPC
JSON-RPC
eth_* / net_* / web3_* / debug_trace* 方法、CU 权重与错误码。
概述
Robinhood Chain 使用 JSON-RPC 2.0 网关(rpc-gateway)提供付费 API 访问。所有请求按 计算单位(CU) 计量,并按 key 进行限流。
- 入口:
/v1/(nginx)→ 网关(直连)或通过POST /v1/{api_key} - 协议:HTTP
POST,单个调用或批量(最多 100 个调用) - 计量:请求到达时,按整个请求的 CU 开销从该 key 的限流令牌桶预扣;账户 CU 余额的实际计费只在网关收到节点应答之后才发生,按小时结算
- 可用性:匹配
eth_*、net_*、web3_*、debug_trace*的方法(除了部分例外;见下文)
完整规范请见完整参考,含端点详情和真实示例。
接入方式
1. 申请 API Key
2. 调用 JSON-RPC
curl -X POST https://dev-api.blockvectra.network/v1/YOUR_API_KEY \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}'Key 传递方式(优先级顺序):
- URL 路径:
POST /v1/{api_key} - 请求头:
x-api-key: {api_key}(如果非空,覆盖 Bearer) - 请求头:
Authorization: Bearer {api_key}
3. 处理 CU 成本
每个方法都有对应的 CU(计算单位)权重,请求的成本是其包含的所有调用权重之和。各方法权重、缓存命中值与默认值见下方 CU 权重表;具体哪些错误会计费见错误码表的「是否计费」列。
CU 计量规则
各 JSON-RPC 方法的计算单位 (CU) 权重。
解析规则
精确匹配 > 最长前缀模式(以 * 结尾)> 默认值
缓存命中: 1 CU
默认值: 10 CU
| 方法名 | 权重 (CU) |
|---|---|
eth_blockNumber | 1 |
eth_call | 20 |
eth_chainId | 1 |
eth_createAccessList | 20 |
eth_estimateGas | 20 |
eth_getBlockByNumber | 5 |
eth_getBlockReceipts | 10 |
eth_getLogs | 50 |
eth_getProof | 10 |
eth_sendRawTransaction | 30 |
eth_simulateV1 | 20 |
debug_trace* | 200 |
方法策略
只有匹配允许模式的方法才可调用;其中一部分方法即使匹配了允许模式,仍会被显式拦截(返回 -32601 method not available)。
允许的模式
eth_*net_*web3_*debug_trace*
被拦截的方法
eth_newFiltereth_newBlockFiltereth_newPendingTransactionFiltereth_getFilterLogseth_getFilterChangeseth_uninstallFiltereth_subscribeeth_unsubscribe
限制:
- 批量:每个请求最多 100 个调用
- 请求体:最大 2 MiB
- CU 突发:单个请求的 CU 开销不能超过该 key 的桶容量(
request cost <N> CU exceeds burst capacity <M> CU)
错误码表
完整的 JSON-RPC 错误码目录及其计费规则。
| 错误码 | 来源 | HTTP 状态码 | 消息 | 是否计费 |
|---|---|---|---|---|
| -32700 | gateway | 200 | parse error | 否 |
| -32600 | gateway | 200 | invalid request | 否 |
| -32600 | gateway | 200 | batch too large: max <N> calls | 否 |
| -32600 | gateway | 200 | invalid request: ambiguous member name | 否 |
| -32601 | gateway | 200 | method not available: <method> | 否 |
| -32602 | gateway | 200 | eth_getLogs block range too large: max <N> blocks | 否 |
| -32010 | gateway | 200 | node is syncing; latest-state calls are temporarily unavailable | 否 |
| -32011 | gateway | 200 | historical state is not available beyond the most recent <N> blocks | 否 |
| -32000 | gateway | 200 | transaction not found | 否 |
| -32000 | gateway | 200 | block not found | 否 |
| -32000 | gateway | 200 | upstream unavailable | 否 |
| -32000 | gateway | 200 | upstream response too large | 否 |
| -32005 | gateway | 200 | gateway overloaded, retry later | 否 |
| -32005 | gateway | 429 | rate limit exceeded | 否 |
| -32005 | gateway | 429 | request cost <N> CU exceeds burst capacity <M> CU | 否 |
| -32603 | gateway | 200 | no response from upstream | 否 |
| -32603 | gateway | 200 | malformed upstream response | 否 |
| -32603 | gateway | 200 | internal gateway error | 否 |
| -32020 | gateway | 402 | insufficient balance | 否 |
| -32021 | gateway | 503 | billing data temporarily unavailable | 否 |
| -32030 | nginx | 502 | rpc gateway unreachable | 否 |
| -32030 | nginx | 503 | rpc gateway unavailable | 否 |
| -32030 | nginx | 504 | rpc gateway timed out | 可能 |
| 4444 | node | 200 | pruned history unavailable | 否 |
| -32000 | node | 200 | historical state ... is not available | 否 |
| -32002 | node | 200 | <node message> | 否 |
| -32003 | node | 200 | <node message> | 否 |
| -32600 | node | 200 | <node message> | 否 |
| * | node | 200 | <node message> | 是 |
完整规范
查看完整 JSON-RPC 参考了解所有路径、请求/响应模式和真实示例。