Skip to content

Chains

Two questions get confused constantly: which chains does the SDK know about, and which chains can settle a swap. They have different answers.

QuestionSource of truthCount
Which chains does swap-sdk name?ChainName / ChainId in swap-sdk/src/utils/constants.ts36
Which chains can settle a swap?RELAYER_DEPLOYED_CHAINS22
Which chains have an SEO landing page?CHAINS in defi-dex/src/data/chainSeo.mjs24
Which chains does the app actually offer?The Network collection, show: trueRuntime

The defensible public claim is "30+ chains".

Full SDK chain table

yes in the Relayer column means a swap or bridge-out can settle there.

Enum keySlugChain IDRelayer
MAINNETethereum1
OPTIMISMoptimism10yes
CRONOScronos25
BSCbsc56yes
GNOSISgnosis100
UNICHAINunichain130yes
MATICpolygon137yes
SONICsonic146yes
BTTCbittorrent199
OPBNBopbnb204yes
FANTOMfantom250
ZKSYNCzksync324
WORLDCHAINworldchain480yes
HYPEREVMhyperevm999yes
METISmetis1088
POLYGONZKEVM / ZKEVMpolygon-zkevm1101
MOONBEAMmoonbeam1284
SEIsei1329yes
SONEIUMsoneium1868yes
RONINronin2020yes
ABSTRACTabstract2741yes
ROBINHOODrobinhood4663yes
MANTLEmantle5000
BASEbase8453yes
MODEmode34443
APECHAINapechain33139yes
ARBITRUMarbitrum42161yes
CELOcelo42220yes
ETHERLINKetherlink42793
AVAXavalanche43114yes
LINEAlinea59144yes
BLASTblast81457
BERACHAINberachain80094yes
TAIKOtaiko167000
SCROLLscroll534352yes
AURORAaurora1313161554

Hemi (43111) has a relayer but is missing from the enums

It appears in RELAYER_ADDRESSES and RELAYER_DEPLOYED_CHAINS, and it has SEO landing pages — but there is no HEMI entry in ChainName or ChainId. So getChainNameById(43111) returns undefined. Anything relying on the slug lookup for Hemi will fail; anything relying on the relayer address works. Worth fixing.

Non-EVM chains

Not in the EVM enums; they use synthetic ids in the Network collection.

ChainInternal Network.idWalletsRelayer
Solana102PhantomNot applicable
TRON728126428TronLink, WalletConnectNot applicable

Neither routes through BlazpayRelayer, so neither pays the 0.1% fee or gets its refund protections. See non-EVM paths.

Deliberate non-deployments

ChainIDReason
Ethereum mainnet1Gas cost makes small trades uneconomic; no funds bridged there
Etherlink42793Intentionally skipped

Both are commented in RELAYER_ADDRESSES rather than omitted silently.

Configured but not deployed

Present in the enums with no relayer. These are seedable as bridge destinations — you can bridge into them — but cannot originate a swap or a bridge-out.

cronos · gnosis · bittorrent · fantom · zksync · metis · polygon-zkevm · moonbeam · mantle · mode · blast · taiko · aurora

Plus Qubetics (TICS), which has its own surface (qube.blazpay.com, qubeticsModel) rather than an entry here.

SEO landing-page coverage

24 chains have prerendered /swap/{slug} and /bridge/{slug} pages, from CHAINS in chainSeo.mjs:

Emerging (priority — lowest keyword competition):soneium · hemi · berachain · sei · sonic · unichain · apechain · abstract · worldchain · hyperevm · opbnb · ronin

Majors:ethereum · arbitrum · optimism · base · polygon · bnb · avalanche · linea · scroll · celo

Non-EVM:solana · tron

ethereum has a landing page but no relayer

Deliberate — the page ranks for Ethereum swap intent and routes users to a chain where the trade is economic. Do not "fix" the inconsistency by deleting the page.

Each chain record carries slug, chainId, native, category, since, explorer, popularTokens, a hand-written narrative, extraKeywords and extraFaqs.

Relayer address cohorts

Four distinct proxy addresses, for reasons worth understanding:

AddressChainsWhy
0x7d98E59FabFBaDD5eCB61CC2cf876AA97f505531137, 146, 204, 480, 999, 1329, 1868, 2020, 33139, 42220, 43111, 80094The v2 cohort — deterministic CREATE from TX_SIGNER at the same nonce
0x5c23c9a42626Ade38ae1c9a3407096d4381EE6E656, 42161, 59144, 534352Pre-existing, upgraded in place
0xb8Bd470f3C2610F83025D049085A64f1C7b78F1410, 8453, 43114, 2741, 4663Pre-existing, plus Abstract (zkSync-stack CREATE differs) and Robinhood
0xA01da2d3AbEFFbaa347B08C76EEC47169DdE72e9130Unichain — deployer nonce had drifted before deploy

Full deployment record with implementations: contract addresses.

Automation chain support

Much narrower than trading:

ProductChains
CSIP / DCAArbitrum (42161) only
AutopilotArbitrum (42161), Robinhood (4663), Arbitrum Sepolia (421614). Base (8453) configured, not deployed
PerpetualsOrderly's supported set

Runtime resolution

The Network collection is what the app actually reads:

js
{
  id: Number,              // the canonical chain key
  chainType: String,       // 'evm' | 'solana' | 'tron'
  name, key, coin, logoURI,
  mainnet: Boolean,
  metamask: Object,        // { rpcUrls: [...], ... }  ← the RPC everything uses
  multicallAddress: String,
  nativeToken: Object,
  tokenlistUrl: String,
  order: Number,           // display order
  aggregators: [String],   // per-chain provider allow-list
  show: Boolean,           // default true
}

metamask.rpcUrls[0] is a single point of failure per chain

The backend uses it for EIP-712 signing (signTx loads it per chainId), the fee summary and all vault interaction. A dead RPC in this record takes that chain down with no obvious error message.

Set show: false to hide a chain from the UI without deleting the record. That is the correct way to disable one.

Adding a chain

Checklist: add a chain. The short version:

GoalWork
Bridge into onlySeed Network + at least one Token (from LiFi data), bust the production cache
Full swap + bridgeDeploy BlazpayRelayer, add to RELAYER_ADDRESSES and RELAYER_DEPLOYED_CHAINS, release the SDK, bump both consumers' pins and lockfiles
SEO pagesAdd a CHAINS entry in chainSeo.mjs and rebuild

Adding to RELAYER_ADDRESSES without RELAYER_DEPLOYED_CHAINS is dangerous

assertRelayerDeployed reads the Set. Skipping it lets a swap attempt proceed on a chain that was never verified.

Internal + developer documentation. Usage figures are point-in-time snapshots — re-verify before publishing them.