Skip to main content
Read contract events and follow new blocks on BOT Chain even though the public RPCs don’t officially support eth_getLogs or WebSockets.

The limitation

  • eth_getLogs. BOT Chain’s JSON-RPC page says it’s disabled on the public endpoints and points to third-party providers. In our tests (2026-10-01 and 2026-10-03) it answered bounded ranges, such as 5,000 or 50,000 blocks. A query from block 0 to the latest block failed.
  • WebSockets. No WebSocket URL is published. wss:// versions of both RPC URLs failed to connect, so eth_subscribe isn’t available.

Why it matters

Most dApp frameworks and indexers expect both. Without them:
  • Activity feeds, token transfer histories and leaderboards can’t simply query events.
  • Indexers that read events over RPC, such as Ponder, need eth_getLogs to backfill.
  • Libraries that default to WebSocket subscriptions fail to connect.

Workarounds

Bounded getLogs

Ask for a fixed range instead of the whole chain. This reads the last 5,000 blocks of testnet USDT logs with Foundry:
recent-logs.sh
It returned in about 2 seconds on 2026-10-03. No output means no events in that range. Use chunks of a few thousand blocks and loop for longer ranges.

Poll instead of subscribing

With viem, use an http transport. Its watch actions (watchBlockNumber, watchContractEvent) poll automatically. Set pollingInterval: 1_000, since blocks come about every 0.75 seconds. A full example is in Known limitations.
watchContractEvent polls with eth_getLogs under the hood. It works on small ranges today, but because the method is documented as disabled, also have a fallback such as polling a state variable.

What will change

Uzo RPC is planned to support eth_getLogs and WebSockets, and Uzo Index is planned to serve indexed events. Both are planned, not live.

Troubleshooting

The range is too large. Query from a recent block, not 0, and split long ranges into chunks of 5,000 blocks or fewer.
BOT Chain has no WebSocket endpoint. Replace webSocket() with http() in viem, or WebSocketProvider with JsonRpcProvider in ethers, and poll.
Lower the polling interval to 1 second. Polling faster than the 0.75-second block time doesn’t help.

Next steps

Events without getLogs

Frontend patterns that don’t need event queries.

Use the BOTScan API

Read decoded logs from the explorer.
Last modified on October 2, 2026