JSON-RPC API

The RPC namespaces a node operator or dApp developer actually uses against a running Geth instance.

Path: api-reference

Third-party documentation. This is independently authored analysis of the public Go Ethereum (Geth) codebase — not the official docs, and not reviewed or endorsed by the Go Ethereum (Geth) team.

JSON-RPC API

Geth exposes JSON-RPC over HTTP, WebSocket, and IPC (the recommended local transport). Namespaces group the surface: eth for chain data everyone uses, plus operator namespaces enabled deliberately.

The eth namespace

  • eth_blockNumber, eth_getBlockByNumber, eth_getTransactionByHash, eth_getTransactionReceipt — the read core.
  • eth_getBalance, eth_getStorageAt, eth_getCode — account-level reads, optionally at historical blocks on archive nodes.
  • eth_call — read-only execution of a message against any state; never persists effects.
  • eth_estimateGas — binary-search gas prediction for a hypothetical transaction.
  • eth_sendRawTransaction — submit a signed transaction into the pool.
  • eth_getLogs — receipt-log queries by fromBlock/toBlock/address/topics.

Subscriptions (WebSocket/IPC)

eth_subscribe pushes events: newHeads, logs filtered server-side, and pending transactions.

Operator namespaces

  • engine_* — the Engine API; reserved for the consensus client, authenticated and not for public exposure.
  • txpool_content — inspect pending/queued pool entries per sender.
  • debug_* / dbg_* — structured EVM traces (debug_traceCall, debug_traceTransaction), block re-execution, and chain inspection. Powerful; gate it.
  • admin_* — peer management and node control. Local-only in sane deployments.

Exposure guidance

Bind RPC to localhost or a private interface; front public traffic with a proxy that filters namespaces, caps batch sizes, and rate-limits — Geth trusts whoever holds an RPC socket far more than a public caller deserves.

Interface

Interface
text
eth_blockNumber() -> quantity
eth_getBalance(address, block?) -> quantity (wei)
eth_call(tx, block?) -> data # read-only simulation
eth_sendRawTransaction(data) -> 32-byte hash
eth_getLogs(filter) -> log[]
eth_syncing() -> progress | false
dbg_traceTransaction(hash) -> structured EVM trace
txpool_content() -> pending/queued pools by sender
admin_peers() -> connected peer descriptors
 
STATUSinterface