Uniswap V1详解:它如何永远改变了DeFi

  • zealynx
  • 发布于 2025-10-28 22:31
  • 阅读 14

本文深入分析了 Uniswap V1 的架构、核心 AMM 模型(包括恒定乘积公式)、以及 Factory 和 Exchange 合约的设计。同时,着重讨论了V1版本中发现的安全漏洞,例如重入漏洞和价格操纵风险,以及它们对DeFi生态系统的影响。最后总结了Uniswap V1在DeFi发展中的重要地位,以及它为后续版本和整个行业提供的宝贵经验教训。

于 2018 年 11 月发布的 Uniswap v1 是一个具有开创性的协议,它向广大受众介绍了自动化做市商 (AMM)。它的构思理念是优先考虑简单性、抗审查性和去中心化,为链上代币交换建立了一种新的模式,消除了对传统订单簿和受信任的中间人的需求。虽然其设计优雅而有效,但其固有的局限性提供了重要的经验,为未来的版本铺平了道路。

本文是我们 AMM 安全系列文章的一部分:

核心架构和 AMM 模型

Uniswap v1 的架构有意地做到了极简,包含一个用 Vyper 编程语言编写的 双合约系统。这种设计选择强调了其对简单性和可审计性的承诺。

恒定乘积公式 (x⋅y=kx \cdot y = kx⋅y=k)

Uniswap v1 的核心是恒定乘积公式,x⋅y=kx \cdot y = kx⋅y=k,它定义了流动性池中两种资产的储备之间的关系。在此模型中:

  • xxx 代表池中一种资产的数量(例如,ETH)。
  • yyy 代表另一种资产的数量 (一种 ERC20 token)。
  • kkk 是“恒定乘积”或不变量,在交易期间必须保持恒定(费用前)。

此公式为资产价格创建了一个双曲线 粘合曲线。当交易者希望将数量为 Δx\Delta xΔx 的资产 X 交换为数量为 Δy\Delta yΔy 的资产 Y 时,新的储备必须满足公式 (x+Δx)⋅(y−Δy)=k(x + \Delta x) \cdot (y - \Delta y) = k(x+Δx)⋅(y−Δy)=k。该曲线的一个关键含义是,它渐近地接近轴,但永远不会接触到轴,这意味着理论上,一个池永远不会因为单独的交易而完全耗尽一种资产,从而提供“无限”的流动性。每笔交易收取 0.30% 的费用,并将其添加回储备金中,这会导致 kkk 的值随时间增加,从而奖励流动性提供者。

工厂和交易所合约设计

该协议的逻辑分为两种类型的智能合约:

  1. 工厂合约:该合约充当公共注册表和新交易所合约的无需许可的部署者。它的主要功能 createExchange 确保了每个唯一的 ERC20 token地址只能有一个规范的交易所合约。工厂维护从 token 地址查找交易所地址以及从交易所地址查找 token 地址的映射 (token_to_exchange, exchange_to_token),从而创建了一个可发现的链上系统。
  2. 交易所合约:每个 ERC20 token 都有自己的专用交易所合约,该合约持有该 token 和 ETH 的流动性池。这些合约实现了核心 AMM 逻辑,公开了用于流动性管理的功能 (addLiquidity, removeLiquidity) 和一套具有标准化命名约定的交换功能(例如,ethToTokenSwapInput, tokenToEthSwapOutput),以处理不同的交易方向以及输入还是输出数量是固定的。

ETH 作为桥梁资产

v1 中的一个决定性的架构选择是专门使用 ETH 作为所有 ERC20 token 的常用配对。没有直接的 ERC20 到 ERC20 的池。要在两种不同的 ERC20 token(例如,token A 到 token B)之间进行交易,交易将通过 ETH 在单个原子交易中进行路由:token A 在其各自的池中出售以换取 ETH,并且生成的 ETH 立即用于在其池中购买 token B。虽然这简化了路由,但效率低下,迫使交易者支付两笔单独的 0.30% 的交易费用并承担两次滑点。

流动性供应和 LP token

任何人都可以通过将等值的 ETH 和相应的 ERC20 token 存入交易所合约来成为流动性提供者 (LP)。作为回报,LP 收到了符合 ERC20 的“池 token”,这些“池 token”代表了他们在总流动性池中的相应份额。这些 LP token 可以随时销毁,以提取提供者在储备金中的份额,包括他们应计交易费用的部分。

安全分析:漏洞和审计

最好通过 Uniswap v1 的官方审计及其设计中固有的系统性风险来理解 Uniswap v1 的安全态势。这些发现成为了整个 DeFi 生态系统的基础经验。

ConsenSys Diligence 审计(2019 年 1 月)

ConsenSys Diligence 进行的官方安全审计是对 Vyper 代码库的全面审查。审计发现代码质量很高,但发现了一些设计层面的漏洞,这些漏洞构成了重大风险。它发现了七个未解决的问题,其中最严重的是“重大”重入漏洞和“中等”抢先交易问题。审计人员指出,该协议已经上线,资产超过 300,000 美元,这提供了一个天然的漏洞赏金,并表明当时没有已知的容易利用的漏洞。

重入漏洞(严重程度:高)

最关键的发现是可能允许攻击者耗尽流动性池的重入向量。

  • 机制:该漏洞不在 Uniswap 合约代码本身中,而是源于其与非标准 ERC20 token 的交互,例如那些符合 ERC-777 标准的 token。如果 token 合约在其 transferFrom 函数中包含一个外部调用(例如,回调到发送者),则攻击者可以在初始交易完成之前重新进入 Uniswap 交易所合约的交换函数。这种重新进入将在池中的 token 余额已更新但相应的 ETH 尚未转出之前发生,从而暂时破坏 x⋅y=kx \cdot y = kx⋅y=k 不变量。
  • 利用路径:攻击者可以发起 tokenToEth 交换。在 token 的 transferFrom 回调创建的重入窗口期间,池相对于其 token 余额将具有人为的高 ETH 余额。然后,攻击者可以在重入调用中执行第二次交换,从而以非常优惠的价格耗尽膨胀的 ETH 储备。
  • 补救措施:建议的修复方法是在所有交易函数中添加互斥锁或重入保护,以防止此类递归调用。此漏洞突出了一个关键的设计权衡:v1 对绝对无需许可的承诺在外部、不受信任的合约的行为上创建了一个安全依赖关系。该协议的安全性不是独立的。

抢先交易和滑点(中等严重程度)

审计还发现了一个与抢先交易相关的中等严重程度问题,这不是合约错误,而是官方前端中的参数化选择。

  • 机制:抢先交易攻击利用了公共 内存池的透明度。审计指出,Uniswap 前端的默认 ALLOWED_SLIPPAGE 常量设置为慷慨的 2.5%。这为抢先交易者创造了有保证的利润空间,他们可以看到用户待处理的交易,以更高的 gas 费复制它以首先执行,并将价格推高至用户的 2.5%,从而提取该价值。
  • 影响:这一发现证明了链上协议安全性和链下客户端实现之间的关键联系。协议本身的行为符合设计,但客户端设置为其用户创建了一个系统性漏洞。

固有协议风险:价格预言机操纵

Uniswap v1 中最显著的系统性缺陷是其不适合作为链上价格预言机。

  • 向量:v1 池中的现货价格仅计算为其储备金的比率 (y/xy/xy/x)。此价格可以在单个原子交易中以微不足道且廉价的方式进行操纵。攻击者可以使用 闪电贷执行大型交易,从而暂时扭曲储备金以及价格。然后,他们可以调用一个受害者合约,该合约依赖于此被操纵的价格进行关键操作(例如,确定抵押品价值),最后,逆转其初始交易以恢复原始价格,所有这些都以最低的成本完成。
  • 现实世界的影响:这不是一个理论风险。多个使用 Uniswap v1 作为价格提要的 DeFi 协议,例如 bZx 和 Cheese Bank,通过这种精确的机制被利用,导致了巨大的经济损失。此缺陷清楚地表明,来自 AMM 的简单现货价格不是其他智能合约的安全价格来源。

结论

Uniswap v1 是去中心化金融领域的一项具有里程碑意义的成就。通过以优雅而简单的设计成功地向世界介绍 AMM,它证明了复杂的金融交易可以在没有中介的情况下在链上运行。然而,其架构选择——以 ETH 为中心的路由、不安全现货价格预言机以及其对非标准 token 重入的敏感性——为整个生态系统提供了关键的基础经验。它不仅仅是一个协议;它是一个概念验证,催化了 DeFi 的发展,为后续更强大、更高效的系统奠定了基础。

保持联系

在 Zealynx,我们深入了解像 Uniswap 这样的协议所开创的基础 AMM 设计、架构权衡和安全漏洞。无论你是构建与 AMM 集成的协议、审计复杂的 DeFi 系统,还是需要智能合约安全和经济风险方面的专家指导,我们的团队都随时为你提供帮助——请联系我们

想要通过更多像这样的深入分析保持领先地位吗?订阅我们的新闻通讯 并确保你不会错过未来的见解。

常见问题解答:Uniswap v1:核心机制

  1. Uniswap v1 中的恒定乘积公式是什么?

恒定乘积公式 (x⋅y=kx \cdot y = kx⋅y=k) 是 Uniswap v1 的数学核心。它规定,流动性池中两种资产(x 和 y)的储备的乘积在交易期间必须保持恒定 (k)。这创建了一条双曲线价格曲线,该曲线允许自动、无需许可的 token 交换,而无需传统的订单簿,理论上提供了无限的流动性,因为一个池永远不会因为单独的交易而完全耗尽一种资产。

  1. 为什么 Uniswap v1 被认为是不安全的价格预言机?

它的价格被计算为池储备的简单比率 (y/xy/xy/x)。此“现货价格”容易在单个交易中受到瞬时操纵。攻击者可以使用 闪电贷执行大规模交易,暂时扭曲价格,触发另一个协议中依赖此虚假价格的函数,然后逆转交易以偿还贷款,所有这些都以最低的成本完成。这导致了其他 DeFi 协议中的多个备受瞩目的漏洞利用。

  1. Uniswap v1 中的“高”严重性重入漏洞是什么?

该漏洞不在 Uniswap 自己的代码中,而在于其与非标准 ERC20 token 的交互,这些 token 的传输函数中具有回调(例如,ERC-777)。攻击者可以发起交换,并且在 token 传输期间,token 合约会“回调”到攻击者的合约。这允许攻击者重新进入 Uniswap 合约并在第一个合约完成之前执行另一个交易,从而利用暂时不一致的状态来耗尽池的资金。

  1. 为什么 Uniswap v1 专门使用 ETH 作为桥梁资产?

使用 ETH 作为所有 ERC20 token 的强制性常见配对极大地简化了协议的设计和路由逻辑,因为任何 token 都可以通过两步路径(Token A -> ETH -> Token B)与其他 token 进行交易。但是,这是低效的,迫使交易者支付双倍的交易费用(两次 0.3%),并且与直接的 token 到 token 池相比,会产生更高的滑点。

  • 原文链接: zealynx.io/blogs/uniswap...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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