eth_chainId on X Layer
Everything below was measured on 2026-10-13 by calling eth_chainId on X Layer through the same endpoint customers use, and is re-measured weekly.
What eth_chainId does
Returns the chain ID (EIP-155) as a hex string. Wallets and libraries check it before signing, and the signature commits to it, so a transaction signed for one chain cannot be replayed on another.
X Layer chain ID, as measured
net_version returns the same number as decimal text. Older tools read net_version; use eth_chainId, which is the value signatures commit to.
We sent X Layer a legacy transaction signed without a chain ID (pre-EIP-155). Its nodes refused it: "only replay-protected (EIP-155) transactions allowed over RPC". Sign with chain ID 196; every mainstream library does this by default.
| eth_chainId | 0xc4 (196) |
|---|---|
| net_version | 196 |
Example request
curl -s https://rpc.swiftnodes.io/rpc/xlayer?key=YOUR_API_KEY \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'// Check you are on X Layer before signing
import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("https://rpc.swiftnodes.io/rpc/xlayer?key=YOUR_API_KEY"),
});
const id = await client.getChainId(); // 196
if (id !== 196) throw new Error(`wrong chain: ${id}`);
// Add X Layer to a browser wallet
await window.ethereum.request({
method: "wallet_addEthereumChain",
params: [{
chainId: "0xc4",
chainName: "X Layer",
nativeCurrency: { name: "OKB", symbol: "OKB", decimals: 18 },
rpcUrls: ["https://rpc.swiftnodes.io/rpc/xlayer?key=YOUR_API_KEY"],
}],
});Other methods on X Layer
- eth_blockNumberSupported
- eth_getBalanceSupported
- eth_getBlockByNumberSupported
- eth_getTransactionByHashSupported
- eth_getTransactionReceiptSupported
- eth_callSupported
- eth_estimateGasSupported
- eth_gasPriceSupported
- eth_maxPriorityFeePerGasSupported
- eth_sendRawTransactionSupported
- eth_getTransactionCountSupported
- eth_getCodeSupported
- eth_subscribeSupported
- eth_getLogsSupported
- eth_getBlockReceiptsSupported
- eth_feeHistorySupported
- eth_getProofSupported
- eth_createAccessListSupported
- debug_traceCallSupported
- trace_blockSupported
- trace_transactionSupported
eth_chainId on other chains
- Ethereum
- Base
- Arbitrum
- Optimism
- Polygon
- BNB Smart Chain
- Avalanche
- Sonic
- Linea
- Scroll
- zkSync Era
- Blast
- Mantle
- Gnosis
- Celo
- Berachain
- Monad
- Unichain
- Kaia
- PulseChain
- World Chain
- Ronin
- Abstract
- ApeChain
- MegaETH
- Fantom
- Lisk
- Hemi
- BOB
- Plasma
- Fraxtal
- Zora
- Story
- Soneium
- Sei
- Hyperliquid
- Taiko
- Morph
- Ink
- Katana
- Ethereum Classic
- opBNB
- Mode
- Flare
- Core
- Chiliz
- Telos EVM
- Tempo
- Cronos
- Manta Pacific
- Shibarium
- Boba Network
- Arbitrum Nova
- Immutable zkEVM
Frequently asked questions
Does X Layer support eth_chainId?
Yes. eth_chainId answered on the SwiftNodes X Layer endpoint when our weekly probe called it through the customer path (2026-10-13).
What is the X Layer chain ID?
196 in decimal, 0xc4 in hex, as returned by eth_chainId on 2026-10-13.
How do I add X Layer to MetaMask?
Call wallet_addEthereumChain with chainId 0xc4, the native currency OKB with 18 decimals, and your RPC URL; the example on this page has the full object.
X Layer endpoints, live block height and WebSocket status are on the X Layer RPC page.
One key covers every chain we serve, and SwiftNodes has a free tier.