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 采用了模块化的合约架构,主要包括三个核心合约:
-
工厂合约(Factory):负责创建和管理交易对合约。每个交易对都有一个唯一的地址,由工厂合约通过确定性地址派生算法计算得出。
-
交易对合约(Pair):存储流动性提供者的资金,执行交易逻辑。每个交易对合约都实现了 ERC20 标准,代表该交易对的流动性份额。
-
路由器合约(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 引入了"闪电兑换"功能,允许用户在同一笔交易中先接收资产,使用它们,然后再支付或归还。这为套利、抵押品交换和其他复杂交易策略提供了便利。
闪电兑换的工作原理是:
- 用户调用交易对合约的
swap
函数,指定要接收的资产数量和要支付的资产数量。 - 交易对合约将资产转移给用户。
- 用户使用这些资产执行其他操作(如套利)。
- 在同一笔交易中,用户调用交易对合约的
swap
函数,将资产归还给交易对。
如果用户没有在同一笔交易中归还资产,交易将回滚,确保交易对的安全。
安全考虑
Uniswap V2 引入了多项安全改进:
-
重入锁:防止重入攻击,特别是对支持 ERC-777 钩子的代币。
-
非标准 ERC-20 处理:更好地处理不符合标准的 ERC-20 代币实现,如没有返回布尔值的
transfer
函数。 -
应急函数:提供
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 广泛应用于以下场景:
-
代币交换:用户可以直接在 Uniswap 上交换任意 ERC20 代币,无需通过中心化交易所。
-
价格发现:Uniswap V2 的价格预言机为其他 DeFi 协议提供了可靠的价格数据。
-
流动性提供:用户可以通过提供流动性赚取交易费用。
-
套利:交易者可以利用不同交易所之间的价格差异进行套利。
-
闪电贷:开发者可以利用闪电兑换功能创建闪电贷,在同一笔交易中借入资产,使用它们,然后再归还。
与 V1 的比较
Uniswap V2 相比 V1 有以下主要改进:
-
任意 ERC20 代币对:V2 支持创建任意 ERC20 代币之间的交易对,而不仅限于 ETH。
-
价格预言机:V2 引入了强化的价格预言机,解决了 V1 作为价格预言机容易被操纵的问题。
-
闪电兑换:V2 引入了闪电兑换功能,为套利和复杂交易策略提供便利。
-
协议费用:V2 引入了可选的 0.05%协议费用,可以发送到指定的地址。
-
更好的安全措施:V2 引入了多项安全改进,如重入锁和非标准 ERC-20 处理。
参考资料
- Uniswap V2 白皮书
- Uniswap V2 技术文档
- Uniswap V2 GitHub 仓库
- Uniswap 官方文档