token

Cyber-GE

DeFi • 20 min read

DEX 聚合路由算法:从 500 万流动性池到最优交易路径

GE

TL;DR: DEX 聚合路由算法分两个阶段:首先从 500 万流动性池中筛选出约 1000 条可行路径,然后通过价格平衡算法将交易金额智能分配到多条路由,使所有路由的最终价格趋于一致,从而最大化总收益。对于 100 ETH 的大额交易,拆单优化可以比单一路由多获得 1500+ USDT。

前置知识:本文假设读者熟悉 AMM 的基本原理和滑点概念。如果不熟悉,建议先阅读 DEX 交易机制


问题的本质:在海量可能性中寻找最优解

当用户想用 ETH 换 USDT 时,面临的不是一个简单的查询问题,而是一个组合优化问题。

市场上有约 500 万个流动性池,每个池的价格、深度、手续费都不同。理论上,从 ETH 到 USDT 的路径可以是直接兑换,也可以经过一个或多个中间代币。如果考虑所有可能的组合,路径数量是天文数字——单是三跳路由就有数十亿种可能。

更复杂的是,大额交易会显著改变池子的状态。在一个池子里交易 100 ETH,滑点可能高达 5%;但如果把这 100 ETH 分散到 10 个池子,每个池子只承受 10 ETH 的冲击,总滑点可能降到 1% 以下。这意味着最优解不仅要找到好的路径,还要决定每条路径分配多少资金。

这就是 DEX 聚合路由算法要解决的核心问题:在海量的路径空间中,找到收益最大化的交易方案。


算法架构:两阶段优化

整个算法分为两个阶段,每个阶段解决一个子问题。

第一阶段:多跳路由生成。从 500 万个池子中,生成所有可行的交易路径,并筛选出约 1000 条优质候选路由。这个阶段的目标是「不遗漏好路径」,同时「过滤掉明显差的路径」。

第二阶段:拆单与价格优化。在候选路由中,决定每条路由分配多少资金,使总收益最大化。这个阶段的目标是「让所有被选中路由的最终价格趋于一致」——这是数学上可证明的最优条件。

DEX 聚合路由算法架构

两个阶段的分离是有意为之的。路由生成是一个离散的组合问题,适合用过滤和剪枝来处理;价格优化是一个连续的数值问题,适合用二分搜索来逼近。把它们分开,可以让每个阶段使用最适合的算法。


第一阶段:多跳路由生成

数据预处理:从 500 万到 50 万

原始数据中充斥着无效池子。有些是「貔貅币」——只能买入不能卖出的诈骗代币;有些是钓鱼池,用虚假的高收益吸引用户;还有大量流动性极低的池子,交易手续费都无法覆盖。

第一步是清洗数据。过滤规则包括:

  • 移除已知的诈骗代币和钓鱼池(基于黑名单)
  • 移除流动性低于 1 美元的池子(无法覆盖 Gas 费)
  • 移除长期无交易的死池

经过过滤,500 万个池子减少到约 50 万个有效池子。这一步将数据量减少了 90%,为后续计算奠定基础。

智能分组:按交易对特征分类

50 万个池子仍然太多,不能暴力枚举所有组合。关键洞察是:大多数组合是无效的。

以 ETH → USDT 交易为例,有效的路径必须满足「代币连续性」——前一跳的输出必须是后一跳的输入。这意味着我们可以按交易对特征将池子分组:

分组描述数量
ETH-USDT 池直达路由~200
ETH-TokenA 池二跳路由起点~1,500
TokenB-USDT 池二跳路由终点~5,000
TokenB-TokenC 池三跳路由中间段~300,000

分组之后,路由生成变成了在分组之间做笛卡尔积。单跳路由直接从 ETH-USDT 池中选取;二跳路由是 ETH-TokenA 池和 TokenA-USDT 池的组合;三跳路由则需要三个分组的组合。

路径生成与筛选

即使分组后,组合数量仍然庞大。二跳路由有 1,500 × 5,000 = 750 万种可能;三跳路由更是达到数十亿级别。

筛选策略是多层过滤,逐步收紧条件:

第一层:流动性深度过滤。计算每条路由的理论最大交易量(受限于路径中流动性最小的池子),移除低于阈值(如 100 美元)的路由。

第二层:代币匹配验证。确保路径的连贯性——前一跳输出的代币必须与后一跳输入的代币完全匹配。这听起来显而易见,但在实际数据中,同名代币可能有不同的合约地址。

第三层:路由去重。移除在同一条路由中重复使用同一个池子的情况。这种路由在数学上是无效的——你不能在同一个池子里同时买入和卖出同一种代币。

第四层:成本估算。对每条路由进行粗略的成本估算,包括预期滑点和 Gas 费用。移除成本明显过高的路由。

第五层:数量限制。为了保证后续计算的性能,最终保留约 1000 条优质路由。如果筛选后数量仍然过多,递归地收紧筛选条件,直到满足限制。

经过五层筛选,从数十亿条理论路径收敛到 1000 条实用路由。


第二阶段:拆单与价格优化

为什么要拆单

先看一个具体的对比。

不拆单:100 ETH 全部走 Uniswap V3 的 ETH-USDT 池。由于交易量大,滑点达到 5%,最终获得 199,500 USDT。

拆单:将 100 ETH 分配到多条路由。

路由分配滑点获得
Uniswap V335 ETH2%71,540 USDT
SushiSwap30 ETH1.5%61,710 USDT
Curve20 ETH1%41,580 USDT
Balancer15 ETH0.8%31,248 USDT
合计100 ETH206,078 USDT

拆单后多获得 6,578 USDT,收益提升 3.3%。对于大额交易,这个差异非常可观。

拆单有效的原因是 AMM 的滑点是非线性的。在恒定乘积公式下,滑点与交易量的平方成正比。把一笔大交易拆成多笔小交易,总滑点会显著降低。

最优分配的数学原理

什么样的分配是最优的?答案是:让所有被选中路由的最终价格趋于一致

这个结论可以用反证法证明。假设最优分配下,路由 A 的最终价格是 2,100 USDT/ETH,路由 B 的最终价格是 2,000 USDT/ETH。那么我们可以从路由 A 移一点资金到路由 B——路由 A 的价格会上升(因为交易量减少),路由 B 的价格会下降(因为交易量增加)。只要两者价格不相等,这种调整就能增加总收益。因此,最优解必然是所有路由价格相等。

这个原理类似于连通器中的水位平衡。每条路由就像一个水池,初始水位(价格)不同。我们要往这些水池里注水(分配资金),使最终水位趋于一致。

价格平衡原理

两步搜索算法

知道了最优条件,问题变成了:如何找到那个「平衡价格」?

我们使用两步搜索法:

第一步:确定价格区间

  • 价格下限:用全部资金走单一最优路由时的成交价
  • 价格上限:用极小金额(如 0.1 ETH)测试所有路由,取最高价

这一步确定了搜索范围。最优价格一定在这个区间内。

第二步:二分搜索逼近

给定一个目标价格 P,我们可以计算每条路由需要分配多少资金才能使其最终价格等于 P。如果所有路由的分配总和大于实际交易量,说明 P 太高,需要降低;反之则需要提高。

while (price_high - price_low > 1e-7):
    price_mid = (price_high + price_low) / 2
    total_allocation = sum(calculate_allocation(route, price_mid) for route in routes)
    
    if total_allocation > target_amount:
        price_high = price_mid
    else:
        price_low = price_mid

二分搜索的收敛速度是对数级的。通常 20-30 次迭代就能达到足够的精度。

路由数量限制

实际系统中,路由数量不能无限多。每增加一条路由,就增加一次链上交易,Gas 费用会累加。通常限制在 16 条以内。

如果初步计算得到的路由数量超过限制,需要进一步筛选。策略是逐步提高最小分配金额阈值,移除分配量过小的路由,直到数量满足限制。


实际效果

在生产环境中,算法的效果与交易规模相关:

交易规模收益提升典型路由数
< 1 ETH0.1-0.3%1-3
1-10 ETH0.3-0.8%3-8
10-100 ETH0.8-2%8-16
> 100 ETH1-3%16

小额交易的优化空间有限,因为 Gas 费用占比较高。大额交易的优化空间显著,拆单带来的收益远超额外的 Gas 成本。


局限性与权衡

延迟与准确性的权衡

路由计算需要时间。筛选 500 万个池子、生成路径、优化分配,整个过程可能需要数百毫秒。在这段时间内,市场价格可能已经变化。

实际系统通常采用缓存策略:预先计算常见交易对的路由,定期更新。用户请求时直接返回缓存结果,牺牲一定的准确性换取响应速度。

MEV 风险

聚合器的交易通常是公开的。专业的 MEV 机器人可以监控内存池,在用户交易之前插入自己的交易(front-running),或者在用户交易之后套利(back-running)。

部分聚合器通过私有交易池(如 Flashbots)来规避这个问题,但这增加了系统复杂性。

Gas 费用的不确定性

路由计算时估算的 Gas 费用可能与实际执行时不同。网络拥堵时,Gas 价格可能飙升,导致原本有利可图的拆单变得不划算。


进一步阅读

edit_note

"Code is poetry written for machines, but read by humans. Optimize for the latter."

Related Trigrams

Qián - The Creative

卦辞 · Judgment

"元亨利贞。"

象曰 · Image

天行健,君子以自强不息。

今日启示 · Insight

创造力与领导力的时刻。保持正直,大事可成。