JSON-RPC API
Radius exposes a JSON-RPC 2.0 API compatible with standard Ethereum tooling. This page documents methods that differ from Ethereum, methods requiring elevated access, pseudo-supported methods, and unsupported methods.
For integration guidance, see JSON-RPC overview.
Divergent methods
eth_blockNumber
Returns the current timestamp in milliseconds, encoded as a hex string.
Parameters: None
Returns: string — Current block number as a hex string.
eth_getBalance
Returns native balance plus the maximum native balance that could be obtained by converting the account’s SBC via the Turnstile. This supports wallet preflight checks.
Parameters:| Name | Type | Description |
|---|---|---|
address | string | Address to query (20 bytes, hex encoded) |
block | string | Block tag (latest, pending, safe, finalized) or block number. Historical block numbers return error -32000. |
Returns: string — Balance in wei as a hex string.
eth_getBlock, eth_getBlockByNumber, eth_getBlockByHash
Blocks are reconstructed on demand. Very recent reads are not guaranteed to be stable across repeated calls. eth_getBlockByHash returns null for hashes that do not correspond to a known block.
eth_call, eth_estimateGas
If from is specified and the sender lacks sufficient RUSD but has sufficient SBC, the Turnstile execution is included in dry-run behavior.
If from is omitted or set to the zero address, gas-payment checks are skipped during dry-run execution.
eth_maxPriorityFeePerGas
Returns the current gas price. On Radius this equals eth_gasPrice — there is no separate priority-fee market.
Parameters: None
Returns: string — Gas price in wei as a hex string.
eth_getLogs
Two constraints differ from Ethereum:
Address filter required. Every query must include an address field. Omitting it returns error -33014.
Block range limit. The maximum range between fromBlock and toBlock is 1,000,000 units. Because Radius block numbers are millisecond timestamps (see eth_blockNumber), this covers ~16 minutes 40 seconds of wall time. Queries exceeding this return error -33002.
To query logs over a longer period, split the range into consecutive chunks of up to 1,000,000 and concatenate the results. For real-time event monitoring, use WebSocket eth_subscribe("logs") instead.
Extended methods
These methods are not part of the standard Ethereum JSON-RPC specification but are supported by Radius.
eth_sendRawTransactionSync
Submits a signed raw transaction and waits synchronously for the transaction receipt before returning. Implements EIP-7966.
Unlike eth_sendRawTransaction, which returns a transaction hash immediately and requires the client to poll for inclusion, eth_sendRawTransactionSync combines submission and receipt retrieval into a single RPC call. This eliminates the polling round-trip and reduces total confirmation latency by approximately 50%.
This is especially useful for latency-sensitive applications such as x402 payment flows, where on-chain settlement is on the critical path of an HTTP request-response cycle.
Parameters:| Position | Type | Description | Required |
|---|---|---|---|
| 1 | string | Signed, RLP-encoded transaction hex data | Yes |
| 2 | number | Maximum wait time in milliseconds | No |
If no timeout is provided, the node's configured default is used (recommended: 2 000 ms). The timeout cannot exceed the node-configured maximum.
Returns: Transaction receipt object (same structure as eth_getTransactionReceipt) on success.
| Code | Type | Description | data field |
|---|---|---|---|
4 | Timeout | Transaction was added to the mempool but not processed within timeout | Transaction hash |
5 | Unknown/Queued | Transaction was not added to the mempool | Transaction hash |
6 | Nonce gap | Transaction rejected due to a nonce gap | Expected nonce (hex) |
On error code 6, the data field contains the expected nonce as a hex string directly, so the caller can immediately resubmit with the correct nonce without making a separate eth_getTransactionCount call.
On error code 4, the data field contains the transaction hash. The transaction was accepted into the mempool — the caller can continue monitoring via eth_getTransactionReceipt.
{
"jsonrpc": "2.0",
"method": "eth_sendRawTransactionSync",
"params": ["0xf86c808504a817c80082520894ab..."],
"id": 1
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"transactionHash": "0x1234abcd...",
"blockHash": "0xabcd1234...",
"blockNumber": "0x10d4f",
"gasUsed": "0x5208",
"status": "0x1",
"logs": []
}
}{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": 4,
"message": "The transaction was added to the mempool but wasn't processed within the designated timeout interval.",
"data": "0x1234abcd..."
}
}Methods requiring elevated RPC access
eth_subscribe
Creates a WebSocket subscription for real-time logs. Radius supports logs only.
newHeads and newPendingTransactions are not available.
| Name | Type | Description |
|---|---|---|
type | string | Subscription type (for example, logs) |
filter | object | Log filter object |
Returns: string — Subscription ID.
Pseudo-supported methods
These methods return defaults and do not return errors. Most applications should not rely on them.
eth_accounts
Always returns an empty array. Radius does not manage accounts.
Parameters: None
Returns: array — []
eth_feeHistory
Returns a static response. Radius uses fixed pricing instead of fee-market history.
Parameters: See Ethereum JSON-RPC specification
Returns: object
eth_mining
Always returns true.
Parameters: None
Returns: boolean
eth_syncing
Always returns false.
Parameters: None
Returns: boolean
eth_hashrate
Always returns 0x0.
Parameters: None
Returns: string
eth_uninstallFilter
Always returns true. Filters are not persisted.
| Name | Type | Description |
|---|---|---|
filterId | string | Filter ID |
Returns: boolean
net_listening
Always returns false. Radius does not use peer-to-peer networking.
Parameters: None
Returns: boolean
net_peerCount
Always returns 0x0. Radius does not use peer-to-peer networking.
Parameters: None
Returns: string
Unsupported methods
Radius returns errors for these methods:
eth_coinbaseeth_getBlockReceiptseth_getFilterChangeseth_getFilterLogseth_getProofeth_getUncleByBlockHashAndIndexeth_getUncleByBlockNumberAndIndexeth_getUncleCountByBlockHasheth_getUncleCountByBlockNumbereth_getWorketh_newBlockFiltereth_newFiltereth_newPendingTransactionFiltereth_signeth_simulateV1eth_submitWorktrace_blocktrace_callManytrace_filtertrace_transaction
Error codes
Radius uses standard JSON-RPC 2.0 error codes:
| Code | Message | Description |
|---|---|---|
-32700 | Parse error | Invalid JSON |
-32600 | Invalid request | Invalid request object |
-32601 | Method not found | Method does not exist |
-32602 | Invalid params | Invalid method parameters |
-32603 | Internal error | Internal JSON-RPC error |
3 | Execution reverted | Contract execution reverted |
Radius-specific error codes:
| Code | Message | Description |
|---|---|---|
-33002 | Block range too wide | eth_getLogs range exceeds 1,000,000 units (~16 min 40 sec) |
-33014 | Address filter required | eth_getLogs called without an address field |