Skip to main content
Our pricing is simple: 1 RU per full request, 2 RUs per archive. For which EVM methods are full vs archive, see Request units — EVM methods affected by block age. See also interactive Monad API call examples. Monad nodes serve the standard Ethereum methods for blocks, transactions, receipts, logs, state reads, gas, and sending transactions, plus debug_* tracing. They do not serve filters, eth_getProof, or the trace_* namespace, and they add a few Monad-specific methods and subscriptions. Monad is an EVM-compatible layer 1. Chainstack nodes run the official Monad client. Its JSON-RPC server, part of monad-bft, is its own implementation rather than a reused Ethereum client, so its method set differs from Geth and Reth. The availability on this page applies to Monad Mainnet (chain ID 143) and Monad Testnet (chain ID 10143) on Global Nodes.

Filters and event watching

The Monad client does not implement the filter methods. eth_newFilter, eth_newBlockFilter, eth_newPendingTransactionFilter, eth_getFilterChanges, eth_getFilterLogs, and eth_uninstallFilter all return -32601. Event watchers built on filters fail on Monad. For example, ethers.js contract.on() on an HTTP JsonRpcProvider sends eth_newFilter and gets -32601. Use one of these instead:
  • eth_subscribe over WSS — stream newHeads or logs. In ethers.js, use a WebSocketProvider.
  • eth_getLogs — poll a block range for logs. In ethers.js, create the HTTP provider with new ethers.JsonRpcProvider(url, 143, { polling: true }), using chain ID 10143 on Monad Testnet, and contract.on() then polls eth_getLogs instead of creating a filter.
Monad has no pending-transaction feed: eth_subscribe("newPendingTransactions") returns -32602.

Additional methods and subscriptions

Besides the standard read and send methods, Monad nodes serve these methods and subscriptions:
  • eth_sendRawTransactionSync — sends a signed transaction and waits for its receipt in a single call, as defined by EIP-7966. The Monad node returns the receipt when a proposed block includes the transaction, or error code 4 with the transaction hash if the wait times out.
  • eth_fillTransaction — takes a partial transaction and returns it with the nonce, gas limit, fee fields, and chain ID filled in, as a tx object and as the RLP-encoded unsigned transaction in raw.
  • txpool_statusByHash and txpool_statusByAddress — Monad-specific methods that return a transaction’s status in the transaction pool: tracked, dropped or evicted with a reason, committed, or unknown. These methods read the pool of the node that serves the request, so a transaction the node has no record of returns -32000 Unknown tx hash or -32000 No transactions. To confirm that a transaction landed, use eth_getTransactionReceipt.
  • monadNewHeads and monadLogs — Monad-specific eth_subscribe subscriptions that follow each block from the moment it is proposed. Each event carries a blockId and a commitState, and the same block or log typically arrives once each as Proposed, Voted, Finalized, and Verified; a block can also skip straight to Finalized. See eth_subscribe(“monadNewHeads”).
The standard newHeads and logs subscriptions fire once per block, when the block is proposed and before it is finalized. To act only on finalized data, use monadNewHeads or monadLogs and wait for commitState Finalized, or read with the finalized block tag.

Tracing on Monad

Monad serves debug_traceTransaction, debug_traceBlockByNumber, debug_traceBlockByHash, and debug_traceCall, all of which need a paid plan — see Debug and trace APIs. The trace_* namespace is not served, so use debug_traceBlockByNumber and debug_traceTransaction with {"tracer": "callTracer"} in place of trace_block and trace_transaction. The tracers are callTracer and prestateTracer — see Available native tracers. A request without a tracer field returns a callTracer trace, because Monad has no struct/opcode logger. The struct logger options, such as enableMemory and disableStack, have no effect.

Historical state

A Monad Archive node serves blocks, transactions, receipts, logs, and callTracer traces at any depth, but state reads only for a rolling window of recent blocks, several days long. Outside that window, eth_call, eth_estimateGas, eth_createAccessList, eth_simulateV1, eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount, and debug_traceCall return Block requested not found, and prestateTracer traces of older transactions fail. See the Monad note in Networks.

Method availability

Last modified on November 13, 2026