Uniswap V2

概述

Uniswap V2 是 Uniswap 协议的第二代版本,于 2020 年 5 月发布。它是对 V1 的重大改进,解决了 V1 的许多局限性,并引入了多项创新功能。V2 的核心改进是支持任意 ERC20 代币对,不再需要 ETH 作为基础资产,同时引入了价格预言机、闪电兑换和协议费用等新功能。

核心机制

自动做市商(AMM)模型

Uniswap V2 继续使用自动做市商模型,通过数学公式自动确定交易价格,而不是依赖订单簿匹配。V2 使用"恒定乘积公式":

\[x \cdot y = k\]

其中,\(x\)和\(y\)是交易对中两种资产的储备量,\(k\)是一个常数。这个公式确保无论交易量如何,两种资产的乘积保持不变。

当用户进行交易时,他们支付一种资产并接收另一种资产,同时保持\(k\)不变。交易价格由以下公式决定:

\[p = \frac{y}{x}\]

其中,\(p\)是交易价格,表示用\(x\)资产购买\(y\)资产的价格。

流动性提供

用户可以通过向交易对提供两种资产来成为流动性提供者(LP)。作为回报,LP 会收到代表其在池中份额的 LP 代币。这些 LP 代币可以用于赎回流动性,也可以用于赚取交易费用。

在 Uniswap V2 中,LP 代币的铸造基于存入资产的几何平均值:

\[s_{minted} = \sqrt{x_{deposited} \cdot y_{deposited}}\]

其中,\(s*{minted}\)是铸造的 LP 代币数量,\(x*{deposited}\)和\(y_{deposited}\)是存入的资产数量。

交易费用

Uniswap V2 对每笔交易收取 0.30%的费用,这些费用会分配给流动性提供者。此外,V2 还引入了可选的 0.05%协议费用,可以发送到指定的地址。

技术实现

智能合约架构

Uniswap V2 采用了模块化的合约架构,主要包括三个核心合约:

  1. 工厂合约(Factory):负责创建和管理交易对合约。每个交易对都有一个唯一的地址,由工厂合约通过确定性地址派生算法计算得出。

  2. 交易对合约(Pair):存储流动性提供者的资金,执行交易逻辑。每个交易对合约都实现了 ERC20 标准,代表该交易对的流动性份额。

  3. 路由器合约(Router):提供用户友好的接口,计算交易或存款金额,并将资金转移到交易对合约。路由器合约处理复杂的交易路径,如多跳交易。

价格预言机

Uniswap V2 引入了强化的价格预言机,通过在每个区块开始时累积价格数据,使其他合约能够估算任意时间间隔内的时间加权平均价格(TWAP)。

价格累积器使用以下公式:

\[a_t = \sum_{i=1}^{t} p_i\]

其中,\(a_t\)是时间\(t\)时的价格累积值,\(p_i\)是时间\(i\)时的价格。

通过比较两个时间点的累积值,可以计算出该时间间隔内的 TWAP:

\[TWAP = \frac{a_{t_2} - a_{t_1}}{t_2 - t_1}\]

这种机制解决了 Uniswap V1 作为价格预言机容易被操纵的问题,因为操纵者需要在整个时间间隔内维持价格,而不仅仅是在单个时间点。

闪电兑换

Uniswap V2 引入了"闪电兑换"功能,允许用户在同一笔交易中先接收资产,使用它们,然后再支付或归还。这为套利、抵押品交换和其他复杂交易策略提供了便利。

闪电兑换的工作原理是:

  1. 用户调用交易对合约的swap函数,指定要接收的资产数量和要支付的资产数量。
  2. 交易对合约将资产转移给用户。
  3. 用户使用这些资产执行其他操作(如套利)。
  4. 在同一笔交易中,用户调用交易对合约的swap函数,将资产归还给交易对。

如果用户没有在同一笔交易中归还资产,交易将回滚,确保交易对的安全。

安全考虑

Uniswap V2 引入了多项安全改进:

  1. 重入锁:防止重入攻击,特别是对支持 ERC-777 钩子的代币。

  2. 非标准 ERC-20 处理:更好地处理不符合标准的 ERC-20 代币实现,如没有返回布尔值的transfer函数。

  3. 应急函数:提供sync()skim()函数,用于处理异常情况,如代币余额与储备量不一致。

无常损失

无常损失是指当 LP 提供流动性后,由于资产价格变化导致的潜在损失。当两种资产的价格比率发生变化时,LP 可能会遭受无常损失。

无常损失的计算公式为:

\[IL = 2 \cdot \sqrt{\frac{p_1}{p_0}} - \frac{p_1}{p_0} - 1\]

其中,\(IL\)是无常损失,\(p_0\)是初始价格比率,\(p_1\)是最终价格比率。

应用场景

Uniswap V2 广泛应用于以下场景:

  1. 代币交换:用户可以直接在 Uniswap 上交换任意 ERC20 代币,无需通过中心化交易所。

  2. 价格发现:Uniswap V2 的价格预言机为其他 DeFi 协议提供了可靠的价格数据。

  3. 流动性提供:用户可以通过提供流动性赚取交易费用。

  4. 套利:交易者可以利用不同交易所之间的价格差异进行套利。

  5. 闪电贷:开发者可以利用闪电兑换功能创建闪电贷,在同一笔交易中借入资产,使用它们,然后再归还。

与 V1 的比较

Uniswap V2 相比 V1 有以下主要改进:

  1. 任意 ERC20 代币对:V2 支持创建任意 ERC20 代币之间的交易对,而不仅限于 ETH。

  2. 价格预言机:V2 引入了强化的价格预言机,解决了 V1 作为价格预言机容易被操纵的问题。

  3. 闪电兑换:V2 引入了闪电兑换功能,为套利和复杂交易策略提供便利。

  4. 协议费用:V2 引入了可选的 0.05%协议费用,可以发送到指定的地址。

  5. 更好的安全措施:V2 引入了多项安全改进,如重入锁和非标准 ERC-20 处理。

参考资料

  1. Uniswap V2 白皮书
  2. Uniswap V2 技术文档
  3. Uniswap V2 GitHub 仓库
  4. Uniswap 官方文档