guide10 min read

Taiko Mainnet RPC for Wallet Builders

Taiko RPC checks for wallets: chain ID 167000 / 0x28c58, ETH gas at 0.01 gwei, Hekla vs Hoodi testnet IDs, and 9 public endpoints that passed 8 probes.

By RPC Directory•
#Taiko#Taiko Alethia#ETH#RPC#Wallet#Chain ID#MetaMask#Rabby#EVM#Rollup
$taiko-mainnet-rpc.md

Taiko is an Ethereum Layer 2 designed as a based rollup, with ETH as the gas token. Taiko's docs call mainnet "Taiko Alethia". Blocks arrive every 2 seconds. The JSON-RPC surface is standard Ethereum, so wallet code written for Ethereum works, but wallet builders still trip on three things: an old testnet that no longer exists, a gas price far below Ethereum's, and a finalized tag that trails latest by more than 20 minutes.

This is not a ranking of providers. Use the Taiko Mainnet hub to compare endpoints, then run the checks below on the URL you configure. The Taiko Mainnet providers page lists the keyed options side by side.

Chain ID 167000 is mainnet, 167013 is Hoodi testnet

  • Taiko mainnet (Alethia): chain ID 167000, hex 0x28c58. eth_chainId returned 0x28c58 on every passing URL in every round of our probe, and net_version on rpc.mainnet.taiko.xyz returned "167000". Taiko's RPC configuration docs list the same chain ID.
  • Taiko Hoodi testnet: chain ID 167013, per the same docs page, with Ethereum Hoodi (560048) as its parent chain.
  • Hekla is deprecated. Taiko's FAQ says Hekla and the earlier testnets are no longer operational and points to Hoodi for all testing. Treat a Hekla config as stale.
  • Ethereum mainnet: chain ID 1. Taiko ETH is bridged ETH on a separate chain, so it needs its own network entry.

Wallet-add fields for mainnet, matching Taiko's connect guide:

  • Network name: Taiko Mainnet (or Taiko Alethia)
  • Chain ID: 167000 (or 0x28c58 if the form wants hex)
  • Currency symbol: ETH
  • RPC URL: a JSON-RPC HTTPS endpoint you have already probed, such as https://rpc.mainnet.taiko.xyz
  • Block explorer: https://taikoscan.io

Native gas is ETH with 18 decimals. Call eth_chainId on the exact RPC URL you will ship and expect 0x28c58. A gateway that returns 0x28c65 (167013) is Hoodi. A timeout, an HTML page, an API-key error, or a rate-limit body is not Taiko mainnet for that transport.

Public endpoints that passed 8 of 8 rounds

We probed every Taiko mainnet URL on the hub 8 times, about 55 seconds apart, on 2026-10-15 between 02:17 and 02:24 UTC. Each round called eth_chainId, eth_getBalance on the zero address and eth_getBlockByNumber("latest"), with a curl User-Agent on every request. Hosts ran in parallel, with one connection per host. These nine HTTPS URLs passed all three calls in 8 of 8 rounds. On every one, the latest block's timestamp was within 3 seconds of our clock, and no URL was more than 2 blocks behind the newest block any URL returned in the same round:

EndpointTransportNotes
https://rpc.mainnet.taiko.xyzHTTPSThe endpoint in Taiko's docs, which describe it as rate-limited. Head 2 to 3 s old
https://rpc.taiko.xyzHTTPSSecond Taiko-run hostname on the hub. Head 2 to 3 s old
https://rpc.ankr.com/taikoHTTPSAnswered without a key. Head 1 to 2 s old
https://taiko-rpc.publicnode.comHTTPSHead 1 to 2 s old
https://taiko.drpc.orgHTTPSHead 1 to 2 s old
https://taiko.rpc.sentio.xyzHTTPSHead 1 to 2 s old
https://rpc.swiftnodes.io/rpc/taikoHTTPSHead 1 to 3 s old
https://taiko-mainnet.gateway.tenderly.coHTTPSHead 0 to 2 s old
https://taiko.api.pocket.networkHTTPSHead 0 to 2 s old, never behind the round's newest block

The hub also lists WebSocket rows. We ran the same three calls over one WSS connection per URL, 8 rounds about 55 seconds apart, between 02:27 and 02:34 UTC. wss://taiko-rpc.publicnode.com (head 1 to 4 s old) and wss://taiko.drpc.org (head 0 to 3 s old) passed all three calls in 8 of 8 rounds.

Some rows answered with caveats and stay listed:

  • https://lb.routeme.sh/rpc/evm/167000 returned 0x28c58 in 7 of 8 rounds, but eth_getBlockByNumber returned HTTP 429, JSON-RPC -32029 "public rate limit exceeded", in all 8 rounds, and eth_getBalance did the same in 3. Treat it as low-rate only.
  • https://taiko-mainnet.4everland.org/v1/... and its WSS twin carry an API key in the path. The HTTPS URL returned HTTP 401, "Invalid API Key.", on every call, and the WSS handshake returned 401 in every round. That is a key problem, not a dead host, so it stays listed. Use your own 4EVERLAND key if you want this provider.

Four rows failed every call in all 8 rounds, and the directory now hides them. In each case the TLS connection closed before any HTTP response, and a public DNS lookup returned no address for the hostname (NXDOMAIN for the porters.xyz host):

  • https://rpc.taiko.tools
  • https://taiko-json-rpc.stakely.io
  • https://taiko-mainnet.rpc.porters.xyz/taiko-public
  • https://taiko.therpc.io

A row on a directory page is a starting point, not proof it serves Taiko mainnet today.

Fees: 0.01 gwei, priced in ETH

On rpc.mainnet.taiko.xyz at about 02:28 UTC:

  • The latest block's baseFeePerGas was 0x989680 (10,000,000 wei, 0.01 gwei), and eth_feeHistory over 5 blocks showed the same value in every block.
  • eth_gasPrice returned 0x989680 (0.01 gwei).
  • eth_maxPriorityFeePerGas returned 0x0, and the 50th percentile tip in eth_feeHistory was 0 in all 5 blocks.
  • eth_estimateGas for a plain ETH transfer between two ordinary addresses returned 0x5208 (21,000).
  • The block gas limit was 46,000,000, and each of the 5 blocks used under 0.4 percent of it.

At that gas price, a plain transfer costs 21,000 × 0.01 gwei, 0.00000021 ETH. What that means for a wallet:

  • Do not show "0" for the fee. Rounding to four or six decimals of ETH hides the real number. Show it in gwei or with enough precision.
  • Do not add a fixed Ethereum-sized tip. The node suggested a tip of 0, and a hardcoded 1 or 2 gwei tip would cost 100 to 200 times the base fee.
  • Read the price, do not hardcode it. The base fee was flat across the sampled blocks, but take it from eth_feeHistory or the latest block rather than a constant.

Finality: safe equals latest, finalized trails by about 24 minutes

During the probe, timestamps across the last 10,000 blocks spanned 20,000 seconds, exactly 2 seconds per block. web3_clientVersion on rpc.mainnet.taiko.xyz returned reth/v2.4.0-f2eecc6/x86_64-unknown-linux-gnu.

At about 02:28 UTC, on rpc.mainnet.taiko.xyz:

  • eth_getBlockByNumber("safe") returned the same block as latest.
  • eth_getBlockByNumber("finalized") returned a block 727 blocks behind latest, with a timestamp about 1,460 seconds (24 minutes) old.
  • rpc.ankr.com/taiko, taiko-rpc.publicnode.com, taiko.drpc.org and taiko-mainnet.gateway.tenderly.co returned the same finalized block number a few seconds later.

For a wallet:

  • latest is fine for balances on screen.
  • safe gives you nothing extra on Taiko, since it matched latest.
  • If you credit deposits only at finalized, tell users the wait is closer to half an hour than to a few seconds, and show the pending state in the meantime.

Add Taiko to MetaMask or Rabby

These are the values we checked on 2026-10-15, not values copied from a list:

  • eth_chainId returned 0x28c58 (167000) on every passing URL in the table above.
  • Taiko's connect guide lists Taiko Mainnet, chain ID 167000, ETH and https://rpc.mainnet.taiko.xyz as the wallet fields, with https://taikoscan.io as the explorer.
  • https://taikoscan.io returned HTTP 200 to a request with a browser User-Agent.

MetaMask: follow the MetaMask custom RPC guide. Check 'Additional networks' first. To add it by hand, open 'Networks', choose 'Add a custom network', and enter the five fields from the chain ID section with a URL from the passed table. MetaMask does not verify that a custom network is what it claims to be, so the probe is your check.

Rabby: follow the Rabby custom network guide. Taiko's developer tools page says Rabby detects Taiko on its own, so check the network list before you add a custom entry. If you add it by hand, enter chain ID 167000 and an RPC URL that returned 0x28c58 in your own probe.

Dapps: for wallet_addEthereumChain, send chainId: "0x28c58", chainName: "Taiko Mainnet", nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 }, rpcUrls with your probed HTTPS endpoint, and blockExplorerUrls: ["https://taikoscan.io"]. For wallet_switchEthereumChain, send only { chainId: "0x28c58" }, and call wallet_addEthereumChain if MetaMask returns error 4902.

Wallet-add gotchas that show up in QA

  1. Hekla config left in place: Hekla is deprecated. A testnet entry today should be Hoodi, chain ID 167013.
  2. ETH symbol on several networks: Ethereum, Taiko and Taiko Hoodi all show ETH. Show the network name next to the balance.
  3. A fee that rounds to zero: 0.00000021 ETH for a transfer needs more precision than most balance formatters use.
  4. Waiting on finalized: it trailed latest by about 24 minutes on every URL we checked.
  5. Hostnames that no longer resolve: four hub rows had no DNS address during our probe. Probe the URL you ship.
  6. Shared public URLs under load: Taiko's docs say the public RPCs are rate-limited and recommend your own node or a third-party provider for heavy use.

Public vs dedicated for wallet traffic

Public endpoints are fine for:

  • Local development and wallet QA
  • Low-volume eth_chainId and eth_blockNumber probes
  • One-off scripts and docs examples

They are a poor primary path when you:

  • Run production wallet RPC for many users (balance, nonce, fee estimate, send, receipt polls)
  • Need wide eth_getLogs ranges or historical state
  • Depend on WebSocket subscriptions
  • Cannot absorb shared-node rate limits during a token launch or market spike

Probe the candidate URL before you call it ready:

  1. eth_chainId returns 0x28c58.
  2. The latest block advances when you poll twice 2 seconds apart, and its timestamp is within a few seconds of wall-clock time.
  3. A plain transfer eth_estimateGas returns 0x5208 (21,000).
  4. eth_getBalance on an address you care about returns a value, not a rate-limit or method error.
  5. You know how far finalized trails latest on that URL, and your confirmation logic accounts for it.
  6. A burst of 20 to 50 quick requests does not return HTTP 429 or a JSON-RPC rate-limit error at the volume you expect per client.

For production wallet traffic, compare the rows on the same hub for method coverage, archive access, and quota. At the time of writing the providers page lists Dwellir, Chainstack and dRPC as keyed options for Taiko mainnet.

A cheaper URL that fails the probe above is not a savings. The public vs paid guide covers when a shared endpoint stops being enough, and the pricing calculator estimates monthly cost for a given request mix. Log-heavy indexers should also read the eth_getLogs caps guide, and the dead public endpoints guide explains why listed URLs stop answering.

Practical split for a wallet stack

  • User-facing Taiko network row: chain ID 167000 / 0x28c58, ETH symbol with the network name shown, an explorer you opened, an RPC you probed today.
  • Testnet row, if you need it: Taiko Hoodi, chain ID 167013, a separate config key, never reused as the mainnet RPC.
  • Fee estimation: EIP-1559 fields from the RPC, no fixed tip, shown with enough precision.
  • Confirmations: show latest right away, and if you wait for finalized, say so in the UI.
  • Backend / indexer: a dedicated or keyed endpoint with the eth_getLogs range and archive depth you need. Do not share the browser wallet's public URL.

Ship the hub comparison and the probe first. A network called "Taiko" in a dropdown does not replace eth_chainId returning 0x28c58.