> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Monad methods

> Complete reference of Monad JSON-RPC methods supported on Chainstack, with per-method availability for the eth, debug, txpool, net, and web3 namespaces and the Monad WebSocket subscriptions. Filters, eth_getProof, and the trace namespace are not served.

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](https://docs.chainstack.com/docs/request-units.md#evm-methods-affected-by-block-age).

See also [interactive Monad API call examples](https://docs.chainstack.com/reference/monad-getting-started.md).

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](https://github.com/category-labs/monad) client. Its JSON-RPC server, part of [monad-bft](https://github.com/category-labs/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](https://eips.ethereum.org/EIPS/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")](https://docs.chainstack.com/reference/monad-subscribe-monadnewheads.md).

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](https://chainstack.com/pricing/) — see [Debug and trace APIs](https://docs.chainstack.com/docs/debug-and-trace-apis.md#monad). 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](https://docs.chainstack.com/docs/limits.md#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](https://docs.chainstack.com/docs/protocols-networks.md).

## Method availability

| Method | Availability | Comment |
| - | - | - |
| debug\_getBadBlocks | | returns `-32601` |
| debug\_getRawBlock | | |
| debug\_getRawHeader | | |
| debug\_getRawReceipts | | |
| debug\_getRawTransaction | | |
| debug\_storageRangeAt | | returns `-32601` |
| debug\_traceBlock | | returns `-32601` |
| debug\_traceBlockByHash | | `callTracer` and `prestateTracer` only |
| debug\_traceBlockByNumber | | `callTracer` and `prestateTracer` only |
| debug\_traceCall | | `callTracer` and `prestateTracer` only; state reads cover recent blocks only — see [Historical state](#historical-state) |
| debug\_traceTransaction | | `callTracer` and `prestateTracer` only |
| eth\_accounts | | returns `-32601` |
| eth\_blobBaseFee | | returns `-32601` |
| eth\_blockNumber | | |
| eth\_call | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_callBundle | | returns `-32601` |
| eth\_callMany | | returns `-32601` |
| eth\_chainId | | |
| eth\_coinbase | | returns `-32601` |
| eth\_config | | returns `-32601` |
| eth\_createAccessList | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_estimateGas | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_feeHistory | | |
| eth\_fillTransaction | | see [Additional methods and subscriptions](#additional-methods-and-subscriptions) |
| eth\_gasPrice | | |
| eth\_getAccount | | returns `-32601` |
| eth\_getBalance | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_getBlockByHash | | |
| eth\_getBlockByNumber | | |
| eth\_getBlockReceipts | | |
| eth\_getBlockTransactionCountByHash | | |
| eth\_getBlockTransactionCountByNumber | | |
| eth\_getCode | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_getFilterChanges | | filters are not implemented — see [Filters and event watching](#filters-and-event-watching) |
| eth\_getFilterLogs | | filters are not implemented — see [Filters and event watching](#filters-and-event-watching) |
| eth\_getHeaderByHash | | returns `-32601` |
| eth\_getHeaderByNumber | | returns `-32601` |
| eth\_getLogs | | block range capped per plan — see [EVM range limits](https://docs.chainstack.com/docs/limits.md#evm-range-limits) |
| eth\_getProof | | returns `-32601` — see [EVM `eth_getProof` history limits](https://docs.chainstack.com/docs/limits#evm-eth_getproof-history-limits) |
| eth\_getRawTransactionByHash | | returns `-32601` |
| eth\_getStorageAt | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_getStorageValues | | returns `-32601` |
| eth\_getTransactionByBlockHashAndIndex | | |
| eth\_getTransactionByBlockNumberAndIndex | | |
| eth\_getTransactionByHash | | |
| eth\_getTransactionCount | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_getTransactionReceipt | | |
| eth\_getUncleByBlockHashAndIndex | | returns `-32601` |
| eth\_getUncleByBlockNumberAndIndex | | returns `-32601` |
| eth\_getUncleCountByBlockHash | | returns `-32601` |
| eth\_getUncleCountByBlockNumber | | returns `-32601` |
| eth\_hashrate | | returns `-32601` |
| eth\_maxPriorityFeePerGas | | |
| eth\_mining | | returns `-32601` |
| eth\_newBlockFilter | | filters are not implemented — see [Filters and event watching](#filters-and-event-watching) |
| eth\_newFilter | | filters are not implemented — see [Filters and event watching](#filters-and-event-watching) |
| eth\_newPendingTransactionFilter | | filters are not implemented — see [Filters and event watching](#filters-and-event-watching) |
| eth\_protocolVersion | | returns `-32601` |
| eth\_sendRawTransaction | | |
| eth\_sendRawTransactionSync | | see [Additional methods and subscriptions](#additional-methods-and-subscriptions) |
| eth\_simulateV1 | | state reads cover recent blocks only — see [Historical state](#historical-state) |
| eth\_subscribe | | WSS. `newHeads`, `logs`, `monadNewHeads`, and `monadLogs` — `newPendingTransactions` and `syncing` return `-32602` |
| eth\_syncing | | |
| eth\_uninstallFilter | | filters are not implemented — see [Filters and event watching](#filters-and-event-watching) |
| eth\_unsubscribe | | WSS |
| net\_listening | | returns `-32601` |
| net\_peerCount | | returns `-32601` |
| net\_version | | |
| rpc\_modules | | returns `-32601` |
| trace\_block | | the `trace_*` namespace is not served — see [Tracing on Monad](#tracing-on-monad) |
| trace\_call | | the `trace_*` namespace is not served |
| trace\_filter | | the `trace_*` namespace is not served |
| trace\_replayTransaction | | the `trace_*` namespace is not served |
| trace\_transaction | | the `trace_*` namespace is not served |
| txpool\_content | | not implemented by the Monad client — returns `-32601` |
| txpool\_contentFrom | | not implemented by the Monad client — returns `-32601` |
| txpool\_inspect | | not implemented by the Monad client — returns `-32601` |
| txpool\_status | | returns `-32601` |
| txpool\_statusByAddress | | see [Additional methods and subscriptions](#additional-methods-and-subscriptions) |
| txpool\_statusByHash | | see [Additional methods and subscriptions](#additional-methods-and-subscriptions) |
| web3\_clientVersion | | |
| web3\_sha3 | | returns `-32601` |
