如果你想理解 DeFi,Uniswap 是最好的起点。它把一个金融核心概念——做市——用几十行代码实现了出来,并且不需要任何中心化机构参与。

这篇指南从最基础的问题开始:一笔交易在 Uniswap 上到底是怎么完成的。

自动做市商要解决什么问题

传统交易所靠订单簿:买家挂买单、卖家挂卖单,撮合引擎把价格匹配的交易配对。这套机制需要有人同时提供买单和卖单,市场才能运转。

问题在于:如果某个代币只有人想买、没人想卖,交易就没法发生。流动性提供依赖于做市商主动挂单。

自动做市商(AMM)换了个思路:不要订单簿,用一个资金池和一条公式来定价。任何人都可以往池子里存入两种代币,池子就变成了一个"永远愿意交易"的对手方。价格由公式自动计算,不需要人挂单。

这叫被动做市。代价是价格可能不如订单簿精准,好处是永远有流动性。

恒定乘积公式:一切的起点

Uniswap v2 用的公式简单到可以用一行写出来:

x × y = k

其中 x 是池子里代币 A 的数量,y 是代币 B 的数量,k 是常数。任何一笔交易都必须保持 k 不变。

举个例子。假设池子里有 100 个 ETH 和 200,000 USDC。此时:

  • k = 100 × 200,000 = 20,000,000

如果有人想用 USDC 买 ETH,他往池子里投入 USDC,池子里的 USDC 增加,为了保持 k 不变,ETH 必须减少。价格就是这两种变化的比值。

但这里有一个关键特征:价格不是恒定的,而是随交易量滑动的。

继续上面的例子。你想买入 10 个 ETH。池子里的 ETH 要从 100 减少到 90。为了保持 k = 20,000,000:

  • 新的 USDC 数量 = 20,000,000 / 90 ≈ 222,222
  • 你需要投入的 USDC = 222,222 - 200,000 = 22,222

也就是说,买 10 个 ETH 花了 22,222 USDC,平均单价 2,222 USDC。而池子初始价格是 200,000 / 100 = 2,000 USDC。你实际支付的价格比初始价格高了 11%。

这个差额就是滑点(Slippage)。交易量相对池子规模越大,滑点越高。这也解释了为什么大额交易要拆分成多笔、为什么深度好的池子更受欢迎。

v3:集中流动性带来的变革

恒定乘积公式有一个"浪费"的地方:流动性被均匀分布在从 0 到无穷大的所有价格上。但现实中,ETH 的价格不会在一天之内跌到 1 美元或者涨到 100 万美元。大部分流动性被分配到了永远不会成交的价格区间里,实际上是闲置的。

Uniswap v3 的核心创新是集中流动性(Concentrated Liquidity):LP 可以选择只在某个价格区间内提供流动性。

比如你可以只在 ETH 价格 2,800 到 3,200 之间做 LP。在这段区间里,你的资金效率可能是全区间做市的几十倍甚至上百倍——因为同样的资金被压缩到了很窄的价格带。

但代价是不对称的风险:

  • 如果 ETH 价格涨出你的区间上限,你的头寸会全部变成 USDC(你卖飞了)
  • 如果价格跌出区间下限,你的头寸会全部变成 ETH(你接满了)
  • 价格在区间内时你赚手续费,出了区间就不赚了

这就引出一个关键概念:无常损失(Impermanent Loss)。它指的是"做 LP 相比单纯持有两种代币的收益差"。在价格偏离你做市时的价格越远,无常损失越大。

集中流动性把无常损失也放大了:你选择的价格区间越窄,手续费收入越高,但一旦价格突破区间,无常损失也更集中在某个方向上。

v4:可编程的池子

Uniswap v4 的核心思路是把池子的行为变成可插拔的。它引入了"钩子(Hooks)"机制——开发者可以在交易的特定时点(下单前、下单后、撤单时等)插入自定义逻辑。

这打开了很大的设计空间:

  • 动态费率:根据市场波动自动调整手续费
  • 限价单:用钩子实现类似订单簿的挂单功能
  • 定制化的做市曲线:不局限于恒定乘积,可以实现稳定币专用的低滑点曲线
  • 自动再平衡:价格变动时自动调整 LP 区间

代价是复杂性。任何可编程的机制都意味着新的攻击面。钩子的安全性完全取决于实现质量,用户在选择池子时需要注意用的是哪套钩子、有没有经过审计。

一笔交易的真实成本构成

在 Uniswap 上交易,成本由几部分构成:

1. LP 手续费。 通常 0.01%(稳定币对)、0.05%(主流币对)、0.30%(长尾币对)三档。这笔钱归流动性提供者。

2. 协议手续费。 部分池子会向协议金库上缴一小部分,具体取决于治理设置。

3. 滑点成本。 不是显式收费,而是成交价与理想价的差距。深度不足或交易过大时,这部分可能远高于手续费。

4. Gas 费。 在以太坊主网上可能很高,在二层网络上低很多。这是决定性因素之一——一笔小额交易在主网的 Gas 费可能超过交易金额本身。

5. MEV 损失(三明治攻击)。 攻击者看到你的大额交易后,在前一笔买入推高价格、后一笔卖出,把差价从你身上拿走。设置合理的滑点容忍度(不要设太高)可以降低这种损失。

对新手来说,最实用的建议是:小额交易尽量在二层网络上做,主网留给大额交易。

新手最容易踩的几个坑

坑一:把滑点容忍度设太高。 为了"确保成交"把滑点设成 5%、10%,等于给 MEV 机器人发邀请函。合理值通常是 0.5% 到 1%(稳定币对可以更低)。如果交易一直失败,说明池子深度不够,应该拆小或换池子,而不是提高容忍度。

坑二:不看池子的真实流动性。 有些新代币的池子看起来有交易量,实际流动性极少,交易滑点极大。看池子规模(TVL)和 24 小时交易量的比值比看价格更重要。

坑三:忽略了代币授权风险。 与合约交互需要授权(Approve),授权额度等于给合约转账的权限。永远不要授权无限额度,而是只授权本次交易需要的数量。定期检查并撤销不用的授权。

坑四:在流动性极差的池子里做 LP。 如果你打算做 LP,先算清楚:手续费收入能不能覆盖无常损失。在波动大的新币池子里,无常损失经常远超手续费收入。

坑五:被"高 APY"吸引。 池子展示的 APY 往往是短期滚动计算的,且不扣除无常损失。真实收益要用"手续费收入 - 无常损失 - Gas 成本"来算。

怎么开始

如果你是第一次用 Uniswap:

  1. 准备钱包。MetaMask 或 Rabby,小额测试用小额资金
  2. 选择网络。建议从 Arbitrum、Base 这类二层网络开始,Gas 便宜,适合练手
  3. 先做一笔小额 swap。熟悉授权、确认、查看交易哈希的流程
  4. 只交易流动性好的代币对。ETH/USDC、USDC/USDT 这类主流对滑点很低
  5. 理解后再考虑做 LP。第一笔 LP 建议放在主流币的宽区间里,观察一周的收益与无常损失

Uniswap 的界面很简洁,但简洁不代表简单。真正需要理解的是背后的机制——为什么滑点存在、无常损失从哪来、手续费值不值。理解这些之后,你才能判断一笔交易划不划算,而不是只跟着界面上的数字走。

常见问题

Uniswap 上的价格是怎么定的?

由池子里两种代币的数量比例决定,v2 遵循恒定乘积公式 x×y=k。交易量相对池子规模越大,实际成交价偏离初始价格越多,这个差额就是滑点。

什么是无常损失?

指做 LP 相比直接持有两种代币的收益差。价格偏离你做市时的价格越远,无常损失越大。集中流动性会放大手续费收入,也放大无常损失。

滑点容忍度应该设多少?

主流币对通常 0.5% 左右,稳定币对可以更低(0.1%)。设置过高(如 5% 以上)会显著增加被三明治攻击套利的风险。交易反复失败说明深度不足,应拆小交易而非提高容忍度。

代币授权有风险吗?

有。授权等于给合约转账你代币的权限。建议只授权本次交易所需的数量,避免无限授权,并定期检查和撤销不再使用的授权。

免责声明:本文内容仅为信息分享与行业研究之用,不构成任何投资建议、要约或要约邀请。数字资产价格波动剧烈,投资决策请独立判断并自行承担风险。