Desk

Field notes

Your indexer is three blocks late, and the book has moved

At 300 milliseconds, a one-second poll is a different market. Websocket heads, a host that actually serves history, and a receipt you waited for are the difference between a price and a rumour.

MONAF Desk · 25 October 2026 · 8 min

1s
About three slots
25 rps
Public primary, cited
History
Only some hosts
Receipt
The commit, not the head

An indexer is a story about the past that a trader is tempted to treat as the present. On Ethereum the temptation is expensive every twelve seconds. On Monad it is expensive three times a second. The docs’ websocket reference exists because polling the head is the wrong shape. Subscribe to new heads. Record the block number you acted on. If your process then spends a second in a database, you are writing a note about a block that is no longer the tip, and you should say so in the note. A dashboard that shows “live” without a block number is a mood.

A ONE-SECOND LOOPYou asked about slot NNN+1N+2N+3The answer arrives after the book has moved.Write the block number next to the figure.
A one-second loop against a 300 millisecond slot. The request is honest. The answer describes a market that has already had three chances to change.

History is a property of the host

Some public endpoints can answer an eth_call at an old block. The network page marks rpc2 and rpc-mainnet.monadinfra.com for that. Others will not, and several disable debug_ or trace_ outright. An indexer that replays state by calling at historical blocks must be pinned to a host that has agreed to serve them, and it must tolerate the batch cap on that host. The Foundation endpoint’s batch limit, in the table this piece was written against, is one. A client that sends batches of fifty will look, to a tired engineer, like a Monad outage. It is a client bug.

Rate limits are part of the design of the public good, not an insult. Twenty-five requests a second on the primary public URL is enough to paint a wallet and not enough to backfill a year of logs from a laptop on a cron. For the backfill, pay a provider or accept that the job takes days and checkpoint it. A retry storm against a 429 makes the next hour worse. Monad’s own RPC notes describe a 429 that should be respected. This app treats a 429 as a reason to slow down, not as a reason to guess a balance and trade it.

Store the block number next to every figure you show a human. A figure without a block is a rumour with a font.

The receipt is the commit

A head subscription tells you the chain moved. A receipt tells you your transaction was in a particular block and what it cost. Do not update a position from the head alone. Wait for the receipt, then mark it speculatively final one slot later and final one slot after that, if the difference matters to the product. Most users need the receipt and the two-slot wait. Almost none of them need a homemade mempool. If you do run one, remember that a transaction you saw and did not include is not a position. It is a wish, and on a chain that bills the limit, retrying the wish is how wishes become fees.

Sources

  1. 1Monad docs — mainnet network information
  2. 2Monad docs — historical data
  3. 3Monad docs — current facts
  4. 4Monad docs — websockets
  5. 5Monad docs — RPC limits