聚合交易应该怎么做

You are viewing version v2 of this article, which has older versions: v1.

现在 Aggregator 中同链 Swap 聚合在 EVM 生态中做的比较好的是 1inch,而在 Solana 生态中做的比较好的是 Jupiter,Jupiter 的撮合算法是「经修改的 Bellman-Ford algorithm」,提供 self-hosted 版本。巧合的是截止文章发布时他们的版本都是 V6。

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

DEX

目前不管是 EVM 生态还是 Solana 生态,主流的 DEX 都是基于两种模型,一种是 CFMM 恒定函数做市商,另一种是 CLMM 集中流动性做市商。CFMM 的代表是 Uniswap V2 / Raydium,CLMM 的代表是 Uniswap V3 / Orca,这两个模式都是由 Uniswap 提出,Solana 生态也是从 AMM 过度到 CLMM 的。

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

CLMM 的核心是 tick 和 liquidity,目前开源的 DEX,大多都是 Uniswap V3 式的实现,使用 tick 和 liquidity 来计算交易,可以从这里了解详细计算过程。想要计算任意价格下的交易结果,需要拥有全部 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

Comments

阿呆 ·v1 Reply

每个字我都认识,连在一起我怎么就看不懂了呢?

奶爸 👲 ·v1 Reply

@阿呆 千万美金的市场