Sei is a parallelized EVM Layer 1, not an Ethereum L2 and not "Ethereum with a different RPC URL." Gas is paid in SEI, the network has two chain IDs depending on which side you talk to, and the EVM finality model differs from the rollups most wallets already support. Wallet builders who paste the Cosmos chain ID pacific-1 into an EVM form, reuse the testnet key, or carry L2 receipt heuristics onto Sei ship the wrong network or a confirmation policy that does not fit the chain. Before you wire MetaMask, Rabby, Rainbow, or your own wallet_addEthereumChain flow, prove chain ID 1329, separate the EVM and Cosmos paths, and probe the URL you intend to ship.
This is not a ranking of providers. Use the Sei 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 Sei to MetaMask, add Sei to Rabby, and add Sei to Rainbow pages have the fields prefilled.
Chain ID 1329 is the EVM ID, pacific-1 is the Cosmos ID
Sei mainnet has two identifiers for the same network:
- EVM chain ID: 1329, hex
0x531. This is what wallets,eth_chainId, and EIP-155 signatures use. - Cosmos chain ID:
pacific-1. This is whatseid --chain-idand Cosmos SDK clients use. It never goes in an EVM wallet form.
Sei testnet is EVM chain ID 1328 / 0x530 (Cosmos atlantic-2). Ethereum mainnet is 1. A wallet that already has Ethereum added still needs a separate Sei network entry.
Wallet-add fields for mainnet, matching the parameters Sei publishes for its own add-network button:
- Network name:
Sei Network(orSeiif the product already scopes the list) - Chain ID:
1329(or0x531if the form wants hex) - Currency symbol:
SEI - RPC URL: a JSON-RPC HTTPS endpoint you have already probed, such as the official
https://evm-rpc.sei-apis.com - Block explorer:
https://seiscan.io(Seistream athttps://seistream.appis also listed in the Sei docs and is the explorer link on the hub)
Native gas on the EVM side is SEI with 18 decimals, so 1 SEI = 10^18 wei and parseEther("1") means 1 SEI. The Cosmos side counts the same token in usei, where 1 SEI = 1,000,000 usei. If your backend reads staking or bank balances through Cosmos APIs, convert explicitly. Showing a usei amount with 18-decimal formatting is off by a factor of 10^12.
Call eth_chainId on the exact RPC URL you will ship. Expect 0x531. A gateway that returns 0x530 is testnet. A gateway that returns 0x1 is Ethereum. A timeout, an HTML page, or a Cosmos REST response is not Sei EVM 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 0x531 and a head block less than 2 seconds old when this guide was written (2026-09-29, 02:10 UTC):
| Endpoint | Transport | Notes |
|---|---|---|
https://evm-rpc.sei-apis.com | HTTPS | Official Sei Foundation RPC |
wss://evm-ws.sei-apis.com | WebSocket | Official, answered eth_chainId over WSS |
https://sei.drpc.org / wss://sei.drpc.org | HTTPS, WSS | One eth_getBlockByNumber call returned a temporary internal error, retry succeeded |
https://sei.api.pocket.network / wss://sei.api.pocket.network | HTTPS, WSS | |
https://1329.rpc.thirdweb.com | HTTPS | |
https://rpc.swiftnodes.io/rpc/sei | HTTPS | |
https://sei-evm-rpc.stakeme.pro | HTTPS |
Several other rows on the hub failed the same probe at that time: one returned a public rate-limit error, one returned an unsupported-chain error, one answered only on a different path, and one did not respond. A row on a directory page is a starting point, not proof that it serves Sei mainnet today. Re-run the probe before you ship any URL, including the ones above.
Sei's own docs state that public endpoints need no API key and are rate limited, and point production workloads at dedicated providers. Treat the table as a probe list for development and QA, not as a production recommendation.
Instant finality changes the receipt policy
Sei commits blocks with instant finality in roughly 400ms. On Sei the latest, safe, and finalized tags refer to the same commitment level. On the official RPC all three returned the same block height when this guide was written. That differs from OP Stack and Arbitrum chains, where the three tags can be hundreds or thousands of blocks apart.
What that means for a wallet:
- No L1 wait. There is no parent chain whose finality you wait for. A receipt in a committed block is final.
- Do not port L2 receipt pollers unchanged. Code that waits for
finalizedto move past a block is harmless on Sei but adds nothing. Code that treats alatestreceipt as "soft" on Sei shows a pending state users do not need. - Pending state is not Ethereum-style. Sei documents that pending-state visibility is not guaranteed. Do not build UX on pending transaction ordering or
pendingblock contents. - Freshness is measurable. With sub-second blocks, a head that has not moved in several seconds is a stale or stuck backend. Compare the latest block timestamp to wall-clock time as part of the health check.
EVM on Sei vs the Cosmos and CosmWasm paths (short version)
Most wallet teams only need the EVM path. A few Sei-specific points still reach wallet code:
- Two address formats, one key. Every account has a
0x...EVM address and asei1...Cosmos address derived from the same public key. Until the chain has seen the public key (association, for example by broadcasting any transaction), the two are treated as separate accounts with separate balances. - Association matters for some transfers. Sending ERC tokens from an EVM wallet to an unassociated
sei1address, or CW tokens to an unassociated0xaddress, is not possible until association. An EVM-only wallet sending to0xaddresses is unaffected. - CosmWasm and IBC are legacy paths. New CosmWasm contracts can no longer be uploaded or instantiated (Proposal 115), and IBC is disabled in both directions (SIP-03, final step on 2026-07-31). Pointer contracts remain for already-deployed CW tokens. New integrations should treat Sei as an EVM chain and use ERC-20 / ERC-721 contracts.
- Different endpoints. Cosmos RPC and REST endpoints do not answer
eth_*methods. Do not put a Cosmos URL in the EVM network row. - Gas is not Ethereum-identical.
SSTOREcosts are set by governance (72,000 gas at the time of writing, not the Ethereum value). Useeth_estimateGasagainst Sei, not constants copied from Ethereum.
MetaMask, Rabby, and Rainbow
All three accept Sei as a custom EVM network with the fields above. What to expect:
- MetaMask: the add-network form takes the five fields directly. When a dapp calls
wallet_switchEthereumChainfor a chain MetaMask does not know, it returns error4902. Handle that by callingwallet_addEthereumChain, which is the same switch-then-add flow Sei's own docs use. - Rabby: named alongside MetaMask in Sei's user quickstart. Check whether Sei already appears in Rabby's network list before adding a custom entry, so you do not end up with two Sei 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, Sei documents both as working without changes; define Sei as a custom chain with the fields above rather than relying on a library default.
For wallet_addEthereumChain, send a full EIP-3085 payload: chainId: "0x531", chainName: "Sei Network", nativeCurrency: { name: "Sei", symbol: "SEI", decimals: 18 }, rpcUrls with your probed HTTPS endpoint, and blockExplorerUrls: ["https://seiscan.io"]. For wallet_switchEthereumChain, send only { chainId: "0x531" }. Prefer one primary RPC in the wallet payload and keep failover in your own client.
Wallet-add gotchas that show up in QA
- Cosmos chain ID in an EVM form -
pacific-1is not a number and is not 1329. - Testnet mix-up -
1328/0x530pasted into a mainnet config, or a testnet RPC behind a mainnet label. - ETH symbol or Ethereum decimals assumptions - the native token is SEI. Show the network name and symbol, not "ETH."
- usei vs wei - Cosmos-side amounts use 6 decimals, EVM amounts use 18.
- Cosmos URL on the EVM row -
eth_chainIdfails or returns nothing useful. - One shared "sei" RPC key for mainnet and testnet - 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, 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_chainIdreturns0x531.- The latest block advances when you poll twice a second apart, and its timestamp is within a few seconds of wall-clock time.
- 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.
- One balance or receipt read against a known Sei mainnet
0xaddress. - 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.
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. At the time of writing those are DRPC, Alchemy, and Infura, with different free tiers and compute-unit pricing. Dwellir does not list Sei mainnet on this directory today, so it is not an option for this chain yet. 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 Sei network row - EVM chain ID 1329 /
0x531, SEI symbol, Seiscan, RPC you probed today. - Sei testnet row - chain ID 1328 /
0x530, separate config key, never reused as the mainnet RPC. - Cosmos tooling, if any -
pacific-1, Cosmos RPC and REST URLs,useiamounts, kept out of the EVM row. - Backend / indexer - dedicated or paid endpoint with explicit method and archive needs; do not share the browser wallet's public URL.
- Receipt policy - one committed block is final on Sei. Document that next to the RPC URL so nobody adds an L2 wait later.
Ship the hub comparison and the probe first. A network called "Sei" in a dropdown does not replace eth_chainId returning 0x531.