AMM 安全深度解析 - 第 1 部分:去中心化交易的基础

  • zealynx
  • 发布于 5小时前
  • 阅读 46

本文介绍了自动做市商(AMM)的基本原理,重点讲解了恒定乘积公式(x*y=k)及其在AMM中的应用。文章还详细说明了流动性提供、代币交换和移除流动性这三个核心操作,并探讨了无常损失和滑点等固有风险,最后总结了AMM的优势与局限性,为后续研究更高级的AMM模型奠定了基础。

1. 介绍:流动性的新范式

几十年来,金融市场的引擎一直是中心限价订单簿 (CLOB)。买方和卖方声明他们的意图——他们的订单——而一个中央匹配引擎将它们配对。这种模型在吞吐量、低延迟的环境中运行得非常好。但是,当我们尝试将其直接移植到像以太坊这样的区块链上时,该模型就崩溃了。放置、取消或修改订单的行动本身就变成了一个消耗 gas 的交易。在拥塞的网络上,维护一个活跃订单簿的成本和延迟简直是令人望而却步的。区块链的架构从根本上与订单簿的架构背道而驰。

这种摩擦催生了去中心化金融的基石之一:自动化做市商 (AMM)。AMM 是一个优雅的、区块链原生的解决方案,旨在解决链上流动性问题。AMM 不是匹配单个的买方和卖方,而是创建一个点对池系统,用户可以针对智能合约中持有的资产储备进行交易。流动性 24/7 全天候可用,不由中央方管理,而是由确定性算法管理。

第一篇文章的目标是解构为第一代 AMM 提供支持的简单但强大的数学原理。我们将把这个原理转化为其核心智能合约原语,从而建立起正确分析其安全影响所需的第一性原理理解。

2. 核心引擎:恒定乘积公式

原始 AMM 模型背后的魔力,由 Uniswap v1 推广,是一个单一的、简单得令人难以置信的公式:

$$ x * y = k $$

这是恒定乘积公式,它是整个系统的核心。让我们从第一性原理的角度分解它的组成部分:

  • x:表示流动性池中一种资产的总储备量(例如,ETH 的数量)。
  • y:表示流动性池中另一种资产的总储备量(例如,USDC 的数量)。
  • k:恒定乘积,通常称为“不变量”。这个值是该模型的基石。该协议的主要指令是确保,对于任何交易,交易后储备的乘积等于交易前储备的乘积。

那么,为什么这行得通呢?该公式在两种资产之间创建了一种反比关系。要从池中提取一定数量的资产 y,你必须存入成比例数量的资产 x,以保持乘积 k 不变(暂时忽略费用)。资产的价格不是由外部预言机或订单簿设定的;而是作为一个函数,随着任何给定时刻 xy 之间的比率而有机地发现。

让我们来看一个具体的例子。

假设一个 ETH/USDC 的流动性池,其状态如下:

  • x (ETH 储备) = 10
  • y (USDC 储备) = 50,000

首先,我们计算我们的不变量 k

  • k = 10 * 50,000 = 500,000

该池中 ETH 的现货价格为 y / x,即 每 ETH 50,000 / 10 = 5,000 USDC

现在,一个交易者想要向池中出售 1 ETH。他们将向合约发送 1 ETH,从而增加 ETH 储备。

  • 新的 ETH 储备 x'10 + 1 = 11 ETH

要找出交易者收到的 USDC 数量,合约必须求解新的 USDC 储备 y',以维持不变量 k

  • x' * y' = k
  • 11 * y' = 500,000
  • y' = 500,000 / 11 ≈ 45,454.55 USDC

这个 y' 是必须保留在池中的 USDC 数量。发送给交易者的数量是差额:

  • USDC out = y - y' = 50,000 - 45,454.55 = 4,545.45 USDC

交易者发送了 1 ETH,收到了 4,545.45 USDC。交易行为改变了储备比率,因此也改变了价格。现在新的现货价格是 45,454.55 / 11 ≈ 每 ETH 4,132.23 USDC。这种价格变动是一种基本属性,我们将重新讨论。

3. 从数学到代码:池的三个核心原语

恒定乘积公式是理论引擎。在 DEX 交易对合约中,该理论通过三个核心的状态改变函数(或原语)来实现,用户可以调用这些函数。

  1. 提供流动性 (addLiquidity) 在任何交易发生之前,池需要资产。这是流动性提供者 (LP) 的作用。用户通过将 token0 和 token1 的成比例数量存入池合约来提供流动性。例如,如果池持有 10 ETH 和 50,000 USDC(1:5000 的比例),则新的 LP 必须以相同的比例存入资产。

为了换取他们的存款,合约会铸造一个特殊的 token(称为 LP token)并将其发送给他们。这个 token 是一种关键的会计机制;它代表了提供者对池总资产的按比例索取权。如果 LP 的 token 代表了 LP token 总量的 10%,则他们有权提取池中 10% 的 ETH 和 USDC 储备。

  1. 交换 Token (swap) 这是我们在数值示例中演示的核心交易函数。用户通过向合约发送一定数量的 token (amountIn) 来发起交换。合约接收这些 token,更新其内部储备余额,然后使用恒定乘积公式计算另一种 token 的 amountOut。最后,它将 amountOut 转移给用户。整个操作——接收 token、计算输出、发送 token——在单个交易中自动发生。

  2. 移除流动性 (removeLiquidity) 任何时候,流动性提供者都可以决定退出他们的头寸。为此,他们将其 LP token 发送回交易对合约。合约“销毁”(销毁)这些 LP token,作为回报,计算用户按比例分配的当前 token0 和 token1 储备。然后,它将这些资产转回给用户。LP 在提取时收到的资产比例可能与他们最初存入的比例不同,我们将在下一节探讨这种现象。

4. 内在风险和经济假设

稳健的安全分析的第一步是了解系统的内在属性和假设。这些不是“bug”或实现缺陷;它们是模型本身的基本特征。对于恒定乘积 AMM 来说,有三个特点很突出。

无常损失 这是流动性提供者面临的关键的风险。无常损失 (IL) 是在流动性池中持有两种资产与仅仅在钱包中持有它们之间的价值差异。如果池中资产的市场价格与存款时的价格发生偏离(无论哪个方向),LP 将遭受相对于仅仅持有资产的损失。发生这种情况是因为套利者不断地重新平衡池以匹配外部市场价格,购买在池中变得更便宜的资产,并出售变得更昂贵的资产。通过这样做,他们改变了 LP 持有的资产比例。只有当 LP 赚取的交易费用大于无常损失的价值时,LP 才是盈利的。这是提供被动流动性的基本经济成本。

价格滑点 正如我们在数值示例中看到的那样,token 的边际价格会随着你针对池进行交易而变化。x*y=k 公式创建了一个双曲线。对于相对于池规模的小额交易,价格影响非常小。但对于大额交易,交易者会被推到曲线的更远处,导致执行价格越来越差。这就是滑点。这是一个必要的功能,因为它充当一种制动机制,使得耗尽池中一种资产的成本呈指数级增长。但是,它可能是价值提取的向量(例如,三明治攻击),并且如果流动性不足,会导致大型交易者的执行效果很差。

不安全的预言机问题 (预告) AMM 池的现货价格 (reserveY / reserveX) 很容易被操纵。攻击者可以使用闪电贷执行大规模交易,暂时将储备比率转移到期望值,在另一个依赖于此操纵价格的协议上执行操作,然后交易回来以恢复原始价格,所有这些都在单个原子交易中完成。这使得简单 AMM 的瞬时现货价格成为一种根本不安全的价格预言机。将其用作发行贷款等关键操作的真实来源是 DeFi 中常见和具破坏性的漏洞之一。这将是本系列第 3 部分的核心主题。

5. 结论:一个可以构建的基础

恒定乘积 AMM 是一项革命性的金融工程成果。它通过用一个简单的、由 x * y = k 不变量管辖的被动流动性池取代复杂、高度接触的订单簿,优雅地解决了链上流动性问题。它的运作由三个核心原语定义:添加流动性、交换 token 和移除流动性。

然而,其革命性的简单性也是其局限性。从零到无穷大分布在整个价格曲线上的资本效率低下,而无常损失的风险对流动性提供者来说是一个重大的威慑。这个基础虽然强大,但留下了明显的改进空间。

在我们的下一篇文章中,我们将探讨像 Uniswap V3、CurveBalancer 这样的协议是如何在这个基础模型上进行迭代的。它们引入了新的数学不变量和架构模式,以创建更复杂、更专业和资本效率更高的系统,每个系统都带来了自己独特的安全挑战。

有关第一版的重点历史和深入安全分析,请阅读我们的 Uniswap v1 文章


取得联系

在 Zealynx,我们专注于发现和减轻上述风险。如果你正在 DeFi 中构建,让我们谈谈安全性 - 联系我们

通过 第 2 部分:深入了解顶级 DEX 平台 继续阅读本系列。

常见问题解答:AMM 安全中使用的关键概念 - 第 1 部分

  1. 什么是中心限价订单簿 (CLOB)?

中心限价订单簿是一种传统的金融市场系统,买方和卖方提交订单,中央引擎根据价格和时间进行匹配。它在中心化的、速环境中效率很高,但在缓慢、昂贵的区块链上很难实现。

  1. 什么是流动性提供者 (LP) 和 LP token?

流动性提供者是将资产存入 AMM 池的用户,使其他人能够进行交易。作为回报,他们会收到 LP token,这些 token 代表他们按比例分配的池份额,并且可以兑换为底层资产。

  1. 在 AMM 的上下文中,什么是套利?

套利是指利用市场之间价格差异的做法。在 AMM 中,当 AMM 价格与市场价格出现偏差时,套利者会通过交易来重新平衡池,从而有助于保持价格准确,但也导致 LP 遭受无常损失。

  1. 什么是闪电贷?

闪电贷是一种 DeFi 中的无抵押贷款,必须在单个区块链交易中借入和偿还。闪电贷通常用于套利、清算,或者在某些情况下,用于操纵链上价格。

  1. 智能合约中的“原子交易”是什么意思?

原子交易是一种区块链操作,其中所有步骤必须成功,否则都不成功。这确保了复杂的操作(如交换或闪电贷)要么完全完成,要么回滚,从而防止部分执行。

  1. 什么是滑点容忍度,为什么它很重要?

滑点容忍度是用户定义的限制,用于限制交易的执行价格与预期价格之间的差异。设置此项有助于保护交易者免受交易期间由于价格变动而造成的巨大、意外损失。

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

0 条评论

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