一、DEX 是什么(一句话面试版)
DEX(去中心化交易所)
→ 不靠订单簿撮合
→ 不托管资产
→ 通过智能合约 + AMM 算法,让用户直接在链上完成兑换
Uniswap / Sushiswap 本质:
一组部署在链上的合约 + 一个前端 UI
二、AMM 是什么(核心思想)
1️⃣ AMM 在解决什么问题?
传统交易所(CEX):
- 有订单簿
- 有做市商
- 有撮合引擎
DEX 没有:
- 没人挂买卖单
- 没人撮合
👉 那价格从哪来?
2️⃣ AMM 的答案
价格由"池子里的资产比例"决定
池子里永远有两种币,比如:
ETH / USDC 池
x = ETH 数量
y = USDC 数量
Uniswap V2 的核心公式(必须会):
x * y = k (恒定乘积)
k 是常数,交易前后不变
3️⃣ 用大白话解释一次交易过程
假设池子里:
ETH = 10
USDC = 20,000
此时:
ETH 价格 ≈ 2000 USDC
你用 1000 USDC 买 ETH:
- USDC ↑
- ETH ↓
- 必须保持
x * y = k
👉 价格自动变化
👉 你买得越多,价格越贵
👉 这就是滑点(slippage)
三、Uniswap / Sushiswap 怎么交互(前端视角)
1️⃣ 合约层结构(非常重要)
你前端真正交互的不是「DEX」,而是这些合约:
| 合约 | 作用 |
|---|---|
| ERC20 | 代币合约 |
| Pair / Pool | 资金池 |
| Router | 封装好的交易入口 |
| Factory | 创建池子 |
👉 99% 前端只调 Router
2️⃣ 一次 Swap 的完整流程(必背)
以 USDC → ETH 为例:
Step 1:approve(必有)
ts
USDC.approve(
routerAddress,
amountIn
)
授权 Router 花你的 USDC
Step 2:调用 Router.swap
ts
router.swapExactTokensForTokens(
amountIn,
amountOutMin,
path, // [USDC, WETH]
to, // 你的地址
deadline
)
🔑 参数解释(面试重点):
| 参数 | 说明 |
|---|---|
| amountIn | 你付出的币 |
| amountOutMin | 最少能接受多少(防滑点) |
| path | 兑换路径 |
| deadline | 防止交易卡太久 |
3️⃣ 为什么一定要 approve?
因为:
- ERC20 遵循 "转账必须授权"
- Router 不是你
- 合约不能随便动你资产
👉 approve → swap 是 DeFi 高频考点
四、AMM 的几个核心概念(必会)
1️⃣ 滑点(Slippage)
你看到的价格 ≠ 最终成交价
原因:
- 交易会改变池子比例
前端常见处理:
- 设置 0.5% / 1% / 自定义
2️⃣ LP(流动性提供者)
你也可以往池子里存币赚钱:
存 ETH + USDC
→ 获得 LP Token
→ 赚手续费
3️⃣ 无常损失(Impermanent Loss)
价格波动导致:
- 你提供流动性
- 不如直接持币
👉 LP 风险点,面试经常问
五、Uniswap vs Sushiswap(一句话区别)
| 项目 | Uniswap | Sushiswap |
|---|---|---|
| 本质 | AMM | AMM |
| 起源 | 原创 | Fork Uniswap |
| 代币 | UNI | SUSHI |
| 特点 | 稳定、主流 | 激进、功能多 |
👉 前端交互几乎一模一样
六、前端如何"真的"用起来(你该练什么)
推荐最小实战路径(很适合你)
1️⃣ 用 wagmi + ethers
2️⃣ 连钱包
3️⃣ 调用 Uniswap Router
4️⃣ 实现:
- 读价格(getAmountsOut)
- approve
- swap
- 显示滑点 / 失败原因
七、面试一句话总结(直接背)
DEX 通过 AMM 算法,用资金池代替订单簿。
Uniswap 使用恒定乘积公式 x*y=k 定价,
前端主要通过 Router 合约完成 approve + swap,
交易中需要处理滑点、授权、路径和截止时间等问题。