Nodes, mining & validator operations

JSON-RPC interface

JSON-RPC is the standardized 'front desk' through which applications talk to a node. A node is a complex program that holds the chain and the current state, but apps, wallets, and websites do not speak its internal language — they send it small text messages in JSON saying 'tell me the balance of this address' or 'broadcast this signed transaction,' and the node replies in JSON. RPC stands for remote procedure call: you call a function on a remote machine as if it were local. It is the universal socket that the entire dapp ecosystem plugs into.

Concretely, a request is a JSON object with a method name, an array of params, and an id, and the node answers with a result or an error. Ethereum standardizes methods like eth_getBalance, eth_call (read a contract without sending a transaction), eth_sendRawTransaction (broadcast a signed transaction), eth_getLogs (fetch events), and eth_blockNumber. Reads are free and instant because they just query the node's local state; the only operation that changes the chain is sending a signed transaction, which the node relays into the mempool. Bitcoin Core exposes an analogous JSON-RPC API with methods like getblock and sendrawtransaction.

Most users never run their own node, so they reach a node through a hosted RPC endpoint — a public URL operated by providers such as Infura, Alchemy, or QuickNode, or a community endpoint. This is enormously convenient but introduces a quiet trust assumption: the endpoint can return stale data, lie about a balance, or censor your transaction broadcast, and a naive client will not notice. Running your own node, or cross-checking against several, removes that trust; light clients aim to close the gap by verifying proofs rather than believing the endpoint outright.

A practical subtlety is the difference between the public JSON-RPC (typically port 8545 on Ethereum) and the authenticated Engine API (port 8551). The Engine API is a separate, JWT-protected JSON-RPC channel used only between an execution client and its consensus client after Ethereum's move to proof-of-stake; ordinary applications use 8545, while 8551 carries the engine_newPayload and engine_forkchoiceUpdated calls that drive block production and fork choice between the two clients.

{ "jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0xAbC...123", "latest"], "id": 1 }
// reply: { "jsonrpc": "2.0", "id": 1, "result": "0x1bc16d674ec80000" }  // 2 ETH in wei (hex)

Using a hosted RPC endpoint is convenient but means trusting that provider to return honest, current data; it is a real centralization vector, which is why running your own node or verifying proofs matters.