第五课(下):DEX 入门
第五课的下半部分将重点解析 DeFi 中价格如何被修正、流动性如何被激励。
内容首先围绕锚定资产与稳定币场景,介绍稳定币的类型及其专用的自动做市商设计,随后引入 AMM 套利机制,解释套利者如何通过跨市场交易不断同步价格,使去中心化交易系统能够自我校准。在此基础上,课程进一步讨论流动性挖矿,并将视角扩展至多市场环境,介绍 DEX 聚合器与套利机会的系统性发现方法。最后,课程回到流动性提供者最核心的风险之一——无常损失,解释其产生机制及其经济含义。
通过本节课,你将建立对 AMM 市场在套利、激励与风险之间如何动态运作的整体认知。
五、自动做市商套利
Section titled “五、自动做市商套利”在这一部分,我们将学习 AMM 中的一个重要概念——套利。
所谓套利,是指在不同交易所或不同市场之间,由于同一种资产存在价格差异,交易者可以同时进行买入和卖出,从而在几乎不承担价格风险的情况下获取收益。下面我们通过一个简单的多市场例子来理解这一点:
假设存在三个相互独立的市场,它们交易的是完全相同的资产,比如比特币和美元。由于市场之间的流动性、信息和参与主体不完全相同,该资产在不同市场中的价格可能并不一致。例如,交易对 BTC/USDT 在市场一中兑换比例1:1,市场二中则为2:1,市场三中可能达到3:1。一旦出现这样的价格差异,便出现了明确的套利机会:在价格最低的市场买入资产,再到价格最高的市场卖出资产,中间的差价就是套利空间。
在这个具体例子中,由于一共有三个市场,就可以构造一个循环套利路径:在多个交易所之间形成一个闭环,通过合理分配在每个市场中的买卖数量,使整个循环的结果是正收益。
当然,这一切并不是无条件成立的。套利能否真正落地,很大程度上取决于流动性。如果某个市场的流动性很深,可交易的数量就更多,套利空间也更容易被充分利用;反过来,如果流动性较低,即便存在价格差异,实际能够成交的规模也会受到限制,套利机会自然就会变小。
套利者如何同步市场价格
Section titled “套利者如何同步市场价格”
在 AMM 体系中,并不存在传统意义上的订单簿结构,而是通过流动性池来完成交易。每个流动性池中包含两种资产,通常记为资产 x 和资产 y。在这种机制下,价格并不是由买卖订单撮合形成的,而是由池中两种资产数量的比例直接决定的。这种由池内资产比例所决定的价格,天然可能与其他市场中的价格产生偏差,正因为如此,套利在 AMM 中对于价格发现和价格维持起到了至关重要的作用。
当多个市场中存在相同的资产对 x/y,或者多个市场可以通过资产兑换形成一个闭环,而这些市场中的价格并不一致时,就会自然地产生套利机会。套利者通过在价格较低的市场买入资产、在价格较高的市场卖出资产,从而推动价格逐步趋于一致。从这个角度来看,套利者的角色与传统订单簿市场中的做市商或价差交易者类似。正如限价订单簿中存在买价与卖价之间的价差一样,AMM 与外部市场之间的价格差异,也为套利提供了利润空间。
在实际执行中,套利至少需要完成一次资产交换操作;更通常的情况是,在一个市场买入某种资产,同时在另一个市场卖出该资产。这两类操作本质上都是交换行为,并且在 AMM 中通常可以通过一次链上交易完成。在区块链环境下,套利往往涉及三笔或更多的交换操作,用于构造完整的套利路径。
例如,在包含三个市场的情形中,可以依次执行交换 1、交换 2 和交换 3,从而完成一个循环套利过程。如果这些交换操作是原子执行的,那么就可以保证它们在同一状态下连续完成。原子性意味着:一旦第一步交换被成功执行,后续的交换操作就会立即基于更新后的状态依次完成,中间不会插入任何其他状态变化。这是 AMM 套利机制中的一个关键特性。正是依靠这一特性,套利者才能在可控风险下计算预期收益,并在不同市场之间有效地执行套利操作,从而推动整体市场价格趋于一致。
接下来依旧通过一个具体的实例来说明 AMM 中的套利过程:

在该示例中,存在两个可用于套利的市场,分别是 Curve 的 y 池 和 Curve 的美元池。这两个流动性池托管着相同的核心资产,即 USDC 和 DAI。由于两个市场都支持 USDC/DAI 的兑换,当它们之间的隐含价格出现偏差时,就会产生套利空间。
在该套利过程中,套利者主要执行了两个连续的交换步骤:第一步是在一个市场(y池)中以 1.01:1 的汇率将约 204.8 万枚 USDC 兑换为约 202.8 万枚 DAI,完成了一次稳定币间的转换。完成此操作后,套利者转而进入第二个市场,将所持 DAI 以1.018:1 的比例重新兑换为 USDC。
经过两次兑换,最终收回的 USDC 数量约为 206.4 万枚,相比初始投入净增约 16,000 枚 USDC,按计价折算收益约为 16,000 美元。整个过程清晰体现了通过捕捉不同市场间微小价差,在稳定币之间实现无风险收益的套利机制。
这是一个结构相对简单的套利示例,仅涉及两个市场之间的价格偏差。在实际应用中,该套利模式可以扩展到多个市场,形成更复杂的套利路径。然而,随着参与市场数量的增加,所需执行的交换操作也会增多,相应的 gas 成本显著上升。因此,在具体实现中,套利路径的长度通常受到区块链交易成本的限制,不同区块链环境下可行的套利复杂度也存在明显差异。
简单来说,闪电贷由专门的协议或流动性提供方提供,其核心特征在于:借入、使用和偿还资金必须在同一笔区块链交易中完成。在本例中,套利者可以从闪电贷提供的流动性池中借入约 200 万枚 USDC,随后立即执行前述的两次套利交换操作。在交易执行结束时,只要最终能够按要求偿还最初借出的资金(以及可能的少量手续费),整个交易便被视为成功;否则,交易将被回滚,所有状态恢复至执行前的状态。这种原子性保证了闪电贷在无抵押条件下依然具备安全性。
值得注意的是,在该示例中,所使用的闪电贷提供方仅收取极低的手续费,因此套利者在偿还借款后,仍然可以保留套利过程中产生的净收益。总体而言,闪电贷机制有效解决了套利活动中的初始资本约束问题。在 DeFi 体系下,任何参与者都可以通过编写合约,在单笔交易中完成多次原子化操作,并借助闪电贷执行套利策略,这也是去中心化金融体系中最具创新性和吸引力的特征之一。
六、AMM流动性挖矿
Section titled “六、AMM流动性挖矿”
这一章节我们将聊一聊 AMM 的流动性挖矿。
流动性挖矿简单来说就是为提供流动性的用户提供额外的激励。如前所述,对于 AMM 机制,无论是稳定币还是普通 Token,流动性都是至关重要的。原因在于,充足的流动性能够降低交易滑点,并提升交易效率。因此,流动性是 AMM 机制中最核心的要素。用户之所以将资产提供给资金池,成为流动性提供者(LP,liquidity provider),主要目的是获得交易激励。在 DeFi 中,这类交易激励主要可以分为两种类型。
第一种激励是交易手续费。以介绍流动性池时 Alice 和 Bob 的例子来说明,当 Bob 在流动性池中进行交易时,他会向该池支付一小笔交易费用,这笔费用作为对流动性提供者的激励。例如,在 Curve 协议中,LP 从用户交易中获得 0.03% 的手续费。因此,作为流动性提供者(LP),你将根据用户的交易行为获得收益。用户交易量越大,你获得的经济价值也越高。
第二种激励是流动性挖矿奖励。任何 DeFi 协议都可以手动指定这类奖励。例如,当用户向资金池提供一定量的流动性时,协议的管理者或开发者可以根据其贡献,向用户发放代币作为奖励。以 Alice 为例,如果她向资金池提供了流动性,协议可能会发放一定数量的 C 代币作为奖励,这就是所谓的流动性挖矿激励。
七、DEX聚合器
Section titled “七、DEX聚合器”
在前面的课程中,我们单独研究了去中心化交易所,但现在我们将讨论如何聚合多个 DEX,将它们整合在一起形成一个统一的平台。
用户通常会关心,在哪里可以完成最划算的交易。单个交易所提供流动性有限,用户需要在不同交易所之间比较价格和成本。而 DEX 聚合器的作用正是从多个交易所获取流动性并整合起来,为用户提供最佳的交易体验。用户只需向聚合器提交交易请求,聚合器会自动寻找最佳交易路径、匹配最深的流动性、选择最低的价格和手续费。通过这种方式,用户可以在交易中支付更低的滑点,获得更优的交易条件。
目前普遍存在的 DEX 聚合器主要有两种类型:链下聚合器和链上聚合器。
1.链下聚合器(Off-chain Aggregator)
例如 1inch 和 Paraswap。用户可以通过浏览器钱包或加密货币钱包访问这些聚合器,跨多个链进行交易,并快速确定最佳交易方案。链下聚合器的优点是灵活、响应速度快,能够快速找到最优交易路径。
这类聚合器也存在缺点:由于运营商作为可信第三方位于交易所与用户之间,存在 被抢先交易(front-running) 的可能性。此外,最优交易参数的计算在链下进行,因此结果可能并非链上可验证的最优。
2.链上聚合器(On-chain Aggregator)
例如 SwapSwap。虽然链上聚合器的知名度不及链下聚合器,但具有一些关键优势:例如允许执行原子路由(atomic routing) 和套利操作,交易结果可在链上验证为最优;此外链上聚合器使用智能合约直接完成交易,无需中间商,被抢跑的可能性很小。但在扩展性方面,链上聚合器不如链下聚合器,难以高效覆盖更多交易所,因此链上聚合器在目前并不是主流。

以 1inch 为例,其网页界面提供了清晰直观的操作体验:
用户只需输入想要兑换的资产数量,即可查看市场订单情况,例如在以太坊(ETH)和 DAI 之间的兑换。
在市场订单模式下,1inch 会显示预计的兑换回报,例如一个 ETH 大约可兑换 2300 DAI。同时,界面还会列出可执行交易的不同交易所列表,并标明哪一个交易所能够提供最优兑换率。例如,使用 Uniswap V3 可获得与 1inch 相同的兑换率,而使用 Uniswap V2,则在当前流动性下兑换率可能低 0.15%。除此之外,用户可以分析各市场的交易情况,选择更低的 Gas 费用,或判断最佳交易路径。界面还会显示具体的兑换路线,让用户了解资产交换的执行流程。
1inch 虽然可以帮助用户聚合不同交易所的流动性,但并非所有问题都能解决。在某些情况下,由于市场套利机会的存在,用户可能会出现小幅损失。因此,用户在使用聚合器时,仍需对交易成本和潜在风险保持关注。

SwapSwap 则是另一个新兴的链上聚合器,目前聚合了两个去中心化交易所:Uniswap 和 Sushiswap。尽管覆盖的交易所数量有限,但这是链上聚合器发展的一个初步尝试。
由于其用户界面保持着标准的 Uniswap 风格,因此从界面上暂时看不到聚合带来的经济优势。但理论上,由于流动性被汇集在一起,用户应能够获得比单独使用 Uniswap 或 Sushiswap 更优的价格。其核心特点在于 智能合约驱动的路由:智能合约在执行交易时会判断是否进行最优路径路由;若有套利机会,智能合约可利用闪电贷实现即时套利,而不会造成经济损失;所有操作均在智能合约中透明执行,用户无需干预,流程安全且高效。
SwapSwap 展示了链上聚合器的潜力,即在无需中间商的情况下,通过智能合约实现流动性整合和自动化交易优化。
八、如何在 DeFi 中发现套利或交易机会?
Section titled “八、如何在 DeFi 中发现套利或交易机会?”两种主要方法
Section titled “两种主要方法”
在这一章节中,我们将探讨如何在 DeFi 中寻找有利可图的交易机会。我们可以将 DeFi 理解为一个完全开放的金融产品图谱,其中所有协议、资产和交易路径都是可观察的。在这样的体系中,关键在于沿着金融产品图谱寻找最优路径。通过对不同协议和交易路径的分析,用户可能发现潜在的盈利机会。
关于如何在 DeFi 中发现套利机会或其他形式的盈利机会,这里主要介绍两种方法:
1. 贝尔曼–福特(Bellman–Ford)算法
贝尔曼–福特算法是一种用于在图结构中检测负权环的经典算法。在金融应用中,负权环通常对应于循环套利机会,因此该算法可以用于判断是否存在可执行的套利交易,尤其是循环套利交易。
2. 定理求解器(Theorem Solver),在相关文献中通常也称为 SMT 求解器
SMT 求解器在 DeFi 场景中的应用通常需要先将 DeFi 系统建模并编码为其可处理的形式。与贝尔曼–福特算法可以较为直接地应用于 DeFi 图结构或市场图不同,SMT 求解器依赖于手动构建的 DeFi 模型,这一过程往往需要投入大量的人工工作和建模成本。为了提升求解效率并减少搜索空间,通常需要在使用 SMT 求解器时引入一些路径剪枝的启发式方法,相关内容将在后续部分进行展示和说明。
DeFiPoser 的两种实现思路

接下来,我们将更深入地研究这两种方法所对应的系统框架,它们统称为 DeFiPoser,其中 ARB 版本基于贝尔曼–福特算法,而 SMT 版本则基于 SMT 求解器。
区块链的历史决定了我们是如何演化到当前状态的,但在这个例子中,我们只关注某一个特定的区块 i。在 DeFi 场景下,市场会因为交易不断发生变化,当区块链状态相较于之前发生变化时,我们就可以重新调用 SMT 版本或 ARB 版本来进行分析。
我们首先来看 ARB 版本,也就是基于贝尔曼–福特算法的 DeFiPoser。其核心思想是构建一个覆盖多个市场的 DeFi 图结构,通过运行贝尔曼–福特算法来检测图中是否存在负权重循环,这正是该算法的关键功能,它可以判断套利循环是否存在。负循环可能存在,也可能不存在,有时甚至一个都无法找到。在此基础上,系统还会执行所谓的贪婪搜索,对检测到的多个潜在循环进行进一步搜索和筛选,从中选择对当前策略而言最具盈利性的套利路径。整个过程会持续重复执行,以不断发现新的机会。
相比之下,SMT 求解器的流程要稍微复杂一些,它涉及多个不同的步骤,但最终目标仍然是发现有利可图的交易路径。
首先,我们需要对 DeFi 协议进行手动建模,例如以 Uniswap 为例,需要编写一个模型来准确描述 Uniswap 的运行机制,同样的方法也适用于 Curve 以及其他 DeFi 协议。在完成协议建模之后,还需要引入一些启发式算法,尤其是路径剪枝启发式算法,用于排除 DeFi 图中某些我们不希望考虑的路径,从而缩小搜索空间。最终,所有建模结果和约束条件都会被输入到定理求解器中并启动求解过程。目前市面上已经存在多种成熟的定理证明器,例如 Z3 和 Solver。
通过图表理解 DeFiPoser - 贝尔曼福特算法

现在,让我们来看一个具体的 DeFi 图例子,为了便于说明,我们以 DeFiPoser-ARB,也就是贝尔曼–福特算法版本的 DeFiPoser 为例。
在这个示例中,我们有一个包含四个市场的区块链状态,其中分别有资产 A 和 B、 B 和 A、B 和 C 以及 C 和 A。如果观察这些市场,会发现红色市场和蓝色市场实际上都持有相同的资产。我们的目标是以资产 A 的一个单位作为输入,通过一系列交易获得更多的输出,从而使收益超过最初的投入。这就是通过这个例子所要直观展示的内容。
如果我们只关注这个特定的区块链状态,可以发现可以进行的操作。首先进入红色市场,在这里将 A 换成 B,然后再进入蓝色市场,将 B 换回 A。我们希望通过这种循环交易获得 P1 乘以 P4 的回报,其中 P1 和 P4 分别代表两个市场上的价格。如果 P1 乘以 P4 大于 1,那么交易就具有盈利性,在这种情况下,就可以在这两个市场之间进行套利操作,从而实现超额收益。

现在,我们也可以考虑跨三个市场的循环交易。最开始,我们依然进入红色市场,将资产 A 换成 B,然后进入黄色市场,将 B 换成 C,最后进入绿色市场,将 C 换回 A。刚才展示的这两种交易方案都是循环套利,并且在这种特定的市场状态下都是可行的。同样地,和之前的例子一样,有利可图的条件就是价格乘积大于 1。

如果用图表来建模这些交易路径,就可以将它看作一个传统的贝尔曼-福特图。我们将每条边权设为 −log p,当图中存在环使得权重之和小于 0 时,即说明存在“有利可图”的环。通过将“乘积获利条件”转为“加和为负”的路径问题,实现了算法的负环检测机制,可据此检测出套利机会。
DeFiPoser - 定理求解器

DeFiPoser-SMT 求解器就是我们之前讨论过的另一种解决方案。它的整体思路是分阶段进行的:
首先在第一阶段构建一个形式化模型,用来刻画 DeFi 操作以及具体 DeFi 平台的行为。也就是说,需要把像 Uniswap、Curve 这样的协议纳入模型之中,并将其运行逻辑进行抽象和表示。这个过程本质上是一种“语言翻译”,例如将 Solidity 中的合约逻辑转换为 SMT 求解器能够处理的符号化模型语言。
随后会进行路径剪枝,通过引入启发式方法来缩小搜索空间,避免无意义或无限循环的路径,从而确保求解过程只关注有限且可行的解。
完成这些准备之后,就可以将所有信息输入 SMT 求解器,并为其设置目标约束,例如要求最终利润大于某个给定阈值。举例来说,可以将目标设为 1 个以太币,然后尝试判断是否存在满足该约束的解;如果不存在,就逐步降低目标值,比如改为 0.5 个以太币,并通过类似二分搜索的方式不断逼近最优结果。最终,SMT 求解器会告诉我们,在给定目标利润的前提下是否存在可行解,从而帮助我们找到尽可能接近最优的套利机会。
两类 DeFiPoser 的评估实验

在对 DeFiPoser 进行评估时,我们可以较为客观地比较贝尔曼福特算法版本(DeFiPoser-ARB)与定理求解器版本(DeFiPoser-SMT)的表现。评估结果通常以区块编号作为横轴,用来表示时间维度,也就是区块链随时间推进的状态变化。
本次实验覆盖了从 2020 年初到 2020 年 5 月这一时间段,可以看到在该区间内,DeFiPoser-ARB 实际上获得了更高的累计收益,这里的收益以以太币计量。从图中还可以观察到,DeFiPoser-ARB 的交易手续费略高于 DeFiPoser-SMT,这很可能是因为 ARB 版本能够发现更多潜在的套利资金来源,因此执行了更多交易。
作为评估的一部分,实验在 Uniswap、Bancor 和 MakerDAO 等市场上共执行了 96 次操作,涵盖了 25 种资产。虽然从传统金融的角度来看这似乎已经不少,但在 DeFi 的语境下,这其实只是非常有限的一部分市场和资产。实验结果表明 DeFiPoser-ARB 确实能够产生更高的收益,但 SMT 求解器在某些场景下具备独特优势。
例如,在对某些平台的分析中,DeFiPoser-SMT 能够检测到特定类型的攻击,而 DeFiPoser-ARB 则无法做到这一点,其原因在于这些攻击并不包含循环结构,而贝尔曼福特算法本质上依赖于对循环套利的检测。因此,在对目标平台进行精细建模的前提下,SMT 这类更复杂的工具有时能够发现贝尔曼福特算法难以捕捉的攻击或异常行为。
最后从整体角度进行比较,可以发现,用于生成有利可图 DeFi 交易路径的方法有多种,不同方法在路径选择机制、是否需要手动建模以及可扩展性方面各有取舍。理想情况下,应尽量避免大量手动建模,否则系统很难扩展;但与此同时,又必须能够捕捉非循环策略,因为现实中已知的许多 DeFi 攻击本身并不是循环的。
此外,还需要关注参数选择是否最优,以及解决方案本身的复杂度。在这一点上,DeFiPoser-ARB 的实现仅包含大约 300 行 Python 代码,而 SMT 版本的复杂度几乎高出一个数量级,这也直观反映了两种方法在工程复杂性上的巨大差异。
九、无常损失
Section titled “九、无常损失”向 AMM 提供流动性时,无常损失(impermanent loss)是一种经常被忽视但并不复杂的风险。
以一个 ETH/DAI 流动性池为例,可以直观地理解这一现象:

假设当前 ETH 与 DAI 的价格为 1 ETH = 100 DAI,Alice 以这个比例向池子中提供了 1 个 ETH 和 100 个 DAI,总价值为 200 美元,因此她获得了该流动性池 10% 的份额。此时,她作为流动性提供者所持有的资产价值,与单纯持币是等价的。
随后,市场价格发生了剧烈变化,ETH 的价格上涨到 1 ETH = 400 DAI,相当于价格上涨了 4 倍。由于流动性池中的价格与外部市场出现偏差,套利者 Bob 进入市场进行套利交易,通过不断交换资产来平衡池内价格。
最终,池子中的资产结构发生了变化,只剩下 5 个 ETH 和 2000 个 DAI。此时,如果 Alice 选择退出流动性池,按照她 10% 的份额,她可以取回 0.5 个 ETH 和 200 个 DAI,按照当前市场价格计算,总价值为 400 美元。
乍一看,Alice 似乎赚了钱,因为她最初投入的是 200 美元,现在取回了 400 美元。但如果她当初什么都不做,只是单纯持有 1 个 ETH 和 100 个 DAI,那么在 ETH 价格上涨到 400 DAI 的情况下,这些资产的总价值将达到 500 美元。
也就是说,相比于”什么都不做”,她因为向 AMM 提供流动性而少赚了 100 美元。这部分差额正是无常损失的体现:它并不是绝对亏损,而是相对于持币策略而言的机会成本。在这个例子中,ETH 价格的大幅上涨使得 Alice 错失了更高的潜在收益,最终只获得了 400 美元,而不是本可以达到的 500 美元。
这种减值损失本质上只是自动化做市商(AMM)市场动态的一个具体体现,而且几乎所有流动性提供者都有可能遇到这种情况。无论是谁,只要向资金池提供流动性,都可能面临无常损失。当然,如果你提供的是 DAI、USDC 这类稳定币,而不是像以太坊这样的波动性资产,例如资金池由 USDC 和 DAI 组成,那么两种资产价格出现明显分歧的概率通常较低,但一旦发生脱锚或失去锚定的情况,无常损失依然可能出现。
无常损失之所以被称为”无常”,是因为它并不是永久性的,只有当你实际将流动性从资金池中取出时,这种损失才会被真正实现。在之前的例子中,如果 Alice 一直留在池子里而不退出,那么这种损失在账面上并不会发生。你可以把最初的状态理解为一个起点,当价格发生变化后,池中资产的总价值也会随之变化,这个变化既可能向下,也可能向上。只要一个资金池中包含两种或两种以上不同的资产,就始终存在无常损失出现的可能性。
需要注意的是,无常损失在极端情况下甚至可能导致接近全部价值的损失。交易手续费有时可以在一定程度上弥补这种损失,但也存在无法覆盖的情况,流动性挖矿奖励同样可能有所帮助,却并非万能。无常损失在表现形式上与脱锚现象有相似之处,但通常对稳定币的大规模脱锚并不是主要影响因素,因此要找到一个彻底的解决方案并不容易。总体来说,无常损失是一种广泛存在于 AMM 体系中的风险,它不仅存在于流动性池中,在杠杆或借贷池等涉及一篮子资产的场景下同样存在,只要你处理的是多资产组合,这种风险就不可避免。