目录
引言
Uniswap V2 是去中心化金融(DeFi)中最经典、最具代表性的自动化做市商(AMM)协议之一。它通过智能合约在以太坊上实现了无需信任的代币兑换和流动性提供,核心依赖简单优雅的恒定乘积做市公式(x * y = k)。本篇内容将深入解析 Uniswap V2 的核心合约,包括工厂合约、Pair 合约、LP Token 合约及路由与工具库,并结合核心流程帮助理解 Uniswap V2 是如何实现去中心化交易与流动性管理的。
一、Uniswap V2 是什么
Uniswap V2 是一个基于以太坊的自动化做市商(AMM),它允许用户无需中心化订单簿,就能方便地进行 ERC20 代币之间的兑换。它的核心是通过一个恒定乘积做市公式(x * y = k)保持流动性池内的平衡。
二、Uniswap V2 核心主要由以下几个合约组成:
UniswapV2Factory.sol
:工厂合约,用来创建和管理所有的 Pair(交易对合约)。
UniswapV2Pair.sol
:每个交易对对应的流动性池合约,实现 swap、add/remove liquidity、跟踪储备等逻辑。
UniswapV2ERC20.sol
:实现了 LP Token(流动性提供者凭证),本质是一个 ERC20。
UniswapV2Library.sol
和 UniswapV2Router02.sol
:用于路由和方便用户交互(这两个通常在 peripheral 仓库里)。
三、核心流程详解
1️⃣ 创建交易对(Pair)
用户调用 UniswapV2Factory.createPair(tokenA, tokenB)
工厂合约会部署一个新的UniswapV2Pair
合约,并存储到映射里:getPair[tokenA][tokenB]
,新的 Pair 合约就作为该交易对的流动性池。
2️⃣ 添加流动性
用户把 tokenA 和 tokenB 转入 Pair 合约
Pair 合约根据当前储备情况决定要铸造多少 LP Token 给流动性提供者
LP Token 是由 UniswapV2ERC20
合约实现的,代表用户在池中的份额
3️⃣ Swap(交易)
用户想用 tokenA 换 tokenB,会调用 Pair 合约的 swap 函数
核心逻辑:用户先把 tokenA 转到 Pair 合约,合约内部会验证 swap 后的新储备值仍然满足 x * y ≥ k,然后给用户转出相应的 tokenB
为了防止有人利用合约,Uniswap 要求必须在一次交易里保证恒定乘积(k)的条件
会收取千分之三(0.3%)的手续费,手续费留在池子里,自动奖励 LP
4️⃣ 移除流动性
用户销毁 LP Token,合约把等值的 tokenA 和 tokenB 转还给用户。
四、重要合约源码亮点
UniswapV2Factory.sol
- 管理所有的交易对
- 部署新的交易对(使用 create2 保证地址可预测)
- 保存交易对映射
UniswapV2Pair.sol
Uniswap V2 的最核心:
- 储备值:reserve0 和 reserve1
- swap 函数
- mint / burn 函数(添加/移除流动性)
- 更新储备
- 定价累积器(用于预言机)
核心恒等式:
(uint balance0Adjusted) * (uint balance1Adjusted) >= uint(_reserve0) * uint(_reserve1);
UniswapV2ERC20.sol
- 让流动性提供者获得 LP Token
- 符合 ERC20 标准
Router & Library
- Router 合约(UniswapV2Router02)负责帮助用户和多个 Pair 合约打交道,比如路径交换、多 hop 交易
- Library 里有计算最优兑换路径等常用工具
总结
Uniswap V2 的设计以极简著称,却解决了复杂的去中心化交易需求:
- 工厂合约 统一管理所有交易对
- Pair 合约 作为每个流动性池的核心,负责交易、添加/移除流动性并保持储备平衡
- LP Token 合约 为流动性提供者提供标准化的权益凭证
- Router 与 Library 简化用户与多个交易对的交互
恒定乘积公式、无需许可的交易对创建、自动奖励机制等创新,奠定了 Uniswap 在 DeFi 领域的核心地位,也成为后续众多 AMM 协议的灵感来源。