If you're integrating a cross-chain stablecoin API, the two numbers that matter most are: how long does the transfer take, and what does it cost?
The answers depend on the chain pair, the stablecoin, the time of day, and the routing architecture. This guide explains what drives settlement time and fees in cross-chain stablecoin transfers, so you can set user expectations and choose optimal routes.
What determines settlement time
Cross-chain settlement time is the total time from intent submission to confirmed delivery on the destination chain. Three factors drive it.
1. Block times
The source and destination chain's block times set a floor on how fast a transfer can complete. You can't deliver faster than the destination chain can confirm a transaction.
Chain | Approximate block time |
~0.25 seconds | |
~0.4 seconds | |
~2 seconds | |
~2 seconds | |
~2 seconds | |
~12 seconds |
This means L2-to-L2 transfers (e.g., Arbitrum → Base) will inherently be faster than any transfer involving Ethereum L1. If you can design your product so that both sender and receiver are on L2s, your users will experience the fastest possible settlement.
2. Solver pickup time
In an intent-based system like Eco Routes, the time between intent publication and a solver committing to fill it depends on the route's popularity. High-volume routes attract more active solvers. Less common routes may take longer while solvers evaluate profitability.
3. Proof verification time
After the solver delivers tokens on the destination chain, a cryptographic proof must confirm the delivery before the escrow releases on the source chain. Eco Routes supports multiple provers — Hyperlane, LayerZero, CCTP, Polymer, and Metalayer — and uses the fastest available prover for each route.
General patterns
Based on these factors, you can expect:
L2 → L2 will be the fastest category — both chains have short block times and low gas costs
L1 → L2 and L2 → L1 will be slower due to Ethereum's ~12 second block time and higher gas
Solana ↔ EVM is competitive because Solana has sub-second blocks, though the cross-chain verification step adds overhead
Newer chains may show more variance if solver coverage is thinner
To see actual settlement times for a specific route, request a quote through the Routes API (POST /api/v3/quotes/single) or try it through Eco Portal.
What determines fees
In an intent-based system, fees are driven by solver competition rather than a single provider's pricing decision. Here's what makes up the cost.
Fee components
Solver fee — the competitive spread a solver charges for filling the intent. This is market-driven: more solver competition on a route means lower fees.
Source chain gas — the cost of the escrow transaction (token approval + intent publication) on the source chain.
Destination chain gas — the cost of the delivery transaction on the destination chain. This is absorbed by the solver and factored into their quote.
What drives solver fees up or down
Route volume. High-volume routes (e.g., between major L2s) attract more solvers and tighter spreads.
Liquidity availability. Routes where solvers can easily rebalance inventory see lower fees.
Gas predictability. Chains with stable gas costs let solvers quote tighter because their cost basis is more predictable.
Stablecoin denomination. Same-denomination transfers (USDC → USDC) are cheaper than cross-denomination (USDC → USDT) because the solver doesn't need to source a different token on the destination chain.
Network congestion. During gas spikes (e.g., popular NFT mints), solver fees increase to compensate for execution risk. This is transparent — you see the fee in the quote before committing.
L2 → L1 is the most expensive direction
Transfers to Ethereum mainnet cost more than transfers between L2s because Ethereum gas is significantly higher. Solvers price that cost into their quotes. If you're building treasury rebalancing flows, batch L2 → L1 transfers during low-gas periods. You can monitor gas trends on Etherscan's gas tracker.
Fee models compared across providers
Provider | Fee model | How fees are set |
Gas + solver fee | Competitive market — solvers bid, you see the exact fee in the quote before committing | |
Gas only | No protocol fee — you pay only network gas. But USDC only. | |
Platform fee + potential spread | Set by Stripe — includes platform charges and potential margin on conversions | |
Per-transaction fee | Set by Lightspark — varies by corridor |
CCTP V2 is cheapest for USDC-to-USDC transfers because there's no protocol fee. But it only supports USDC. For any other stablecoin or cross-denomination transfer, you need a different provider.
Optimizing for your use case
For payment acceptance (latency matters)
Route through L2-to-L2 pairs where possible. If your user is on Ethereum mainnet, suggest they use an L2 instead — the gas savings and speed improvements are significant.
When using the Routes API, the quote response includes an estimated settlement time. Surface this to users so they know what to expect before confirming.
For treasury rebalancing (cost matters)
Batch transfers during low-gas periods. Solver fees on L2s are already competitive, but Ethereum mainnet gas varies dramatically between peak and off-peak.
Use exact-out quotes (POST /api/v3/quotes/exactOut) when the recipient amount matters more than the sender amount — this avoids leftover dust.
For high-value transfers (reliability matters)
Large transfers may attract more solver competition since the absolute reward is higher. The intent-based model means the transfer either completes in full or reverts entirely — no partial-fill risk, regardless of the amount.
Getting real numbers for your routes
Every route has different characteristics. Rather than relying on generic benchmarks, get live data for your specific use case:
Quote API:
POST /api/v3/quotes/singlereturns real-time pricing and estimated settlement for any supported chain pair. See the API reference for request format.Eco Portal: Try a transfer through the web UI to see settlement time and fees in action before writing any code.
Routes CLI: Run
pnpm dev publish --source <chain> --destination <chain>and the interactive wizard will show you the quote before you confirm.
