Gnosis is an EVM chain with its own beacon chain, not "Ethereum with a different RPC URL." Gas is paid in xDAI, a dollar stablecoin bridged from Ethereum, not ETH and not GNO, and the base fee sits in single-digit wei. Wallet builders who paste chain ID 1, reuse the Chiado key, label the fee in ETH or GNO, or copy Ethereum tip defaults will ship the wrong network or fee UI that makes no sense. Before you wire MetaMask, Rabby, Rainbow, or your own wallet_addEthereumChain flow, prove chain ID 100, price fees the way Gnosis charges them, and probe the URL you intend to ship.
This is not a ranking of providers. Use the Gnosis Mainnet hub to compare endpoints and paid rows, then run the checks below on the URL you configure. If you only need the network in a browser wallet, the add Gnosis to MetaMask, add Gnosis to Rabby, and add Gnosis to Rainbow pages have the fields prefilled.
Chain ID 100 is not Ethereum and not Chiado
- Gnosis mainnet: chain ID 100, hex
0x64. This is what wallets,eth_chainId, and EIP-155 signatures use. - Chiado testnet: chain ID 10200, hex
0x27d8, RPChttps://rpc.chiadochain.net. Its gas token is Chiado xDAI, which has no value. The Gnosis Chiado hub lists more testnet rows. - Ethereum mainnet: chain ID 1. A wallet that already has Ethereum added still needs a separate Gnosis network entry.
Wallet-add fields for mainnet, matching the parameters Gnosis publishes for its own add-to-MetaMask link:
- Network name:
Gnosis - Chain ID:
100(or0x64if the form wants hex) - Currency symbol:
XDAI(the hub displays it as xDAI) - RPC URL: a JSON-RPC HTTPS endpoint you have already probed, such as the official
https://rpc.gnosischain.com - Block explorer:
https://gnosisscan.io
Native gas is xDAI with 18 decimals, so 1 xDAI = 10^18 wei and parseEther("1") means 1 xDAI. xDAI is a native balance on Gnosis, read with eth_getBalance, not an ERC-20 contract call. Wrapped xDAI lives at 0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d (its symbol() returns WXDAI) if your swap or approval flows need the ERC-20 form. GNO is the staking token. On Gnosis it is an ERC-20 balance, not the gas token, so a wallet that shows "GNO" or "ETH" next to the fee is showing the wrong unit.
Call eth_chainId on the exact RPC URL you will ship. Expect 0x64. A gateway that returns 0x27d8 is Chiado. A gateway that returns 0x1 is Ethereum. A timeout, an HTML page, or a "paid plan required" body is not Gnosis mainnet for that transport. Run the check after any load balancer or fallback so you are testing the backend production actually hits.
Public endpoints that answered eth_chainId
Each URL below returned 0x64, a head block within about 5 seconds of wall-clock time, and 0x5208 (21,000) for eth_estimateGas on a plain xDAI transfer when this guide was written (2026-10-01, 02:13 UTC):
| Endpoint | Transport | Notes |
|---|---|---|
https://rpc.gnosischain.com / wss://rpc.gnosischain.com/wss | HTTPS, WSS | Official. Note the /wss path on the WebSocket URL |
https://rpc.gnosis.gateway.fm | HTTPS | Listed next to the official RPC in the Gnosis docs |
https://rpc.ap-southeast-1.gateway.fm/v4/gnosis/non-archival/mainnet | HTTPS | Non-archival, as the path says |
https://gnosis-rpc.publicnode.com / wss://gnosis-rpc.publicnode.com | HTTPS, WSS | |
https://gnosis.drpc.org / wss://gnosis.drpc.org | HTTPS, WSS | |
https://gnosis.api.pocket.network / wss://gnosis.api.pocket.network | HTTPS, WSS | |
https://gnosis.oat.farm | HTTPS | |
https://gno-mainnet.gateway.tatum.io | HTTPS |
Several other rows on the hub failed the same probe at that time. Some returned HTTP 404, a discontinued-service error, a paid-plan-required message, a public rate-limit error, an API-key-required error, or an origin-down error, and a few did not respond. A few more answered eth_chainId but refused a follow-up block read or returned a rate-limit error on the next call. A row on a directory page is a starting point, not proof that it serves Gnosis mainnet today. Re-run the probe before you ship any URL, including the ones above.
Treat the table as a probe list for development and QA, not as a production recommendation.
xDAI fees: a stablecoin priced in wei
Gnosis runs EIP-1559, live since block 19,040,000 in November 2021. Two things make its fee market look different from Ethereum's in a wallet:
- Gas is priced in a dollar stablecoin. xDAI is minted on Gnosis when DAI or USDS is bridged in, one for one, so a fee in xDAI reads roughly as a fee in US dollars. There is no separate gas-token price to fetch before you show a dollar estimate, but say "xDAI" in the UI, not "$", because the peg is the bridge's, not yours.
- The base fee is tiny. During the test, the base fee read 9 wei,
eth_gasPricereturned0xa(10 wei), andeth_maxPriorityFeePerGasreturned0x1(1 wei). A plain transfer at those prices costs about 2 x 10^-13 xDAI. Fee UI that rounds to a few decimals shows zero, which is correct, not a bug. - Do not copy Ethereum tip defaults. A hardcoded 1.5 gwei priority fee is still cheap in dollar terms, but it is more than 100 million times the base fee the network asked for. Read
eth_maxPriorityFeePerGasoreth_feeHistoryfrom the endpoint instead of carrying over a mainnet floor. - No L1 data fee. Gnosis is not a rollup, so
gasUsed effectiveGasPriceis the whole fee. "Send max" can subtractgasLimit maxFeePerGasfrom the balance and stop there. - Blob gas has its own floor. Gnosis set
MIN_BLOB_GASPRICEto 1 gwei, andeth_feeHistoryreturnedbaseFeePerBlobGasof0x3b9aca00during the test. This only matters if your stack sends blob transactions.
Gnosis quirks that matter for wallets
- Three block tags, three heights. Slots are 5 seconds, and 1,000 blocks took about 5,100 seconds during the test.
safetrailedlatestby about 23 blocks (2 minutes) andfinalizedby about 39 blocks (3.4 minutes). Gnosis documents finalization at about 2.7 minutes. Show alatestreceipt as included, and reserve "final" for UI that actually needs it. - Bridged xDAI arrives without a normal transfer. When a user bridges DAI or USDS in through the xDAI bridge, the bridge contract on Gnosis records the receiver with the block reward contract, and the consensus engine credits the xDAI balance. Gnosis's own docs note these balance updates are harder to trace than value transfers. A wallet that builds history only from transactions and internal traces can show the balance change with no matching incoming transaction. Re-read
eth_getBalance, and if you need the history row, index theAddedReceiverevent on the block reward contract0x481c034c6d9441db23Ea48De68BCAe812C5d39bA. - Withdrawals to Ethereum need a claim. To move xDAI back, the user sends xDAI to, or calls
relayTokenson, the bridge contract on Gnosis, and the xDAI is burned. The bridge validators wait for finality on Gnosis, sign (4 of 7), and then someone has to callexecuteSignatureson Ethereum, which costs ETH gas. The Gnosis bridge app shows a Claim button for this step. Since the USDS migration, the user receives USDS or DAI on Ethereum depending on which Gnosis-side contract the withdrawal goes through. Deposits from Ethereum use the Fast Confirmation Rule, so validators act on an Ethereum block after about 13 seconds instead of waiting for Ethereum finality. - Bridge limits are daily, and per transaction. The bridge contract reverts a new transfer that would push the day's total over the daily limit, so the user has to resubmit after the limit resets (the day is the Unix timestamp divided by 86,400, not 24 hours from the attempt). The bridge also sets a minimum and maximum per transaction. A transfer that was already accepted can instead sit pending when validator execution hits the execution daily limit for that direction. The Bridge Explorer shows both limits and the time to reset, so check it before a large transfer. Other ERC-20 tokens move over the Omnibridge, which runs on the Arbitrary Message Bridge and its validators and mints bridged tokens on Gnosis. Third-party bridges have their own timing.
- Standard JSON-RPC otherwise. Gnosis uses Nethermind and Erigon execution clients and the usual
eth_namespace. Every endpoint in the table answeredeth_chainId,eth_getBlockByNumber, andeth_estimateGaswith standard responses.
MetaMask, Rabby, and Rainbow
All three accept Gnosis as an EVM network with the fields above. What to expect:
- MetaMask: the add-network form takes the five fields directly. Gnosis's docs publish a one-click add link with chain ID
0x64, symbolXDAI, andhttps://gnosisscan.io. When a dapp callswallet_switchEthereumChainfor a chain MetaMask does not know, it returns error4902. Handle that by callingwallet_addEthereumChain. - Rabby: check whether Gnosis already appears in Rabby's network list before adding a custom entry, so you do not end up with two Gnosis rows pointing at different RPCs.
- Rainbow: accepts the same EIP-3085 add request from a dapp. If your dapp connects wallets with RainbowKit or wagmi, define Gnosis with the fields above and confirm the explorer URL is
gnosisscan.io.
For wallet_addEthereumChain, send a full EIP-3085 payload: chainId: "0x64", chainName: "Gnosis", nativeCurrency: { name: "xDAI", symbol: "XDAI", decimals: 18 }, rpcUrls with your probed HTTPS endpoint, and blockExplorerUrls: ["https://gnosisscan.io"]. For wallet_switchEthereumChain, send only { chainId: "0x64" }. Prefer one primary RPC in the wallet payload and keep failover in your own client.
Wallet-add gotchas that show up in QA
- Chain ID 1 in the Gnosis row - the network name says Gnosis but signatures target Ethereum.
- Chiado mix-up -
10200/0x27d8pasted into a mainnet config, or a Chiado RPC behind a mainnet label. - GNO or ETH as the gas symbol - the native token is xDAI. GNO is the staking token and an ERC-20 on Gnosis.
- Ethereum fee defaults - a gwei-level tip floor where the network asks for wei.
- Missing bridge deposits in history - the balance went up, but no incoming transaction appears, because the xDAI was credited by the block reward contract.
- WSS URL without the path - the official WebSocket is
wss://rpc.gnosischain.com/wss, not the bare host. - One shared "gnosis" RPC key for mainnet and Chiado - separate config keys so a fallback cannot silently swap networks.
Public vs dedicated for wallet traffic
Public endpoints are fine for:
- Local development and wallet QA
- Low-volume
eth_chainId/eth_blockNumberprobes - 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 predictable latency and a support channel when the gateway rate limits you
- Depend on historical state, wide
eth_getLogs, or sustained WebSocket traffic - Cannot absorb shared-node brownouts during a mint, airdrop, or market spike
Probe the candidate URL before you call it ready:
eth_chainIdreturns0x64.- The latest block advances when you poll twice about 10 seconds apart, and its timestamp is within a few seconds of wall-clock time.
eth_estimateGasanswers for a plain xDAI transfer, andeth_maxPriorityFeePerGasoreth_feeHistoryreturns wei-level values.- 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.
- If you need push updates, a WebSocket
eth_subscribethat survives a disconnect. - One historical
eth_getBalanceat an old block if you need archive, and oneeth_getLogsfilter in the range your indexer uses, including the block reward contract if you index bridge deposits.
Public rows on the hub are shared and rate-limited. Use them for the probe. For production wallet traffic, compare the paid rows on the same hub for method coverage, archive or historical access if you need it, and quota. At the time of writing they include DRPC, Chainstack, Alchemy, and Dwellir. Dwellir's row is a keyed Gnosis mainnet endpoint over HTTPS and WSS, with a separate Chiado endpoint, billed as one response credit per call on every method, which keeps a mix of cheap reads and heavier log or trace calls easy to budget. It is not the only option. 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 before assuming a wide filter will pass on every URL.
Practical split for a wallet stack
- User-facing Gnosis network row - chain ID 100 /
0x64, XDAI symbol, Gnosisscan, RPC you probed today. - Chiado row - chain ID 10200 /
0x27d8, separate config key, never reused as the mainnet RPC. - Fee estimation -
eth_estimateGasplus a tip frometh_maxPriorityFeePerGasoreth_feeHistory, no Ethereum floors. - Backend / indexer - dedicated or paid endpoint with explicit method and archive needs, plus the
AddedReceiverevent if you show bridge deposits; do not share the browser wallet's public URL. - Receipt policy -
latestfor "included,"safeorfinalizedonly where the product needs it, and a claim step on Ethereum for xDAI bridge withdrawals.
Ship the hub comparison and the probe first. A network called "Gnosis" in a dropdown does not replace eth_chainId returning 0x64.