Skip to content
全部期权指南
DEX 兑换执行机制11 分钟阅读

DEX 兑换:价格影响、滑点与 MEV

了解流动性池深度如何影响预期价格影响、最低到账量如何限制待处理兑换,以及为什么较宽的滑点容忍度可能允许更差的成交结果。

本指南内容价格影响、滑点和容忍度回答的是不同问题

简短摘要

DEX 报价变化通常有两个原因:兑换本身推动了池内价格,或者其他交易在你的交易执行前改变了价格。价格影响描述第一种情况;滑点则是报价到最终成交之间的变化。滑点容忍度设置的是结果边界,并不承诺获得更好的价格。

价格影响、滑点和容忍度回答的是不同问题

当你的订单相对于可用流动性较大,并直接推动池内价格时,就会产生价格影响。较真实的报价已经计入这一影响:在较浅的池中,大额订单的平均成交价通常比小额订单差。滑点是创建报价时的预期到账量与交易执行时结果之间的差异。等待期间的其他兑换、市场波动、延迟或路线变化都可能改变结果。

滑点容忍度是兑换必须满足的条件。对于固定输入量的兑换,它通常表现为最低到账量;如果执行结果低于该数量,合约可能回滚交易。这个设置不会消除报价中已经计入的价格影响,也不代表实际会发生多少滑点。Uniswap 关于价格影响与价格滑点的说明也区分了两者。不同界面可能采用不同的计算方法或标签。

为什么 AMM 报价会随订单规模增大而变差

订单簿交易所撮合买卖双方挂出的不同价格订单。恒定乘积自动做市商则根据池内代币储备计算兑换。在简化的双代币模型中,x × y = k。买入某种代币的数量越多,该代币从池中流出的数量就越多,另一种代币则流入池中,因此交易过程中的兑换比例会变化。订单相对于可用深度越大,平均成交价越差。

这只是一个模型,并非所有 DEX 都遵循的通用规则。Uniswap 开发文档介绍了 v2 的恒定乘积结构,并将其与 v3、v4 按价格区间集中流动性的设计区分开来;后两者还可能采用 hooks 或不同的费用规则。一个报价也可能组合多个池或交易场所。应比较这一笔订单规模和路线下的预期到账量,而非图表上的最新价格或池内总锁仓价值。可查阅 Uniswap v2 兑换文档了解其具体机制。

无文字插图:硬币流入蓝色池子,另一枚硬币沿着单独路径流出。
概念图示:一种代币进入共享池储备,另一种代币流出;图中没有价格、储备数量、费用或实时报价。

计算示例:用 10,000 USDC 兑换浅池中的资产

假设一个虚构的池中有 100 ETH 和 200,000 USDC,没有兑换费用或外部价格变化,并遵循恒定乘积曲线。初始比例为 200,000 ÷ 100 = 每 ETH 2,000 USDC。输入 10,000 USDC 后,池中的 USDC 储备变为 210,000。为了保持乘积不变,ETH 储备降至 20,000,000 ÷ 210,000,约为 95.238095 ETH。交易者收到约 4.761905 ETH。

按初始比例,10,000 USDC 原本可以买到 5 ETH。少得的 0.238095 ETH 约占无价格影响时到账量的 4.76%。平均成交价为 10,000 ÷ 4.761905 = 每 ETH 2,100 USDC,比交易前的比例高 5%。交易后的池内边际价格为 210,000 ÷ 95.238095 = 每 ETH 2,205 USDC。无价格影响时到账量的差额、平均成交价和新的边际价格是三种不同的比较。真实报价还会考虑费用及路线上的流动性形状。这只是一个假设示例,并非市场预测。

将池费与曲线影响分开看

保留相同的假设储备,并按一种特定收费方式假设输入金额收取 0.30% 的费用。恒定乘积报价中采用的有效输入为 10,000 × (1 − 0.003) = 9,970 USDC,因此输出为 100 × 9,970 ÷ (200,000 + 9,970),约 4.748297 ETH。与同一曲线上不计费用时的 4.761905 ETH 相比,少约 0.013607 ETH。相较于初始比例下的 5 ETH,总差额约为 0.251703 ETH。若把无费用的曲线结果作为中间步骤,则约 0.238095 ETH 归于曲线影响,另有 0.013607 ETH 归于费用调整;这种拆分取决于比较基准。

0.30% 是示例假设,并非所有 DEX 通用的费率。这种输入调整遵循 Uniswap v2 的 getAmountOut 程序库中的费用计算方式。不过,合约储备仍记录全部输入;公式中采用 9,970 USDC 作为有效输入,并不表示只有这些资产进入池中。其他池可能采用不同费率、不同计费基数,或叠加多项费用。多跳路线可能在每个池收取费用,此外还可能有界面费和网络成本。请核对实际路线和费用明细,不要把示例费率套用到所有兑换。

最低到账量是边界,不是报价结果

假设同一笔输入的路线报价为 4.7619 ETH,界面设置了 1% 的容忍度。最低到账量约为 4.7143 ETH:4.7619 × (1 − 0.01)。到账 4.72 ETH 满足边界;到账 4.70 ETH 则低于门槛,路线的保护条件可能导致交易回滚。报价仍然是 4.7619 ETH。最低到账量只是已提交交易愿意接受的最差结果。

更窄的边界可能会让原本可行的交易失败,例如网络拥堵时价格发生变动,或报价已经过期。更宽的边界则会在交易被拒绝前允许更差的成交。Uniswap 开发文档将最低输出描述为集成层的保护条件,但具体参数和失败方式取决于路由器或产品。交易已经进入区块后再回滚,仍可能产生网络费用,具体取决于链和交易流程。不要为了消除报错而直接调高容忍度;先检查报价、代币、路线、费用或网络状态是否改变。

等待期间会出现报价中没有的变化

从签名到被打包进区块之间,其他兑换可能改变池内储备。套利交易可能让池价向其他市场靠拢,快速的市场变化也可能使旧报价失去参考意义。即使你的订单不变,最终到账量仍可能变化。在一些链上,更高的 gas 出价可能影响交易优先级,但不能保证成交时间或价格。截止时间可以拒绝等待过久的交易,却不能保留先前报价。

应将报价时的估算与最终交易记录分开看。价格影响是订单对路线流动性的预期作用。报价创建后额外发生的变化,则是按界面所用参照计算的执行滑点。有些界面会把两者放在同一条警告中,或使用不同的比较基准。若要事后核对,请在签名前记录报价、时间、路线和最低到账量。

宽松边界可能被 sandwich MEV 利用

Sandwich 是最大可提取价值(MEV)的一种形式。搜索者发现一笔待处理兑换后,会先提交交易,把池价推向对用户不利的方向;随后让用户的兑换执行,再反向交易以平掉自己的仓位。用户可能收到高于已提交最低量的代币,但成交价仍比原报价差。严格的输出下限可以让部分不利成交回滚,却无法阻止所有交易排序策略或正常的市场波动。

Ethereum.org 的 MEV 指南介绍了 sandwich 排序方式,以及受影响用户为何会获得更差的成交结果。MEV 并非全是攻击:套利可以让池价接近其他市场,而 sandwich 则可能损害用户的成交价格。Flashbots Protect 等私有交易路线会说明自己的保护方式和条件。其覆盖范围取决于链和服务商,不保证特定价格,还会增加对另一条交易路径的依赖。使用前应检查当前支持的网络和条件。

费用、代币行为和路线都会改变总结果

收到的代币数量并不等于兑换的总成本。应分别看池费用、可能存在的界面费用、网络成本、已包含在报价中的价格影响、执行滑点,以及代币自身的转账或买卖费用。有些代币的转账行为并不标准;兑换可能失败,也可能转移不同于普通 ERC-20 假设的数量。代币授权可能是单独的交易,并产生独立网络费用。

路线聚合器可能把兑换拆分到多个池,或使用中间代币来提高报价输出。这可能降低某一条路线的价格影响,但也可能增加合约调用、费用或代币特有风险。报价不能保证在所有平台上都能获得最佳成交。比较确切的输入量、预期输出、最低到账量、池路径、费用明细、网络和截止时间。还可阅读[代币授权指南](/zh-CN/learn/crypto-token-approvals-and-allowances-explained)、[以太坊 Gas 费用指南](/zh-CN/learn/ethereum-gas-fees-base-fee-priority-fee-gas-limit-explained)以及[跨链桥和包装代币指南](/zh-CN/learn/crypto-bridges-wrapped-tokens-finality-risks-explained)。

签名前检查报价,执行后核对交易记录

签名前应确认网络和代币合约地址、输入量、路线和池深度、显示的价格影响、预期输出和最低到账量、滑点设置、截止时间、池费用、界面费用和网络费用,以及代币警告。如果输出看起来异常低,可用较小的假设输入量或另一条路线进行比较。如果交易失败,先查看原因再重新提交。失败的尝试也可能根据链和交易流程产生网络成本。

执行后,将交易记录中的实际代币数量与报价及最低到账量比较,并记录路线、费用、网络成本和时间。不要把最低到账量当作预期输出,也不要认为交易成功就代表已防住所有不利成交。本文计算使用的是无费用的恒定乘积池。集中流动性、多跳路线、代币税、预言机价格和各链的交易排序都可能导致不同结果。

区分固定输入和固定输出的保护条件

前面的示例将输入固定为 10,000 USDC,并为收到的 ETH 设置最低数量。输入不会变化;如果结果低于边界,交易可能被拒绝。固定输出兑换则先指定希望收到的 ETH 数量,此时所需 USDC 可能高于估值,因此通常设置最大输入量。Uniswap 开发文档将固定输入时的最低输出量与固定输出时的最大输入量作为不同保护条件说明。

因此,界面上的 1% 并不意味着每笔兑换都保护同样的数量。应检查固定的是输入还是输出、下限或上限以哪种代币为基准,以及聚合器是否在报价中纳入了路线和费用。最低到账量是代币单位下的条件,不是美元价值保证。如果收到的代币价格同时下跌,即使兑换达到最低量,美元价值仍会变化。交易完成并不代表报价价格得到了保证。

常见问题

Q1价格影响和滑点是一回事吗?

不是。价格影响来自你的订单相对于池流动性的大小。滑点是按照界面参照标准计算的报价与最终执行结果之间的差异。

Q2设置 1% 滑点是否意味着我会损失 1%?

不是。它通常是相对于报价设置执行边界。结果可能更好,交易可能回滚,也可能接近允许的下限。

Q3收紧容忍度能阻止 sandwich 攻击吗?

它可以缩小交易接受的结果范围,但无法消除 MEV 或正常市场波动。私有交易路线也有自己的覆盖范围和限制。

资料来源与延伸阅读

报告问题

我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈

快速检查

读完指南后,用 3 道题检查一下

问题 1 / 3

问题 01

AMM 兑换中的价格影响衡量什么?

选择答案即可查看解释

期权术语表