OpenZeppelin 安全分析:UniswapX

UniswapX 是一种链上交易协议,旨在通过其竞争性的 filler 模式和荷兰式拍卖来优化交易,确保用户获得最具竞争力的价格。该协议通过无状态合约、不变量验证和竞争性的 filler 市场来降低 MEV 风险,从而保障用户安全。

作者:Alireza Arjmand, Felix Wegener 和 Pedro Aisenson 在不断发展的链上交易领域,UniswapX 以其独特的设计脱颖而出,挑战着传统的交易和流动性聚合模式。但是,它是如何通过其基于拍卖的系统在优化交易价格的同时,确保用户安全的呢? 通过我们与 Uniswap 团队的合作,我们全面检查了 UniswapX 的代码库。我们的审计揭示了关键的安全组件:最小化攻击向量的无状态合约、验证 swap 不变性的 reactors,以及降低 MEV 风险的竞争性 filler 市场。我们在这里提供详细的分析。

UniswapX 术语
Swappers: 系统的用户,他们在特定条件下发送 swap 请求<br>Fillers: 系统中的匹配者,他们竞争提交链上 swap 请求,并触发 order 在相应的 reactor 上的执行<br>Reactor: 结算 order 的链上合约。这些是 Fillers 发送 order 的端点,并在此处检查 swap 是否符合 swapper 指定的条件。<br>Orders: 一组输入 token 和输出 token,定义了 swapper 请求的 swap。所有信息都会被捆绑并发送给 fillers<br>Input token: 请求进行 swap 的 token。<br>Output token: swapper 想要进行 swap 的 token。

背景和方向

自从链上交易诞生以来,生态系统经历了重大变革,以应对固有的挑战并优化用户体验。最初,Uniswap 开创了自动做市商 (AMM) 模型,交易是针对流动性池执行的。虽然具有革命性意义,但这种模型存在一个障碍 —— 流动性分散在多个池中。这种分散通常导致交易者的价格效率低下,尤其是在资本化较低的池中。

认识到这些挑战,链上交易演变的下一阶段带来了去中心化交易所 (DEX) 聚合器。这些聚合器通过一组精选的流动性来源路由交易,利用复杂的算法来确定最高效的交易路径。然而,即使这种方法也有其局限性,因为它依赖于预定义的标准和预定义流动性来源的约束。

UniswapX 的出现是为了应对这些挑战。UniswapX 没有依赖静态流动性来源或确定性路由算法,而是引入了一种更动态和更具竞争力的模式。通过其竞争性的 filler 模型和荷兰式拍卖,它将交易执行和路由的责任委托给了 fillers。这确保了 swappers 始终获得最具竞争力的价格,而与流动性来源无关。通过赋予 fillers 自主权来确定最佳路线,UniswapX 建立了一个既不依赖流动性也不依赖路线的框架,预示着链上交易效率和以用户为中心的新时代。

UniswapX 允许用户交换其链上资产,而无需承担 gas 费用,同时还可以保护他们免受 MEV 提取。在这个系统中,用户(称为“swappers”)将签名请求发送到“fillers”网络, fillers 负责在区块链上履行和执行 swappers 的请求。每个 order 的结算都在链上发生,但是流动性路由完全委托给 filler,只要它们满足 swapper 概述的初始条件即可。

这种设计从根本上改变了交易模式。UniswapX 没有采用传统的通过最大的流动性池或一种路由算法来确定最优惠价格的方法,而是引入了一个竞争性框架。在这里,“填补者 (fillers)”相互竞争以提供最佳产出。路由的责任完全由 fillers 承担,从而使他们有权使用他们认为合适的任何方法来完成 order。 这种竞争动态通过使用荷兰式拍卖反应器进一步巩固,确保 swappers 始终获得最佳交易价格,并综合考虑费用、MEV 和滑点。

虽然 UniswapX 拥有精细的架构设计,但本文深入探讨了系统中固有的安全原则,以确保其稳健性。我们还将深入研究用户流程,重点介绍防止 MEV 提取的保障措施。

UniswapX 协议概述

为了充分理解 UniswapX 的安全方法,我们首先必须了解协议的总体情况。作为参考,你可以参考 Uniswap 文档 以获取更多信息(下图的参考)。

(1) 在 swappers 可以向 fillers 发送请求之前,他们必须授予 `Permit2` 合约足够的授权,以允许其用于目标 ERC20。这使他们可以在不发送任何交易的情况下转移他们想要交换的资产。

(2) 启用 `Permit2` 后,用户现在可以创建 `orders`,他们声明他们想交换的单个 token,这被称为 `input token`,以及他们想要接收的任意数量的 token,这被称为 `output tokens`。Swappers 创建这些 order 并对其进行签名,作为 swap 请求,然后将其分派到 fillers 的内部网络。到目前为止,swappers 可以选择创建三种不同类型的 order,其中包括:

  • 限价单: 一个简单的 order,swapper 在其中确定每个涉及 token 的特定输入和输出数量。
  • 荷兰式订单: 在荷兰式 order 中,价格从开始时间到结束时间以稳定的速度变化。这种结构旨在随着时间的推移使 swap 对 fillers 更有利,并且第一个结算 order 的 filler 将成为拍卖的赢家。这种设置还在 fillers 之间引入了一种竞争意识,因为每个 filler 都有动力尽快结算 order 订单,因为对于他们而言,由于 fillers 之间的竞争,它已经有足够的利润。
  • 独家荷兰式订单: 独家荷兰式订单与荷兰式订单相同,但它在公开访问之前,授予特定 filler 在预定时间内拥有独家权。Uniswap 团队为报价请求 (RFQ) 托管了一个公共网络,swappers 可以在发送请求之前从 fillers 获取报价,这样他们就可以从 filler 中选择最优惠的价格,并在 `order` 变为普通荷兰式订单之前,在一段时间内将其设为他们的专属订单。

(3) Fillers 可以访问 order 的 mempool,并且可以选择他们想要填充的 order。为此,他们将选择的请求作为交易转发到称为“reactor”的链上合约。每个 reactor 的主要责任是在链上正确结算 order。每种 `order` 都有一个单独的 reactor,swappers 必须在签名之前将目标 reactor 的地址嵌入其请求中。此时,reactor 通过转入所有 `input` 资产并将其所有 `output` token 发送到其接收者来完成 swap。

UniswapX 安全原则

在我们与 Uniswap 团队的合作过程中,我们全面检查并审查了整个 UniswapX 代码库,查明了建立协议安全性的关键安全措施。在本节中,我们将分享我们对 UniswapX 协议安全框架的见解,强调作为协议基础的主要安全因素。

无状态合约: 通过 UniswapX 协议完成的所有 swap 都使用 `Permit2` 功能,这意味着用户可以使用包含在 order 中的签名来转移资金。考虑到这一点,UniswapX 合约的设计几乎是无状态的,这导致了以下几个条件:

  • 由于没有存储状态,因此合约不会进入意外状态,并且每个交易都仅基于其输入执行。这导致攻击面显着减少。
  • 无状态功能本质上更加简单,它们更容易测试,因此更容易确保其正确性。

不变性验证: 每个 reactor 都有一个主要职责,即确保 `input` 和 `output` token 得到正确及时地转移。reactor 提供的主要功能是函数 `execute`,它有两个阶段:

  • 准备: 在这里处理 swapper 应该支付的所有费用,然后控制权转移给 filler。
  • 填充: 将所有 `output` token 转移给他们的接收者。这应该是整个函数中发生的最后一件事。

无论在 `准备` 和 `填充` 之间发生什么,UniswapX 都会通过在函数的开始和结束时检查以下两个不变量来确保该功能正常工作。

防止 MEV: 通过使 filler 市场具有竞争性并可供许多实体访问,UniswapX 可以确保 swappers 享受尽可能优惠的价格。在价格随时间降低的荷兰式拍卖中,如果一个 filler 在接受交易之前等待的时间过长,其他 fillers 可能会介入并为自己抓住机会。

值得注意的是,如果 MEV 使填充可行,则经验丰富的 filler 可以快速领先于竞争对手接受报价。这种动态确保最终价格考虑了任何潜在的 MEV,从而为 swappers 提供了最优惠的价格。通过这种方式,MEV 和价格影响的概念被一起处理并最小化。这还包括由 fillers 支付的 gas 费,这些费用将在他们决定以特定价格填充或不填充 order 时予以考虑。

鉴于执行 swap 的竞争性质,只有最初的 filler 设法抓住机会,导致后续尝试失败。为了防止与不成功的交易相关的成本,fillers 可以使用 Flashbots 等服务,该服务仅在其区块中包含成功的交易。使用 Flashbots 还可以通过保护其交易免受抢先交易来帮助 fillers。

结论

在对 UniswapX 协议的分析中,我们调查了集成到其系统中的安全原则。该协议解决了与链上交易相关的各种挑战,同时强调了用户安全。

这些努力有助于 web3 环境的持续发展。为了全面了解 UniswapX 协议和我们的完整安全审查,我们建议参考详细的 [审计报告 ]。此外,我们的博客还提供了来自其他协议审计的见解,展示了我们在去中心化空间中对透明度和安全的承诺。

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

0 条评论

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