Skip to main content

1. Three kinds of swap

To the user, every swap looks like the same screen, but the engine splits requests into three kinds. A same-chain swap exchanges one stablecoin for another within a single chain. As when swapping USDC to USDT on Ethereum, it goes through one or two DEX pools on that chain. The transaction needs a single signature and is complete as soon as it is included in a block. A cross-chain transfer moves the same stablecoin to another chain. Moving USDC on Base to USDC on Arbitrum One uses Circle CCTP, and moving USDT on Arbitrum One to USDT on Polygon uses USDT0. No swap is needed, so the only costs are the bridge fee and the network fee. A cross-chain swap changes both the chain and the token at once. The engine splits it into up to three legs: a source swap that converts, on the source chain, to a token the bridge can carry; a bridge leg that crosses between chains; and a destination swap that converts to the target token on the destination chain. Legs that are not needed are skipped. For each candidate, the quote API returns the execution mode, such as “Bridge only (CCTP)”, “Bridge only (LayerZero)” or “Swap then bridge (CCTP)”, and when there is a destination swap, it lists that leg’s expected result and minimum received separately. The user starts all of these legs with a single signature.

2. Liquidity sources

On each chain, the engine uses the DEXs that hold the deepest stablecoin liquidity on that chain.
  • Uniswap V3 A concentrated-liquidity AMM in which liquidity providers set price ranges to concentrate their liquidity. The same token pair has a separate pool for each fee tier: 0.01%, 0.05%, 0.30% and 1.00%.33 The engine treats the pools in every tier as candidates.
  • Uniswap V4 Manages all pools in a single contract (a singleton) and lets each pool attach features such as dynamic fees through hooks. It launched on January 31, 2025.34 The same pair can have several pools with different settings, so the engine evaluates each confirmed pool as a separate candidate.
  • Curve Uses the StableSwap curve, which is designed for swaps between assets of nearly equal price. Price impact stays low on large stablecoin swaps. On Ethereum, Ti uses only the Curve stable pools on its allowlist.
  • PancakeSwap V3 · DragonSwap V3 These play the same role on BNB Smart Chain and Kaia, respectively.
The reason for the Curve allowlist is simple. Where anyone can create a pool, a pool with a manipulated price or a pool holding the wrong token can slip into a quote. By admitting only reviewed pools into routes, the engine blocks such candidates from the start. The supported networks table in Chapter 9 lists the DEXs and bridges used on each chain.
The engine works with a graph whose vertices are all supported (chain, token) combinations and whose edges are the means of moving between them. There are two kinds of edge. A swap edge is a DEX pool within one chain, and a bridge edge is a CCTP or USDT0 path that crosses between chains. Finding a route means choosing, among the paths from the start vertex to the destination vertex, the one with the largest amount received.
ARBITRUM ONEBASEETHEREUMUSDCBaseStartUSDCArbitrum OneUSDTArbitrum OneGoalUSDCEthereumUSDTEthereumCCTPUniswap V4 poolCCTPCurve poolLayerZero OFT(USDT0)sent 1,000.00after bridge 999.87expected 1,000.88BASEARBITRUM ONEETHEREUMUSDCBaseStartUSDCArbitrum OneUSDTArbitrum OneGoalUSDCEthereumUSDTEthereumCCTPUniswap V4 poolCCTPCurve poolLayerZero OFT(USDT0)sent 1,000.00999.87expected 1,000.88minimum 990.87
  • Swap edge: a DEX pool on one chain
  • Bridge edge: between chains
  • Selected route: largest amount received

Amounts on the selected route: a real Ti quote API response (2026-11-02 11:25 UTC), 1,000 USDC on Base → USDT on Arbitrum One.

Figure 14. The engine prices every candidate route from USDC on Base to USDT on Arbitrum One and picks the one with the largest amount received.

The engine builds candidates in three ways.
1

Single-pool candidates

It collects every pool that directly holds the source and destination tokens, across all DEXs and fee tiers.
2

Multi-hop candidates

In case the direct pools are shallow, it builds routes that pass once through a deep-liquidity token such as USDC, USDT or WETH. Each leg can use its own pool, so four pools on the first leg and four on the second yield sixteen candidates.
3

Cross-chain candidates

It finds a bridge available on both chains (CCTP for USDC, USDT0 for USDT), and if the source or destination token differs from what that bridge carries, it attaches swap edges before or after. The source swap and the destination swap reuse the single-pool and multi-hop search above.
The amount received for each candidate is calculated from actual pool state. Using quoter contracts that pre-compute execution results, such as Uniswap’s Quoter, together with pool-state query contracts, the engine simulates how much comes out if this amount goes in right now. Candidates whose pool liquidity cannot absorb the whole order are flagged as partial fills and handled separately. Price impact is calculated for each candidate and shown on screen.

4. Ranking by amount received

Candidates are ranked by the value the user receives at the end. Candidates that deliver the same token on the same chain can be compared directly by amount received. The difficulty comes when candidates pay their costs in different ways. In some, the bridge fee comes out of the amount received. In others, a cost such as the LayerZero messaging fee is paid separately in the native token. The engine brings such candidates to a common unit before comparing them.
Net value = amount received × USD price of the received token − USD value of separate costs not reflected in the amount received
Applying this formula to the quote from Chapter 2, which moves 1,000 USDT on Arbitrum One to USDT on Polygon, gives the following. At quote time on November 2, 2026, USDT was priced at $0.998996 and ETH at $2,283.02. The engine chose the first candidate. The difference is just over $0.15, but what matters is that this judgment repeats automatically on every transaction. Users can also pick another candidate instead of the route the engine chose. If a quote refresh removes the candidate the user picked, the screen says so.
Arbitrum One USDT 1,000 → Polygon USDT · 2 candidates
The cost of both candidates on one dollar basis

Net value = amount received × price of the token received − separate costs not in the amount received

  • Paid separately in ETH
  • Taken out of the amount received
One dollar basis · vs $998.996 sent
$0.00$0.10$0.20
$0.15 apart
Engine’s pickDirect move as USDT0 (LayerZero OFT)1,000.000000 USDT × 0.998996 − 0.0000113 ETH × 2,283.02
$0.026
Net value$998.97
USDT→USDC swap, CCTP move, USDC→USDT swap999.822089 USDT × 0.998996 − 0
$0.178
Net value$998.82

Source · Ti quote API, 2026-11-02, about 11:25 UTC. Prices at quote time: USDT $0.998996, ETH $2,283.02 (Section 6.4). On the CCTP route the bridge fee cap of 0.141255 USDC is already in the amount received.

Figure 15. Once the cost taken out of the amount received and the cost paid separately are put on the same dollar basis, the USDT0 route leaves just over $0.15 more, so the engine picked it.

For same-chain transactions, the wallet shows the network fee (gas) just before signing. For each route, the quote screen also shows the DEX used for execution, the bridge fee or route details, the price impact, and where gas is shown.

5. Quote lifetime and slippage

A quote starts to go stale the moment it arrives, because other people’s trades move pool prices. Ti manages this gap with three mechanisms. First, quotes are refreshed regularly. While the user stays on the swap screen, the quote updates automatically about once a minute. If the quote has changed just before signing, the user sees the notice “The quote for this pair has changed” and must review the new quote. Second, slippage tolerance sets the minimum received. Users can use the automatic setting, choose 0.1%, 0.5% or 1.0%, or enter any value from 0.01% to 50%. A setting above 5% triggers a warning. The minimum received is the expected amount minus the tolerance, and if the execution result falls below it, the transaction fails. In cross-chain transactions, each leg carries its own minimum received. For example, in a quote to send 1,000 USDT0, the minimum received for the bridge leg was set at 990, and in a quote to swap USDC on Base to USDT on Arbitrum One, the minimum received for the destination swap was set at 99% of the expected amount. Third, every transaction has a deadline. The default deadline is 10 minutes, and users can change it to any value from 1 to 60 minutes. A transaction past its deadline does not execute. CCTP routes also carry a cap on the bridge fee (maxFee), so the fee Circle charges cannot exceed the quote.22
0126 routes found· Ethereum USDC 1,000 → USDT
Ti app swap screen with the routes found
02Cross-chain route· Base USDC → Arbitrum One USDT0
Cross-chain swap amounts and route detail
03Swap settings· Gasless on
Swap settings dialog

Ti app swap screen, no wallet connected · captured 2026-11-02

Figure 16. The swap screen lists the route with the largest amount received first and lets the user check its execution path, costs, slippage and deadline before signing.


6. Four real quotes

The quotes below were received from the Ti quote API at around 8:25 p.m. KST on November 2, 2026. The numbers are a record of that moment. In all four quotes, what the user signs is laid out in the same format: what is sent, how much and from which chain; by which route; and the minimum to be received, on which chain. The engine does complex work, but the list of things the user has to check does not grow.