Compare versions
Rendered content, compared by block. Red marks removed content; green marks added content. Scripts and interactive embeds are disabled.
今天看了 OneKey 钱包的 Swap 功能,发现只是接入了 0x 的服务,十分简陋。然后顺着 0x 的 GitHub 看了一遍,然后结合昨天研究 MetaMask Swap 得出的一些初步结论,奶爸就斗胆来规划一下,打造一个聚合交易平台
现在 Aggregator 中同链 Swap 聚合在 EVM 生态中做的比较好的是 1inch,而在 Solana 生态中做的比较好的是 Jupiter,Jupiter 的撮合算法是「经修改的 Bellman-Ford algorithm」,提供 self-hosted 版本。巧合的是截止文章发布时他们的版本都是 V6。
跨链 Swap+Brige 做的比较好的是 LiFi 和 Rango,因为像这种既集成了 Swap 又集成了 Bridge 的产品功能更加强大,可以 Swap & Brige,能够支持的交易对和场景更多。
0x[RFQ/DEX]: https://0x.org/docs/guides
1inch[AGG]: https://docs.1inch.io/api/
目前不管是 EVM 生态还是 Solana 生态,主流的 DEX 都是基于两种模型,一种是 CFMM 恒定函数做市商,另一种是 CLMM 集中流动性做市商。CFMM 的代表是 Uniswap V2 / Raydium,CLMM 的代表是 Uniswap V3 / Orca,这两个模式都是由 Uniswap 提出,Solana 生态也是从 AMM 过度到 CLMM 的。
AMM 的核心是 x*y=k,只要有池中两个 Token 的余额 x 和 y 就能计算任意价格下的交易结果。
AirSwap[RFQ]: https://about.airswap.io/technology/request-for-quote
CLMM 的核心是 tick 和 liquidity,目前开源的 DEX,大多都是 Uniswap V3 式的实现,使用 tick 和 liquidity 来计算交易,可以从这里了解详细计算过程。想要计算任意价格下的交易结果,需要拥有全部 tick 和 tick 上的 liquidity 的数据。
ParaSwap[AGG]: https://developers.paraswap.network/
let 最佳汇率;
range DEX:
range 交易对:
if 汇率 > 最佳汇率:
最佳汇率 = 汇率;
return 最佳汇率
一种是直接通过 Quote 合约询价,这样做简单一些,不需要解析链上数据实现合约中的计算方法,对于 Uniswap V2 这种 CFMM 来说可以通过比例算出其他价格下的交易结果,但是在 Uniswap V3 这种 CLMM 采取合约询价的方式就无法对其他价格区间的交易结果进行计算了。
A -> B 可能直接交易因为池深度不够,滑点会很大
A 20% -> B
30% -> C -> B
50% -> D -> B
这么拆分一下最终的滑点会比直接交易小
另外一种是将 Pair 信息、Tick 信息存到链下中,实现合约中 Tick 移动时的行为,这样复杂一些但是可以进行更为细致精确的计算。
与像 Watermute 这种专业做市商合作给他们撮合订单
以上其实就是做一个聚合交易平台核心的部分,至于前端其实怎么做都可以
Bridge 一般来说比较简单,按照协议提供的合约接口去调用即可,bridge 的链上池数据结构一般比较简单或者有提供 restful API。