> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tiprotocol.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 스왑 엔진

> Ti의 스왑 엔진은 6개 체인의 유동성과 브릿지를 하나의 경로 그래프로 보고, 그 위에서 받는 금액이 가장 큰 길을 찾습니다.

## 1. 세 가지 교환

사용자에게는 교환이 하나의 화면으로 보이지만, 엔진은 요청을 세 가지로 나눠 처리합니다.

**같은 체인 스왑**은 한 체인 안에서 스테이블코인을 다른 스테이블코인으로 바꾸는 교환입니다. Ethereum에서 USDC를 USDT로 바꾸는 경우처럼, 그 체인의 DEX 풀을 하나 또는 둘 거칩니다. 거래는 한 번의 서명으로 끝나고, 블록에 담기면 바로 완료됩니다.

**체인 간 이동**은 같은 스테이블코인을 다른 체인으로 옮기는 일입니다. Base의 USDC를 Arbitrum One의 USDC로 옮길 때는 Circle CCTP를, Arbitrum One의 USDT를 Polygon의 USDT로 옮길 때는 USDT0를 씁니다. 교환이 필요 없으므로 비용은 브릿지 수수료와 네트워크 수수료뿐입니다.

**체인 간 스왑**은 체인과 토큰을 한꺼번에 바꾸는 교환입니다. 엔진은 이것을 최대 세 구간으로 나눕니다. 출발 체인에서 브릿지에 실을 수 있는 토큰으로 바꾸는 출발 스왑, 체인 사이를 건너는 브릿지 구간, 도착 체인에서 목표 토큰으로 바꾸는 도착 스왑입니다. 필요 없는 구간은 건너뜁니다. 견적 API는 후보마다 실행 방식을 「브릿지만(CCTP)」, 「브릿지만(LayerZero)」, 「교환 후 브릿지(CCTP)」처럼 구분해 돌려주고, 도착 스왑이 있으면 그 구간의 예상 결과와 최소 수령량을 따로 적습니다. 사용자는 이 모든 구간을 한 번의 서명으로 시작합니다.

***

## 2. 유동성 원천

엔진은 체인마다 그 체인에서 가장 깊은 스테이블코인 유동성을 가진 DEX를 씁니다.

* **Uniswap V3** 유동성 공급자가 가격 구간을 정해 유동성을 모으는 집중 유동성 AMM입니다. 같은 토큰 쌍에도 0.01%, 0.05%, 0.30%, 1.00%의 수수료 구간별로 풀이 따로 있습니다.<sup>[33](https://docs.tiprotocol.io/ko/appendix/references.md#ref-33)</sup> 엔진은 모든 구간의 풀을 후보로 봅니다.
* **Uniswap V4** 모든 풀을 하나의 컨트랙트(싱글턴)에서 관리하고, 풀마다 훅(hook)으로 동적 수수료 같은 기능을 붙일 수 있는 구조입니다. 2025년 1월 31일 출시되었습니다.<sup>[34](https://docs.tiprotocol.io/ko/appendix/references.md#ref-34)</sup> 같은 쌍에도 설정이 다른 풀이 여럿 있을 수 있어, 엔진은 확인된 풀을 각각 후보로 계산합니다.
* **Curve** 가격이 거의 같은 자산끼리의 교환에 맞춘 StableSwap 곡선을 씁니다. 큰 금액의 스테이블코인 교환에서 가격 영향이 작습니다. Ti는 Ethereum에서 허용 목록에 올린 Curve 스테이블 풀만 씁니다.
* **PancakeSwap V3 · DragonSwap V3** 각각 BNB Smart Chain과 Kaia에서 같은 역할을 합니다.

Curve 풀에 허용 목록을 두는 이유는 단순합니다. 누구나 풀을 만들 수 있는 구조에서는 가격이 조작된 풀이나 엉뚱한 토큰을 담은 풀이 견적에 끼어들 수 있습니다. 엔진은 검토한 풀만 경로에 넣어 그런 후보를 처음부터 막습니다. 체인별로 쓰는 DEX와 브릿지는 [9장](https://docs.tiprotocol.io/ko/protocol/products.md)의 지원 네트워크 표에 정리했습니다.

***

## 3. 경로 탐색

엔진은 지원하는 모든 (체인, 토큰) 조합을 꼭짓점으로, 그 사이를 잇는 수단을 간선으로 하는 그래프를 다룹니다. 간선은 두 종류입니다. **스왑 간선**은 같은 체인 안의 DEX 풀이고, **브릿지 간선**은 체인 사이를 건너는 CCTP 또는 USDT0 경로입니다. 경로를 찾는다는 것은 출발 꼭짓점에서 도착 꼭짓점까지 가는 길 가운데 받는 금액이 가장 큰 길을 고르는 일입니다.

엔진은 Base의 USDC에서 Arbitrum One의 USDT까지 가는 후보 경로를 모두 계산하고, 받는 금액이 가장 큰 경로를 고릅니다.엔진은 Base의 USDC에서 Arbitrum One의 USDT까지 가는 후보 경로를 모두 계산하고, 받는 금액이 가장 큰 경로를 고릅니다.<ul><li>스왑 간선: 같은 체인 안의 DEX 풀</li><li>브릿지 간선: 체인 사이 이동</li><li>선택된 경로: 받는 금액이 가장 큰 경로</li></ul>선택된 경로의 금액: Ti 견적 API 실제 응답(2026-11-02 11:25 UTC), Base USDC 1,000 → Arbitrum One USDT.그림 크게 보기

**그림 14.** 엔진은 Base의 USDC에서 Arbitrum One의 USDT까지 가는 후보 경로를 모두 계산하고, 받는 금액이 가장 큰 경로를 고릅니다.

후보는 세 가지 방식으로 만듭니다.

**1. 단일 풀 후보**

출발 토큰과 도착 토큰을 직접 담은 풀을 DEX와 수수료 구간별로 모두 모읍니다.

**2. 다중 홉 후보**

직접 풀이 얕을 때를 대비해 USDC·USDT·WETH처럼 유동성이 깊은 토큰을 한 번 거치는 경로를 만듭니다. 구간마다 쓸 풀을 따로 고를 수 있어서, 1구간 풀 네 개와 2구간 풀 네 개면 후보가 열여섯 개가 됩니다.

**3. 체인 간 후보**

양쪽 체인에 모두 있는 브릿지 수단(USDC라면 CCTP, USDT라면 USDT0)을 찾고, 출발 토큰과 도착 토큰이 그 수단과 다르면 앞뒤에 스왑 간선을 붙입니다. 출발 스왑과 도착 스왑에도 위의 단일 풀·다중 홉 탐색을 그대로 씁니다.

후보마다 받는 금액은 실제 풀 상태로 계산합니다. Uniswap의 Quoter처럼 실행 결과를 미리 계산해 주는 조회 컨트랙트와 풀 상태 조회 컨트랙트를 써서, 지금 이 금액을 넣으면 얼마가 나오는지를 시뮬레이션합니다. 풀의 유동성이 주문 전체를 소화하지 못하는 후보는 부분 체결로 표시해 따로 다룹니다. 가격 영향은 후보마다 함께 계산해 화면에 보여 줍니다.

***

## 4. 받는 금액으로 고른다

후보를 줄 세우는 기준은 사용자가 마지막에 받는 가치입니다. 같은 체인에서 같은 토큰으로 받는 후보끼리는 받는 금액을 그대로 비교하면 됩니다. 문제는 비용을 내는 방식이 서로 다른 후보를 비교할 때입니다. 브릿지 수수료가 받는 금액에서 빠지는 후보가 있고, LayerZero 메시지 비용처럼 네이티브 토큰으로 따로 내는 후보도 있습니다. 엔진은 이런 후보를 같은 단위로 맞춰 비교합니다.

> 순가치 = 받는 금액 × 받는 토큰의 달러 시세 − 받는 금액에 반영되지 않은 별도 비용의 달러 환산액

[2장](https://docs.tiprotocol.io/ko/overview/the-problem.md)에서 본 Arbitrum One USDT 1,000개를 Polygon USDT로 옮기는 견적에 이 식을 적용하면 다음과 같습니다. 2026년 11월 2일 견적 시점의 시세는 USDT 0.998996달러, ETH 2,283.02달러였습니다.

| 후보 | 받는 금액 | 별도 비용 | 순가치 |
| - | -: | -: | -: |
| USDT0(LayerZero OFT)로 바로 이동 | 1,000.000000 USDT | 0.0000113 ETH ≈ 0.026달러 | **약 998.97달러** |
| USDT→USDC 교환, CCTP 이동, USDC→USDT 교환 | 999.822089 USDT | 없음(브릿지 수수료 상한 0.141 USDC를 받는 금액에 반영) | 약 998.82달러 |

엔진은 첫 번째 후보를 골랐습니다. 차이는 0.15달러 남짓이지만 이 판단이 거래마다 자동으로 반복된다는 점이 중요합니다. 사용자는 엔진이 고른 경로 대신 다른 후보를 직접 고를 수도 있습니다. 견적이 새로 고쳐지면서 사용자가 고른 후보가 사라지면 화면이 그 사실을 알려 줍니다.

Arbitrum One USDT 1,000 → Polygon USDT · 후보 2개두 후보의 비용을 같은 달러 기준으로![](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/icons/chain-arbitrum.svg?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=4377b156b2453414f0d271ad7b1eb5b0)![](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/icons/usdt.svg?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=f80699292d59b1ca38dd1a2130b2338d)![](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/icons/chain-polygon.svg?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=bf063a32b1ab85f85d42f8cbfcbac3b5)![](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/icons/usdt.svg?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=f80699292d59b1ca38dd1a2130b2338d)순가치 = 받는 금액 × 받는 토큰 시세 − 받는 금액에 반영되지 않은 별도 비용<ul><li>ETH로 따로 내는 비용</li><li>받는 금액에 반영된 비용</li></ul>같은 달러 기준 · 보낸 가치 998.996달러0.00달러0.10달러0.20달러차이 0.15달러엔진 선택**USDT0(LayerZero OFT)로 바로 이동**1,000.000000 USDT × 0.998996 − 0.0000113 ETH × 2,283.02USDT0(LayerZero OFT)로 바로 이동
1,000.000000 USDT 받는 금액
998.996달러 × 0.998996
−0.026달러 ETH로 따로 내는 비용
998.97달러 순가치**0.026달러**순가치**998.97달러****USDT→USDC 교환, CCTP 이동, USDC→USDT 교환**999.822089 USDT × 0.998996 − 0USDT→USDC 교환, CCTP 이동, USDC→USDT 교환
999.822089 USDT 받는 금액
998.818달러 × 0.998996
−0.000달러 ETH로 따로 내는 비용
998.82달러 순가치**0.178달러**순가치**998.82달러**출처 · Ti 견적 API, 2026-11-02 20:25 KST 무렵. 시세는 견적 시점의 USDT 0.998996달러, ETH 2,283.02달러(6.4절). CCTP 경로의 브릿지 수수료 상한 0.141255 USDC는 받는 금액에 이미 반영되어 있습니다.그림 크게 보기

**그림 15.** 받는 금액에서 빠지는 비용과 따로 내는 비용을 같은 달러 기준으로 맞추면 USDT0 경로가 0.15달러 남짓 더 남기 때문에 엔진은 이 경로를 골랐습니다.

같은 체인 거래의 네트워크 수수료(가스)는 지갑이 서명 직전에 보여 줍니다. 견적 화면은 경로마다 실행에 쓰는 DEX, 브릿지 수수료 또는 경로 세부, 가격 영향, 가스 표시 위치를 함께 보여 줍니다.

***

## 5. 견적의 수명과 슬리피지

견적은 받는 순간부터 낡기 시작합니다. 다른 사람의 거래가 풀 가격을 움직이기 때문입니다. Ti는 세 가지 장치로 이 간격을 관리합니다.

첫째, **견적을 주기적으로 새로 받습니다.** 스왑 화면에 머무는 동안 견적은 약 1분마다 자동으로 갱신됩니다. 서명 직전에 견적이 바뀌었으면 「이 거래쌍의 견적이 바뀌었습니다」라는 안내와 함께 새 견적을 다시 확인하게 합니다.

둘째, **슬리피지 허용치로 최소 수령량을 정합니다.** 사용자는 자동 설정을 쓰거나 0.1%, 0.5%, 1.0% 가운데 하나를 고를 수 있고, 0.01%부터 50%까지 직접 입력할 수도 있습니다. 5%를 넘게 설정하면 경고가 나옵니다. 최소 수령량은 예상 수령량에서 허용치를 뺀 값이며, 실행 결과가 그보다 적으면 거래가 실패합니다. 체인 간 거래에서는 구간마다 최소 수령량이 따로 걸립니다. 예를 들어 USDT0 1,000개를 보내는 견적에서는 브릿지 구간 최소 수령량이 990개로, Base의 USDC를 Arbitrum One의 USDT로 바꾸는 견적에서는 도착 스왑 최소 수령량이 예상 수령량의 99%로 정해졌습니다.

셋째, **거래에 기한을 둡니다.** 기본 기한은 10분이며 사용자가 1분부터 60분 사이에서 바꿀 수 있습니다. 기한이 지난 거래는 실행되지 않습니다. CCTP 경로에는 브릿지 수수료의 상한(maxFee)도 함께 들어가, Circle이 받는 수수료가 견적보다 커질 수 없습니다.<sup>[22](https://docs.tiprotocol.io/ko/appendix/references.md#ref-22)</sup>

**01**찾은 경로 26개· Ethereum USDC 1,000 → USDT  ![Ti 앱 스왑 화면과 찾은 경로 목록](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/ui/ui2_swap_main_ko.png?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=cb06201cfc64cbd71a69ed37b9fcf241)**02**체인 간 경로· Base USDC → Arbitrum One USDT0  ![체인 간 스왑의 금액과 경로 세부 정보](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/ui/ui2_swap_cross_ko.webp?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=1cac491bf0864a3ba6c4273b00a362f1)**03**스왑 설정· Gasless 켬  ![스왑 설정 창](https://mintcdn.com/ti-protocol/nfbzCVnO_pXa92Aq/images/src/ui/ui2_swap_settings_ko.png?fit=max\&auto=format\&n=nfbzCVnO_pXa92Aq\&q=85\&s=3ffefa8e061931ee6fa38a042038671a)지갑을 연결하지 않은 Ti 앱 스왑 화면 · 캡처 2026-11-02그림 크게 보기

**그림 16.** 스왑 화면은 찾은 경로 가운데 받는 금액이 가장 큰 경로를 먼저 보여 주고, 경로의 실행 방식과 비용, 슬리피지와 거래 기한을 서명 전에 확인하게 합니다.

***

## 6. 실제 견적 네 가지

아래는 2026년 11월 2일 20시 25분(KST) 무렵 Ti 견적 API에서 받은 견적입니다. 숫자는 그 시점의 기록입니다.

| 요청 | 엔진이 고른 경로 | 경로 수수료 | 받는 금액 |
| - | - | - | -: |
| Ethereum USDC 1,000 → USDT | 후보 26개 중 Uniswap V4 풀 | 풀 수수료(받는 금액에 반영) | 1,000.96 USDT |
| Base USDC 1,000 → Arbitrum One USDC | Circle CCTP(빠른 전송) | 0.13 USDC(1.3bp) | 999.87 USDC |
| Arbitrum One USDT 1,000 → Polygon USDT | USDT0(LayerZero OFT), 후보 2개 중 | 메시지 비용 약 0.026달러(ETH로 별도 지불) | 1,000.00 USDT |
| Base USDC 1,000 → Arbitrum One USDT | Circle CCTP 후 Arbitrum One의 Uniswap V4 풀에서 교환 | 0.13 USDC + 풀 수수료 | 도착 스왑 최소 수령량은 예상치의 99% |

네 견적 모두에서 사용자가 서명할 내용은 같은 형식으로 정리됩니다. 어디서 무엇을 얼마 보내고, 어떤 경로로, 어디서 최소 얼마를 받는지입니다. 엔진이 복잡한 일을 하지만, 사용자가 확인해야 할 것은 늘어나지 않습니다.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.