UniswapV1 协议分析

UniswapV1协议技术分析概述UniswapV1是首个成功实现自动化做市商(AMM)的去中心化交易所协议,于2018年上线。它通过恒定乘积公式彻底改变了DeFi交易模式,为后续所有AMM协议奠定了基础。白皮书https://hackmd.io/C-DvwDSfSxuh

Uniswap V1 协议技术分析

概述

Uniswap V1 是首个成功实现自动化做市商(AMM)的去中心化交易所协议,于 2018 年上线。它通过恒定乘积公式彻底改变了 DeFi 交易模式,为后续所有 AMM 协议奠定了基础。

白皮书

https://hackmd.io/C-DvwDSfSxuh-Gd4WKE_ig

源码

https://github.com/Uniswap/v1-contracts

核心机制

恒定乘积公式

Uniswap V1 的核心是恒定乘积公式:x × y = k

  • x:ETH 储备量
  • y:Token 储备量
  • k:恒定常数
# 价格计算函数
def getInputPrice(input_amount: uint256, input_reserve: uint256, output_reserve: uint256) -> uint256:
    input_amount_with_fee: uint256 = input_amount * 997  # 扣除 0.3% 手续费
    numerator: uint256 = input_amount_with_fee * output_reserve
    denominator: uint256 = (input_reserve * 1000) + input_amount_with_fee
    return numerator / denominator

价格发现机制

  • 自动定价:价格由储备比例决定,无需人工报价
  • 滑点机制:交易量越大,价格变化越大
  • 套利校正:价格偏差通过套利者自动修正

架构设计

工厂模式

# Factory 合约
contract Factory():
    exchangeTemplate: public(address)           # 交易所模板
    token_to_exchange: address[address]         # 代币到交易所映射

def createExchange(token: address) -> address:
    exchange = create_with_code_of(self.exchangeTemplate)
    Exchange(exchange).setup(token)
    return exchange

设计优势:

  • 统一标准:所有交易所使用相同模板
  • 节省成本:通过克隆减少 95% 部署费用
  • 防重复:每个代币只能创建一个交易所

合约结构

每个 Exchange 合约承担双重角色:

  1. 交易所:执行 ETH ↔ Token 交易
  2. ERC20 代币:发行流动性代币(UNI-V1)

交易机制

支持的交易类型

交易方向 精确输入 精确输出 转账版本
ETH → Token ethToTokenSwapInput ethToTokenSwapOutput ethToTokenTransferInput
Token → ETH tokenToEthSwapInput tokenToEthSwapOutput tokenToEthTransferInput
Token → Token tokenToTokenSwapInput tokenToTokenSwapOutput tokenToTokenTransferInput

Token ↔ Token 交易

由于 V1 只支持 ETH 作为基础货币,Token ↔ Token 交易需要两步完成:

Token A → ETH → Token B
def tokenToTokenInput(...):
    # 第一步:Token A → ETH
    eth_bought = self.getInputPrice(tokens_sold, token_reserve, eth_reserve)

    # 第二步:ETH → Token B
    tokens_bought = Exchange(target_exchange).ethToTokenTransferInput(
        min_tokens, deadline, recipient, value=eth_bought
    )

流动性机制

添加流动性

def addLiquidity(min_liquidity: uint256, max_tokens: uint256, deadline: timestamp) -> uint256:
    if total_liquidity > 0:
        # 后续添加:必须保持比例
        token_amount = msg.value * token_reserve / eth_reserve + 1
        liquidity_minted = msg.value * total_liquidity / eth_reserve
    else:
        # 首次添加:用户决定初始价格
        token_amount = max_tokens
        liquidity_minted = as_unitless_number(self.balance)

移除流动性

def removeLiquidity(amount: uint256, min_eth: uint256, min_tokens: uint256, deadline: timestamp):
    # 按比例赎回
    eth_amount = amount * self.balance / total_liquidity
    token_amount = amount * token_reserve / total_liquidity

    # 销毁 LP 代币,返还资产
    self.totalSupply -= amount
    send(msg.sender, eth_amount)
    self.token.transfer(msg.sender, token_amount)

流动性挖矿机制

  • 手续费累积:每笔交易的 0.3% 手续费直接留在池中
  • 价值增长:LP 代币总量不变,但池中资产增加
  • 复利效应:手续费成为下次交易的基础,产生复利

手续费设计

费率结构

  • 交易手续费:0.3%
  • 分配方式:100% 奖励给流动性提供者
  • 累积方式:手续费直接增加池中储备,无需显式分发

实现机制

# 实际参与交易的金额只有 99.7%
input_amount_with_fee = input_amount * 997  # 997/1000 = 99.7%

# 0.3% 的手续费自动留在池中
# LP 代币持有者在赎回时自动获得增值部分

安全机制

滑点保护

  • min_tokens:保证最小输出
  • max_tokens:限制最大输入
  • deadline:防止延迟执行

精度保护

# 防止除法精度损失
token_amount = msg.value * token_reserve / eth_reserve + 1

地址验证

assert recipient != self and recipient != ZERO_ADDRESS

价格查询功能

只读函数

@constant
def getEthToTokenInputPrice(eth_sold: uint256) -> uint256:
    return self.getInputPrice(eth_sold, as_unitless_number(self.balance), token_reserve)

@constant  
def getTokenToEthInputPrice(tokens_sold: uint256) -> uint256:
    return self.getInputPrice(tokens_sold, token_reserve, as_unitless_number(self.balance))

这些函数用于:

  • 前端界面显示预估价格
  • 智能合约集成
  • 套利机器人计算

ERC20 兼容性

每个 Exchange 合约完全实现 ERC20 标准:

# 标准 ERC20 函数
def transfer(_to: address, _value: uint256) -> bool
def transferFrom(_from: address, _to: address, _value: uint256) -> bool  
def approve(_spender: address, _value: uint256) -> bool
def balanceOf(_owner: address) -> uint256
def allowance(_owner: address, _spender: address) -> uint256

这使得 LP 代币可以:

  • 在二级市场交易
  • 作为其他协议的抵押品
  • 集成到各种 DeFi 应用中

经济模型

套利机制

当 Uniswap 价格偏离外部市场时,套利者会:

  1. 在价格较低的平台买入
  2. 在价格较高的平台卖出
  3. 获取价差收益
  4. 推动价格回归均衡

无常损失

流动性提供者面临的主要风险:

  • 当资产价格比例变化时,LP 价值可能低于直接持有
  • 可通过交易手续费收入部分抵消
  • 价格波动越大,无常损失越明显

V1 的局限性

技术限制

  1. ETH 中心化:所有交易对必须包含 ETH
  2. 双重滑点:Token ↔ Token 交易效率低
  3. 资本效率低:大部分流动性处于休眠状态
  4. 无原生稳定币对:稳定币交易也需要通过 ETH

扩展性问题

  • 无法支持多资产池
  • 缺乏集中流动性机制
  • 无法自定义手续费率

历史意义与影响

技术创新

  • 首次实现可行的 AMM 机制
  • 证明了算法做市的可行性
  • 开创了"可编程流动性"概念

生态影响

  • 催生了整个 AMM 生态系统
  • 为 V2、V3 的发展奠定基础
  • 影响了 Sushiswap、Balancer 等协议设计

市场表现

  • 峰值 TVL 超过 10 亿美元
  • 日交易量最高达数亿美元
  • 成功运行超过 5 年无重大安全事故

总结

Uniswap V1 以极简的设计实现了革命性的创新:

核心优势:

  • 恒定乘积公式的数学优雅性
  • 无需许可的流动性提供
  • 自动化的价格发现机制
  • 完整的 ERC20 兼容性

关键创新:

  • 将复杂的做市商功能算法化
  • 通过经济激励实现去中心化
  • 创造了"流动性即代币"的模式

虽然 V1 存在明显局限,但它成功验证了 AMM 模式的可行性,为整个 DeFi 生态的爆发式增长奠定了基础。其简洁而强大的设计理念至今仍在影响着新一代 DeFi 协议的发展。

  • 原创
  • 学分: 5
  • 分类: Uniswap
  • 标签:
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
simimassss
simimassss
江湖只有他的大名,没有他的介绍。