Skip to content

聚合交易应该怎么做

Revision history · 1 Compare versions

现在 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 的余额 x 和 y 就能计算任意价格下的交易结果。

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

阿呆

阿呆 Guest ·v1

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

奶爸

奶爸 Guest ·v1

@阿呆 千万美金的市场

Commenting as a guest. A nickname is required; email is optional. Only new comments posted after verifying your email and signing in will appear on your profile. Existing guest comments will not be linked automatically.

Share article

聚合交易应该怎么做

Email X

View original ↗