JSON-RPC
Enabled namespaces, measured limits, subscriptions and error codes.
Standard Ethereum JSON-RPC over https://rpc.testnet.zroarus.com and wss://rpc.testnet.zroarus.com/ws.
Namespaces#
| Namespace | Enabled | Notes |
|---|---|---|
eth_* | Yes | Standard methods, filters, eth_getProof, eth_getBlockReceipts, eth_blobBaseFee |
net_* | Yes | Includes net_version |
web3_* | Yes | |
txpool_* | Yes | txpool_status |
debug_* | No | Returns -32604 Method not enabled |
trace_* | No | Disabled; internal transactions cannot be traced |
admin_* | No | |
qbft_* | No |
The node holds no keys: eth_accounts returns an empty list and eth_sendTransaction / eth_sign are unavailable. Sign locally and use eth_sendRawTransaction.
Capabilities#
| Capability | Supported |
|---|---|
| JSON-RPC batch requests | Yes |
WebSocket eth_subscribe (newHeads, logs) | Yes |
Filters (eth_newBlockFilter, eth_newFilter…) | Yes |
| CORS from any origin | Yes |
Limits#
Measured on the Testnet on 2026-09-27.
| Limit | Value | Error when exceeded |
|---|---|---|
eth_getLogs | toBlock − fromBlock ≤ 5,000 | -32005 Requested range exceeds maximum RPC range limit |
| Batch size | 1,024 requests per batch | -32005 Number of requests exceeds max batch size |
toBlock | Must not be beyond the head block | -32602 Invalid params |
Paging eth_getLogs#
import type { PublicClient } from "viem";
const WINDOW = 5_000n;
export async function getLogsPaged(client: PublicClient, filter: { address: `0x${string}` }, from: bigint) {
const head = await client.getBlockNumber();
const logs = [];
for (let start = from; start <= head; start += WINDOW + 1n) {
const end = start + WINDOW > head ? head : start + WINDOW;
logs.push(...(await client.getLogs({ ...filter, fromBlock: start, toBlock: end })));
}
return logs;
}Blocks are final, so an indexer never has to handle reorganisations. It does have to handle resets.
Errors#
Reverts and failed simulations in eth_call / eth_estimateGas come back as {"code":-32000,"message":"Transaction processing could not be completed due to an exception (…)"}. Without trace APIs, replay the call with eth_call to get a revert reason.
Something wrong or missing on this page? Send developer feedback.