DEX流动性的暗黑森林

像Uniswap、Balancer、Curve和DODO这样的平台每天处理数十亿美元的交易量,但在这种创新之下隐藏着一个复杂的经济风险和安全漏洞领域,每个参与者都必须了解。

DEX流动性的暗黑森林
一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | 跨链桥/跨链兑换

去中心化金融(DeFi)革命从根本上改变了金融系统,其中基于自动化做市商(AMM)的去中心化交易所(DEX)处于核心地位。像Uniswap、Balancer、Curve和DODO这样的平台每天处理数十亿美元的交易量,但在这种创新之下隐藏着一个复杂的经济风险和安全漏洞领域,每个参与者都必须了解。

1、理解DeFi生态系统

DeFi代表:

“一种基于区块链形式的金融,使用智能合约重新创建传统金融服务,而无需中央中介。”

该生态系统包含几个关键类别:

去中心化交易所:Uniswap、Balancer、Curve、DODO

借贷协议:MakerDAO、Compound、Aave

收益聚合器:Yearn Finance、Harvest Finance、Pickle Finance

保险协议:Nexus Mutual、Etherisc、Insure

这些协议并不是孤立运作的——它们之间联系紧密,既创造了机会也带来了系统性风险,我们在整个分析中将探讨这些内容。

2、AMM与传统交易所:根本性的转变

  • 订单簿问题

传统交易所需要通过订单簿匹配买家和卖家。对于区块链上的交易所来说,这会带来一个关键问题:在分布式网络上存储巨大的订单簿非常低效,因为每个节点都必须托管所有的交易数据。

  • AMM解决方案
AMM使用所谓的守恒函数来算法化地确定加密资产之间的交换率

基于AMM的DEX通过使用守恒函数进行算法定价解决了这个问题。与匹配对手方不同,交易者与流动性池交互。你只需指定三个变量(卖出资产、买入资产和单边数量),而守恒函数会自动计算出交换率。

重要区别:AMM和DEX不是互斥的概念。AMM是一种算法(替代订单簿),而DEX是一种应用类型。你可以有:

  • 基于订单簿的DEX(如dYdX)
  • 基于AMM的DEX(如Uniswap)
  • 在其他应用程序中使用的AMM(预测市场、稳定币协议)

3、AMM生态系统中的参与者

3.1 流动性提供者(LP)

AMM系统的支柱,LP向流动性池提供资金,并获得池份额作为所有权证书。当你提供流动性时,你实际上成为了市场制造者。例如,如果我创建了一个新的“MANASToken”并希望启用交易,我可能会提供100个MANASToken配以50个ETH来初始化池。作为回报,我会收到100个池份额,代表此时池的100%。后来,如果另一个用户添加了50个MANASToken和25个ETH——正好是当前池价值的一半——他们将获得50个池份额。现在,总池份额为150。我拥有100/150份额(66.67%),新提供者拥有50/150份额(33.33%)。当交易发生时,费用由协议收集,并按份额比例分配给LP。同样,当流动性被撤回时,每位LP都会按照他们在池中的份额比例获得相应的代币。显然,这里我们没有考虑费用或价格滑点,为了简化解释保持简单。

3.2 交易者(Traders)

这些是前来交换代币的终端客户。他们指定输入资产、输出资产和数量,让守恒函数自动确定交换率。

3.3 协议基础

开发者和设计者通常通过交易费用和原生协议代币获得财务激励。这些代币既是治理工具也是经济奖励,将协议的长期成功与贡献者的利益对齐。例如,开发人员可能获得协议原生代币的分配(如Uniswap的UNI),随着采用的增长,其价值可能会上升。代币持有者通常有权投票决定升级、费用结构或国库支出——确保那些帮助构建和改进系统的人也能引导其未来。

3.4 套利者(Arbitrageurs)

常常被忽视但至关重要的玩家,他们通过利用跨平台的价格差异来确保交易所价格与更广泛市场价格一致。

4、AMM系统中的资产类型

风险资产:通常是流动性较差的代币,AMM旨在支持这些代币——新发行的代币,不容易在主要集中式交易所上市。

基础资产:更稳定、流动性更强的资产,如ETH,用于与风险资产配对。

池份额:代表您在流动性池中部分所有权的证书。

治理代币:分发给协议参与者的奖励,给予持有人在协议治理中的投票权,并理论上代表持有人在协议中的所有权权益。

5、守恒函数:AMM的数学核心

Uniswap:常数乘积公式

基础的AMM机制使用简单的等式:x₁ × x₂ = C

让我们通过一个具体例子来说明:

  • 初始储备:72 ETH和50个MyTokens(C = 3,600)
  • 初始MyToken现货价格:72/50 = 1.44 ETH
  • 如果有人卖出70个MyTokens:新储备变为30 ETH和120个MyTokens
  • 新现货价格:30/120 = 0.25 ETH

这展示了大额交易如何显著影响价格沿绑定曲线的变化。

6、隐藏的经济成本

6.1 滑点:大额交易的价格

滑点是指预期交易价格与实际执行价格之间的差值。由于交易相对池大小较大时,池的代币比率发生变化,因此会产生滑点。在AMM中,随着交易规模的增加和流动性降低,滑点也会增加,因为常数乘积公式会导致价格在交换过程中发生变化。

滑点表示预期价格和实际执行价格之间的差异。在我们的MyToken示例中:

  • 初始现货价格:1.44 ETH
  • 实际交易价格:0.6 ETH
  • 滑点:(0.6/1.44) — 1 = -58%

这不是一个错误——这是AMM通过其守恒函数自然响应供需的方式。

6.2 偏离损失:LP的困境

暂时性损失是流动性提供者(LP)在池中代币的价值相对于池外代币的价值发生变化时经历的暂时价值损失。它被称为“暂时性”,因为如果价格恢复到原来的比率,损失可以收回;但如果LP在新的比率下撤回流动性,则成为永久性损失。

偏离损失(暂时性损失)会影响流动性提供者,当池中资产的相对价值发生变化时。在我们的示例中:

  • 新储备价值:60 ETH等值
  • 如果持有池外资产的价值:84.5 ETH等值
  • 偏离损失:(60/84.5) — 1 = -29%

交易费用旨在补偿LP的这种风险,但在高波动时期,这些费用并不总是足以覆盖全部成本。

7、Uniswap V3:集中流动性

V3引入了集中资本,允许LP指定其流动性运作的价格范围。这创建了不同的绑定曲线和风险概况:

  • 在指定范围内更高的资本效率
  • 不同的滑点特性
  • 修改后的偏离损失模式

数学公式变得更加复杂,涉及调整守恒函数的范围参数。

8、Balancer:多资产池

Balancer超越了两资产池,允许多种资产具有固定的权重比:

C = ∏ᵏₖ₌₁ rₖʷᵏ

这使得更复杂的池组成成为可能。例如,不需要100 ETH来与100 XTokens以相等价值配对,你可以使用权重比(如90% XToken,10% ETH)来减少初始资本需求。

9、Curve:优化稳定资产

Curve专门用于交易类似价值的资产(如不同稳定币),使用A参数在常数和常数乘积函数之间进行插值:

  • 较高的A值在正常范围内创造极低的滑点
  • 较低的A值回归到标准常数乘积行为
  • 曲线在池耗尽附近变得指数化

10、DODO:主动做市

DODO使用外部价格预言机来锚定其绑定曲线,根据外部市场数据主动调整价格。这种“主动做市”方法:

  • 减少套利机会
  • 将内部价格锚定到外部参考
  • 为LP创造不同的风险-回报配置

11、完整攻击分类法

11.1 基础设施层攻击

区块时间操纵:攻击者操纵区块时间以恶意重新排序交易。

交易顺序操纵:在同一区块内,攻击者改变交易顺序以获取优势。

这些攻击利用了区块链交易处理的基本机制。

11.2 中间件层攻击

重入攻击:利用智能合约漏洞,外部调用可以在第一次执行完成之前递归重新进入合约。

11.3 应用层攻击:AMM特有的威胁

  • 闪电贷预言机攻击

这种复杂的攻击利用了DeFi的互联性质:

算法 1: 闪电贷资助的价格预言机攻击  
1. 从借贷平台借取X_A代币_A  
2. 在AMM上将X_A代币_A交换为x_B - Δ₁代币_B,推低价格  
3. 使用x_B - Δ₁代币_B作为抵押品,在借贷平台上借取X_A + Δ₃代币_A,使用AMM作为价格预言机  
4. 用X_A代币_A偿还闪电贷

攻击者通过价格差异获利,而由于闪电贷机制,攻击成本极低。

AMM价格如何工作

AMM如Uniswap使用常数乘积公式:x × y = k,其中x和y分别是代币A和B的储备。当你用代币A换取B时,x增加且y减少。代币A的价格(以B计价)下降,因为池中有更多的A和更少的B。相反,如果你用B购买A,则x减少且y增加——所以A变得更贵。

攻击如何工作

假设一个DeFi借贷协议使用AMM的价格作为预言机来确定抵押品价值。

  1. 闪电贷
    攻击者使用闪电贷借取大量代币B(或A)(无前期成本)。
  2. 操纵AMM价格
    攻击者在AMM池中进行大量交易以改变价格。

例如:

大量交易代币A换取代币B,增加A储备并减少B。这导致AMM中A的价格下降(因为A在池中更丰富)。⚠此时,AMM显示A的假低价。

  1. 利用预言机
    协议看到这个由AMM预言机操纵的A的低价。攻击者然后使用A作为抵押品,此时A的价值被低估。攻击者借取比公平市场价格允许的更多代币B。
  2. 平衡与偿还
    在同一笔交易中:他们逆转最初的交易(部分恢复池平衡)。他们偿还闪电贷。剩下的就是一笔B代币的利润——攻击者基于虚假价格借取过多并保留了多余部分。

11.4 跑路攻击

AMM的民主化性质开启了新的欺诈模式:

跑路本质上是在AMM上的退出骗局。恶意开发者创建新代币和流动性池,吸引投资者,然后“拉掉地毯”——将所有资金抽走,留下毫无价值的代币。用Bitpanda的话说,跑路“是一种骗局,项目开发者从项目中提取所有资金并放弃项目,留下投资者持有毫无价值的代币”。由于任何钱包都可以在Uniswap、PancakeSwap或其他类似平台上创建或列出代币/池,无需许可。骗子经常用炒作或虚假实用性诱使人们上钩,然后执行跑路。主要有两种变体:一种是硬跑路,攻击者立即一次性移除所有流动性;另一种是软跑路,资金逐渐被缓慢转移,维持项目活跃的假象。开发者可能会提供更新或在社交媒体上互动以显得合法,但最终会放弃项目。在硬跑路中,开发者只是简单地提取整个流动性池(例如所有ETH和新代币),导致代币价格暴跌至零,留下投资者持有无价值的代币。

算法 2: 跑路  
1. 发行新币‘XYZ’  
2. 创建流动性池,包含x_XYZ‘XYZ’和x_ETH‘ETH’  
3. 吸引不明真相的交易者用ETH购买XYZ  
4. 提取流动性,获得x_XYZ - Δ₁‘XYZ’和x_ETH + Δ₂‘ETH’

这利用了AMM的无权限性质——任何人都可以在不受监督的情况下创建交易对。

11.5 三明治攻击:两种变体

三明治LP攻击:流动性提供者在大额交易周围操纵池深度:

三明治LP攻击(也称为即时流动性攻击)是一种更微妙的MEV策略,其中流动性提供者(LP)针对待处理的交易。攻击者在受害者的交易之前和之后暂时撤回并重新添加流动性。实际上,攻击者已经拥有LP代币。他们会观察内存池中的大额交易。就在交易执行之前,攻击者通过撤回部分池流动性进行抢先操作。这种缩减使受害者的交易产生额外的滑点(恶化价格)。就在受害者交易完成后,攻击者通过重新添加移除的流动性进行后续操作——但由于池组成发生了变化,他们只需要提供较少的一种代币。然后他们出售获得的多余代币以获利。

算法 3: 三明治LP攻击  
1. 用户A放置订单,用token_B购买x_A token_A  
2. LP B观察内存池  
3. LP B通过支付更高的Gas费抢先撤回流动性  
4. 用户A的交易执行,滑点更高  
5. LP B通过支付更高的Gas费后置重新提供流动性  
6. LP B从价格变动中获利

攻击者的动机很简单:通过费用和价格变动从交易者和其他LP那里获取额外利润。当LP-B撤回流动性时,他们节省了一部分本应归其他人的交易费用;当他们重新添加流动性时,他们利用了价格比率的变化。其他LP由于攻击而失去部分费用份额。这种攻击依赖于内存池知识和AMM价格影响——通过暂时减少池大小,攻击者放大了用户的滑点并从中受益。实际上,这通常需要与矿工合谋或使用私有订购(以确保两个步骤都得到保证)。它仍然相对罕见:一项分析指出不到1%的Uniswap V3流动性来自此类即时提供者——但这强调了这种风险。

为什么是AMM? 只有AMM具有这种动态流动性机制。在订单簿DEX中不可能进行这种定时的流动性撤回/添加。攻击利用了AMM的不变价格机制以及LP代币可以随时撤回的事实。它利用了可组合性——既是做市商又是交易者——这是DeFi独有的。从受害者的角度来看,他们的交易没有任何错误,但他们为交换支付了更高的价格(更高),并没有获得额外的好处。这本质上是一个基于流动性的三明治:首先削弱池(买时价格跳得更多),然后恢复。

三明治价格攻击

这就是大家谈论的经典的MEV夹心交易。这里的攻击者不是一个流动性提供者,而是一个普通交易者,观察内存池。当一个大额交易待处理时,攻击者插入两个交易:一个在受害者的交易之前,另一个在之后。目标是从受害者的交易价格影响中获利。

算法 4: 夹心价格攻击    
1. 用户A希望以现货价格P₁购买x_A XYZ  
2. 用户B观察内存池  
3. 用户B以更高的Gas费抢先购买x_B XYZ  
4. 两个交易执行,价格从P₁推高到P₂  
5. 用户B以平均价格P_c > P_B后置出售x_B XYZ

这种攻击在大规模操作时非常有利可图。即使价格小幅波动,也可能带来巨大收益。由于AMM上的每次交易都会改变价格(交易越大,影响越大),如果受害者有非零滑点容忍度,夹心交易肯定会盈利。攻击者只需出更高的Gas费以确保其交易优先执行。结果是,受害者最终以更高的价格购买,得到的代币比预期的要少。

为什么是AMM? 核心在于AMM价格随交易反应,内存池是公开的。订单簿DEX不会这样表现,因为价格不会像AMM那样以相同的连续方式随交易量自动调整。AMM保证每次购买都会推高现货价格。夹心攻击者利用这一确定性公式(x*y=c)以及通过MEV(矿工/验证者选择高费交易)重组区块的能力。内存池的透明性使其很容易发现有利可图的交易。防御措施包括使用私人中继或限制滑点;如果你在交易中设置非常严格的滑点容忍度,夹心攻击可能导致你的交易失败而不是攻击者获利。但对公共AMM上的任何大额交易而言,这仍然是一个普遍存在的风险。

现实世界的数据:2021年9月30日,研究人员记录了在STARL/ETH对上的两次夹心攻击,仅几分钟内:

来源:SoK: DEX with AMM Protocols Jiahua Xu, Krzysztof Paruch, Simon Cousaert, Yebo Feng

  • 第一次攻击(10:16:46):0.0310743 ETH利润
  • 第二次攻击(10:19:52):0.0308927 ETH利润

两者涉及相同数量的买入/卖出,但价格不同,展示了这些攻击的系统性。

12、结束语:守护AMM前沿

这四种攻击模式揭示了一个共同主题:DeFi的无权限可组合性是一把双刃剑。 AMM推动了许多创新,但每一点开放性也是一个漏洞。闪电贷款允许瞬间、大规模的价格操纵;过于简单的链上预言机可以用单一交易欺骗。新代币和池在未经审核的情况下上线,使无休止的跑路成为可能。完全透明、可重新排序的内存池为矿工和机器人提供了MEV机会的奖品,从夹心交易到及时撤回流动性。

防御这些需要仔细设计和用户警惕。基于AMM的预言机应该被替换或增强为强大的数据源(例如Chainlink预言机),以避免单一池价格被利用。协议可以使用时间加权平均价格(TWAPs)或多源报价代替链上现货价格。改善内存池隐私(例如使用Flashbots或私人交易池)可以限制抢先交易。对于终端用户来说,明智的做法是以保守的滑点设置交易,并对全新代币和池持怀疑态度。最终,没有万能药:每个AMM创新都邀请新的攻击想法。避免简单的链上定价并使用精心设计的预言机是关键。通过理解这些攻击机制,DeFi开发者和用户可以加强防御并在无权限DeFi世界中更加安全地前行。

基于AMM的DEX代表了一项非凡的金融创新,使无权限、全球化的24/7任何资产对交易成为可能。然而,其快速采用超过了安全理解,形成了一个复杂的参与者必须谨慎导航的风险景观。

这里呈现的研究为这种理解奠定了基础,但DeFi的快速发展意味着持续学习和适应对于任何参与这场革命性金融生态系统的人来说都是必不可少的。


原文链接:The Dark Side of Liquidity: A Deep Dive into AMM-Based DEX Risks and Security — Based on the SoK Framework

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。
通过 NowPayments 打赏