# 聚合交易应该怎么做

Original: <https://lifelonglearn.ing/how-to-build-an-aggregation-trading-platform>

Author: [奶爸](https://lifelonglearn.ing/users/3b04650c-8231-499b-8ef0-381fc4d7efb0)

Published: 2021-09-01T10:48:05Z

Updated: 2026-09-27T06:57:43Z

Version: 2

现在 Aggregator 中同链 Swap 聚合在 EVM 生态中做的比较好的是 1inch，而在 Solana 生态中做的比较好的是 Jupiter，Jupiter 的撮合算法是「[经修改的 Bellman-Ford algorithm](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly9zdGF0aW9uLmp1cC5hZy9ibG9nL2p1cC12My1tZXRpcy1yb3V0aW5nLWFsZ28=)」，提供 self-hosted 版本。巧合的是截止文章发布时他们的版本都是 V6。

跨链 Swap+Brige 做的比较好的是 LiFi 和 Rango，因为像这种既集成了 Swap 又集成了 Bridge 的产品功能更加强大，可以 Swap & Brige，能够支持的交易对和场景更多。

## DEX

目前不管是 EVM 生态还是 Solana 生态，主流的 DEX 都是基于两种模型，一种是 ​**CFMM 恒定函数做市商**​，另一种是 ​**CLMM 集中流动性做市商**​。CFMM 的代表是 [Uniswap V2](https://lifelonglearn.ing/uniswap-v2) / Raydium，CLMM 的代表是 [Uniswap V3](https://lifelonglearn.ing/uniswap-v3) / Orca，这两个模式都是由 Uniswap 提出，Solana 生态也是从 AMM 过度到 CLMM 的。

AMM 的核心是 x*y=k，只要有池中两个 Token 的余额 x 和 y 就能计算任意价格下的交易结果。

CLMM 的核心是 tick 和 liquidity，目前开源的 DEX，大多都是 Uniswap V3 式的实现，使用 tick 和 liquidity 来计算交易，可以从[这里](https://lifelonglearn.ing/r/go?url=aHR0cHM6Ly91bmlzd2FwdjNib29rLmNvbS9taWxlc3RvbmVfMS9jYWxjdWxhdGluZy1saXF1aWRpdHkuaHRtbA==)了解详细计算过程。想要计算任意价格下的交易结果，需要拥有全部 tick 和 tick 上的 liquidity 的数据。

## Aggregator

### DEX Aggregator

DEX 聚合器有两种做法，一种是通过合约读取链上数据，另外一种是将链上数据保存到链下进行分析。

一种是直接通过 Quote 合约询价，这样做简单一些，不需要解析链上数据实现合约中的计算方法，对于 Uniswap V2 这种 CFMM 来说可以通过比例算出其他价格下的交易结果，但是在 Uniswap V3 这种 CLMM 采取合约询价的方式就无法对其他价格区间的交易结果进行计算了。

核心：x*y = k，买入卖出之后 k 值不变

另外一种是将 Pair 信息、Tick 信息存到链下中，实现合约中 Tick 移动时的行为，这样复杂一些但是可以进行更为细致精确的计算。

核心: 根据 tick 和 tick 上的流动性计算价格影响

### Bridge Aggregator

Bridge 一般来说比较简单，按照协议提供的合约接口去调用即可，bridge 的链上池数据结构一般比较简单或者有提供 restful API。

### 时序图

@startuml skinparam backgroundColor #ffffff00 skinparam DefaultFontColor #DodgerBlue skinparam handwritten true  skinparam sequence { ArrowColor LightSkyBlue ActorBorderColor LightSkyBlue LifeLineBorderColor LightSkyBlue LifeLineBackgroundColor #A9DCDF  ParticipantBorderColor LightSkyBlue ParticipantBackgroundColor DodgerBlue ParticipantFontName Impact ParticipantFontSize 17 ParticipantFontColor #A9DCDF  ActorBackgroundColor aqua ActorFontColor LightSkyBlue ActorFontSize 17 ActorFontName Impact }  actor User participant "Wallet" as A participant "Aggregator API" as B participant "Off-chain or on-chain Pair Data" as C participant "Aggregator Router" as D participant "Swap Router" as E participant "Bridge" as F  User -> A: 进入 Swap & Bridge 界面，\\n选择链和Token差 activate A  A -> B: /quote 接口寻找报价 activate B  B -> C: 查询相关 Pair 流动性数据 activate C  C -> B: 分析各个Swap\\nPair 流动性、进行大单拆单、多\\nPair 撮合 deactivate C  B -> A: 返回报价列表 deactivate B  A -> B: 选择报价，请求生成交易数据 activate B  B -> A: 构造 calldata 返回 deactivate B  A -> D: 提交 Aggregator Router 执行 activate D  D -> E: 根据 calldata 进行 swap 操作 activate E  E -> D: 划转 output token deactivate E  D -> F: swap 完成，approve 给 bridge 合约，开始跨链 activate F  F -> D: 收到跨链资产，交由协议执行 deactivate F  D -> A: 链上执行成功 deactivate D  note over B: aggregator 后端会记录跨链相关交易\\n，持续追踪状态  A -> B: 查询跨链状态 activate B  B -> A: 跨链成功，展示gas费协议费 deactivate B  A -> User: 流程结束 deactivate A  @enduml
