Skip to main content
Work around the gaps in BOT Chain’s public infrastructure and docs that most often trip up new developers. Each section says what the limitation is and what to do instead. All behaviour on this page was checked against the live networks on 2026-10-01. Things change, so if a workaround stops being needed, tell us.

Event queries

The limitation. BOT Chain’s JSON-RPC page says eth_getLogs is disabled on the public endpoints and recommends third-party endpoints. In our tests on 2026-10-01, eth_getLogs did answer on both public RPCs for bounded block ranges, such as 50,000 blocks. Queries from block 0 to the latest block timed out or returned a gateway error. Because BOT Chain documents the method as disabled, don’t build on it working in production. Workarounds:
  • Query in small block ranges, and keep your own record of the last block you processed.
  • Use the BOTScan explorer API, which serves logs over HTTP. See Explorer API.
  • Read the events without getLogs guide for frontend patterns.
  • Uzo Index is planned to provide indexed events.
Both examples read Transfer events from testnet USDT.

No WebSocket endpoint

The limitation. BOT Chain doesn’t publish a WebSocket URL, and wss:// versions of both RPC URLs failed to connect on 2026-10-01. You can’t use eth_subscribe for new blocks or events. Workaround. Poll over HTTP. Viem’s watch actions poll automatically when the transport is http. Blocks arrive every 0.75 seconds, so a 1-second interval keeps you close to the head of the chain.
watch.js
Uzo RPC is planned to offer WebSockets.

Not in viem’s chain list

The limitation. You can’t import { botChain } from "viem/chains". Neither network is built in. Workaround. Define the chain yourself with defineChain. A tested definition is in Build your first dApp. Or import botChain and botChainTestnet from the Uzo SDK.

Chain 968 is registered to another network

The limitation. In the public chain registry and on Chainlist, chain ID 968 belongs to a network called Datagram, not BOT Chain testnet. Wallets that look up chain details may warn you or offer the wrong values. Workaround. Add BOT Chain testnet to your wallet by hand. See Connect a wallet. Mainnet (677) is listed correctly.

Standard Multicall3 address missing on testnet

The limitation. Many tools assume Multicall3 is at 0xcA11bde05977b3631167028862bE2a173976CA11. That contract exists on BOT Chain mainnet but not on testnet. Workaround. Use BOT Chain’s own Multicall3 at 0x47FA21f684bBAD707A53a0f9BE59F1422F46C265, which is deployed on both networks. Set it in your viem chain definition under contracts.multicall3.

No confirmed paymaster for BOT Chain

The limitation. BOT Chain’s EOA paymaster page describes a paymaster API and names NodeReal’s MegaFuel as an implementation. MegaFuel is documented as a BNB Chain service. We found no public paymaster endpoint confirmed for chain 677. Workaround. Use meta-transactions: the user signs a message and your relayer pays the gas. See Meta-transactions and Run a relayer.

Osaka opcodes aren’t supported

The limitation. BOT Chain supports EVM features up to Prague. Contracts compiled for Osaka can fail with “invalid opcode”. Workaround. Set evm_version = "cancun" in Foundry or evmVersion: "cancun" in Hardhat. See Supported EIPs.

Errors in BOT Chain’s docs

BOT Chain’s docs are the source for anything they own, but a few details were wrong or out of date on 2026-10-01:

Other things to watch for

  • USDT has 6 decimals on BOT Chain, not 18. Use the official address from Contract addresses; other tokens named “USDT” exist on testnet.
  • block.prevrandao is not random. See Supported EIPs.

Troubleshooting

Error messages and fixes.

Differences from Geth

How the RPC differs from standard Geth.

Uzo RPC

Planned: logs and WebSockets.

Explorer API

The main workaround for event queries.
Last modified on October 2, 2026