本文深入探讨了 Uniswap V2 版本,包括其核心架构、主要功能(如 ERC20-to-ERC20 直接交易对、核心/外围架构、抗操纵的 TWAP 预言机、闪电互换和协议费用机制)、安全性分析、开发者集成指南以及分叉时的安全注意事项。文章强调了 V2 版本在改进 AMM 方面的关键作用。
于 2020 年 5 月启动的 Uniswap v2 是 Uniswap 协议 的一次重大演变,该协议开启了一切,解决了其前身的主要缺点。它引入了架构改进和新功能,提高了效率、安全性及可组合性,巩固了 Uniswap 作为“DeFi 乐高”——更广泛的去中心化金融生态系统的核心组成部分——的地位。通过超越概念验证,v2 确立了自己作为稳健且可靠的金融基础设施的一部分的地位。
Uniswap v2 通过几项主要创新改进了自动化做市商 (AMM) 模型,从最小的实验转变为专为广泛集成而设计的成熟协议。
v2 中最具影响力的变化是引入了任意的 ERC20 到 ERC20 的流动性池。这消除了 v1 的强制通过 ETH 路由的特性,这迫使交易者为任何 token 到 token 的互换支付两组费用并承担两次滑点。这样做的好处是双重的:
V2 在“核心”和“外围”合约之间引入了一个至关重要的架构分离,这种设计模式此后已成为 DeFi 的标准。
UniswapV2Factory 和 UniswapV2Pair 是最小的、不可变的且高度安全的。他们的职责是创建交易对、持有流动性并执行 $x⋅y=k$不变量。这些合约的攻击面经过刻意最小化,以保护它们所保护的资产。UniswapV2Router02 为与核心交互提供了一个用户友好且安全的界面。它处理复杂的逻辑,例如计算跨多个交易对的交易路径、将 ETH 包装和解包为 WETH,以及强制执行用户指定的安全检查,例如滑点容差和截止日期。由于外围合约是无状态的并且不持有资金,因此它们可以随着时间的推移进行更新或替换,而无需迁移流动性。这种风险的模块化允许更大的灵活性和更快的创新,而不会影响核心协议的安全性。为了解决 v1 的关键 预言机操纵问题,Uniswap v2 将弹性的时间加权平均价格 (TWAP) 预言机直接集成到交易对合约中。每个交易对不是依赖于瞬时(且易于操纵的)现货价格,而是在每个区块开始时累积现货价格,并根据自上次更新以来经过的时间进行加权。
其他智能合约可以查询两个时间点的累积价格数据,并除以经过的时间来计算安全的 TWAP。在有意义的时间窗口(例如 30 分钟)内操纵 TWAP 的成本过高,因为攻击者必须维持不利的价格并与套利者连续多个区块作斗争。这使 Uniswap 从一个有风险的价格来源转变为许多其他 DeFi 协议的基础预言机。
V2 引入了 闪电互换,这是一种原始方法,允许用户以零前期成本从 Uniswap 池中接收任意数量的 ERC20 token。用户可以执行任意链上操作,并且在原子交易结束时,可以用相应的交易对 token 支付 token 的费用,或者返回借来的 token。如果债务没有结清,则整个交易将回滚。这通过消除对预先存在资本的需求,释放了用于套利和清算的高效资本策略。
V2 制定了一种协议治理机制来赚取收入。工厂中硬编码的费用开关允许指定的地址启用协议费用,该费用将 0.30% 交易费用的 0.05%(总费用的六分之一)转移到指定的地址。这为 Uniswap DAO 资助生态系统开发和其他计划奠定了基础。
Uniswap v2 的安全流程比 v1 成熟得多,涉及耗时的审计和形式验证流程。已识别的漏洞更加微妙,反映了协议复杂性和稳健性的提高。
在 2020 年 1 月至 4 月期间,一个工程师团队进行了广泛的安全审查,包括核心合约的形式验证、手动代码审查和数值误差分析。审计的范围涵盖了核心和外围合约。
最终报告中未发现核心合约中存在严重或高危问题。它标记了两个与集成和极端情况相关的中等严重程度问题:
审计和形式验证过程的总体积极成果增强了对 v2 核心合约安全性的信心,这些合约此后已保护了数百亿美元的资金。
虽然 v2 协议本身是安全的,但其在以太坊 mempool 的对抗环境中的运行导致了一种普遍的最大可提取价值 (MEV),被称为三明治攻击。这不是 Uniswap 代码中的漏洞,而是交易在透明、异步区块链上的固有风险。
与 Uniswap v2 的集成已成为 DeFi 应用程序的标准做法,这在很大程度上归功于其强大的架构和路由器的便利性。
UniswapV2Router02 交互。它为互换和流动性管理提供了一个安全且节省 gas 的界面,从而抽象了底层复杂性。与交易对合约的直接交互用于闪电互换等高级用例,并且需要手动安全检查。swapExactETHForTokens),但集成合约必须使用正确的 WETH 地址。CREATE2 来部署交易对,从而使地址具有确定性。UniswapV2Library.pairFor 从工厂和 token 地址计算交易对地址。swap 或 mint 之前将 token 转账到交易对。该交易对通过检查余额增量来推断金额,从而提高了 gas 效率和安全性。amountOutMin / amountInMax,以防止 MEV。使用 deadline 以避免稍后以不利价格执行的过时交易。uniswapV2Call 以执行预期操作,并确保在同一交易中偿还借入的金额加上 0.3% 的费用。防范 重入攻击。迄今为止,Uniswap v2 是 DeFi 历史上分叉最多的协议之一。其优雅的设计、可靠的安全记录和相对简单性使其成为新项目的一个有吸引力的基础。然而,这种明显的简单性掩盖了许多微妙但至关重要的安全机制。许多分叉通过引入看似微小的更改而违反了核心不变量,从而导致了灾难性的失败。本节为考虑分叉该协议的开发人员提供了一个以安全为中心的指南。
Uniswap v2 分叉中的大多数漏洞源于对核心 UniswapV2Pair 合约的修改。最常见的错误包括:
price{0,1}CumulativeLast 值。修改 _update 函数的逻辑或时序可能会破坏预言机,使其容易受到操纵,并使其对于任何依赖它的协议都不安全。MINIMUM_LIQUIDITY 机制会销毁第一小批 LP token,是对抢先初始流动性提供者的有意防御措施。一些分叉删除了此逻辑以简化代码,从而无意中将第一个 LP 暴露于其初始存款被盗的风险。在部署 Uniswap v2 分叉之前,将其视为一个全新的协议并应用严格的安全标准。
UniswapV2Pair.sol,除非绝对必要。它的逻辑经过高度优化和实战测试。如果需要新功能,请尽可能在外围(例如,新的路由器或包装合约)中实现它。严格测试核心不变量:如果你必须修改核心合约,那么你的首要任务是证明在所有函数中都保持 $x⋅y=k$ 不变量。这需要广泛的测试,包括:
_update 中处理 priceCumulativeLast 累积的逻辑。确保此更新发生在事务中任何储备金更改之前,并由区块时间戳正确加权。swap、mint 或 burn 等核心函数中。在路由器或单独的合约中隔离此类调用,这些合约仅在核心状态更改已完成并提交后才与交易对合约交互。Uniswap v2 标志着链上 AMM 的显着成熟。通过解决其前身的主要架构和安全缺陷,它引入了基础原语,如直接 ERC20 到 ERC20 交易对、抗操纵的 TWAP 预言机和核心/外围设计模式,这些原语此后已成为行业标准。虽然它的资本效率已被 v3 超过,并且可定制性已被 v4 的愿景超越,但 Uniswap v2 仍然是经过实战测试且高度可靠的 DeFi 基础设施。它对简单性和安全性的有意权衡使其成为无数需要稳健、可预测且易于集成的流动性层的协议的持久且首选项。
在 Zealynx,我们深入了解 AMM 复杂的设计、核心/外围架构以及 Uniswap 等协议的安全挑战。无论你是构建新的 DeFi 协议、审计现有协议,还是需要关于预言机安全、MEV 缓解和路由器集成的专家指导,我们的团队都随时为你提供帮助——联系我们。
想要通过更深入的分析保持领先地位吗?订阅我们的新闻通讯,确保你不会错过未来的见解。
1. Uniswap v2 主要在哪些方面改进了 v1 的架构?
Uniswap v2 的主要增强功能是引入了直接的 ERC20 到 ERC20 交易对,这消除了通过 ETH 路由所有交易的低效且成本高昂的要求,并实施了核心/外围架构,该架构将不可变的、持有资金的合约与可升级的、面向用户的路由合约分开,以实现风险的模块化。
2. Uniswap v2 如何提供抗操纵的价格 Oracle?
它将时间加权平均价格 (TWAP) 预言机直接集成到每个交易对合约中。合约不是使用容易被操纵的现货价格,而是随着时间的推移累积价格,并根据每个价格的持续时间进行加权。这使得攻击者几乎不可能在任何有意义的时间窗口内显着改变 Oracle 的价格。
3. 什么是三明治攻击,它与 Uniswap v2 有什么关系?
三明治攻击是最大可提取价值 (MEV) 的一种常见形式,在这种攻击中,攻击者会观察到 mempool 中等待处理的用户互换。攻击者通过购买相同的资产来抢先受害者,以抬高价格,允许受害者的交易以更差的价格执行,然后通过出售资产来抢先他们以获取利润。这是透明区块链环境的固有风险,而不是协议本身的错误。
4. Uniswap v2 中的闪电互换是什么?
闪电互换允许用户以零前期成本借用任意数量的资产,将其用于任意操作(如套利),然后在单笔原子交易中,使用其他交易对资产偿还贷款或返回原始资产,外加 0.3% 的费用。如果在交易结束时尚未结清债务,则整个操作将回滚。
5. 为什么开发人员在 Uniswap v2 中与 WETH 而不是本机 ETH 交互?
Uniswap v2 核心合约仅与 ERC20 token 配合使用,以维护标准化的界面。WETH(Wrapped ETH)是符合 ERC20 标准的 ETH 版本。虽然面向用户的路由合约自动处理包装和解包装以方便用户使用,但智能合约集成必须直接与 WETH token 地址交互。
6. 为什么标准的 Uniswap v2 集成可能会因某些 token 而失败?
标准路由器与按转账收费或通货紧缩 token 不兼容。其逻辑假定发送的 token 数量与收到的数量相同。对于在转账时收取费用的 token,此假设不成立,导致互换失败,因为交易对合约收到的 token 少于预期。处理这些 token 需要自定义集成逻辑。
- 原文链接: zealynx.io/blogs/uniswap...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!