Skip to content

Latest commit

 

History

History
70 lines (25 loc) · 1.95 KB

Butter Swap Flow.md

File metadata and controls

70 lines (25 loc) · 1.95 KB

Butter Swap流程详解

我们拿$BNB 换 $Near举例

Butter智能路由计算最佳Swap路径

根据用户输入规划最佳跨链Swap路径,路径分两类:

类1. Direct Swap直接兑换

当MAP Relay Chain中有特定流动性时,则直接兑换, 比如MAP上有 $mBNB和$mNear的token pair

类2. Aggregate Swap聚合兑换

若MAP中没有 $mBNB和$mNear的token pair, 则需要借助BSC和Near上的dex流动性完成兑换

MOS中做跨链Swap

同样分两种情况,direct swap和aggregate swap

1. Direct Swap

直接兑换说明MAP上有特定流动性,比如MAP中有$mBNB -> $mNear的流动性池,此时流程如下

​ a. 调用bsc mos的swapOut[Native/Token]方法, 逻辑和transferOut基本一致,将用户提供的$BNB锁住,并emit新的mapSwapOutEvent。

​ b. Messenger监听swapOut事件,调用MAP mos的swapIn方法

​ c. MAP mos swapIn方法去map流动性池中进行兑换,将mBNB换为mNear, 并emit mapSwapIn事件

​ d. messenger监听swapIn事件,调用Near mos的transferIn方法

2. Aggregate Swap

当map上没有mBNB和mNear的流动性池时,这时需要借助BSC和Near的dex流动性进行跨链兑换。假设map上没有$mBNB-$mNear的流动性,但是有mUSDC的流动性,则butter智能路由给出的最佳路径可能为 BNB -> USDC (PancakeSwap), USDC(MAP), USDC -> NEAR(ref.fi)。此类流程如下:

​ a. 调用bsc的butter core,完成BNB->USDC兑换,并调用bsc mos的swapOut方法。

​ b, messenger监听swapOut事件,调用MAP mos的swapIn方法

​ c. MAP mos SwapIn方法做处理并emit swapIn事件

​ d. messenger监听swapIn事件,调用Near mos的transferIn方法

​ e. Near mos transfer方法调用near上的butter core,将usdc -> Near, 存入toAddress.

Butter Core合约

Butter Core目前主要用于完成聚合兑换,类似MOS,每条链上都有相应的Butter Core来进行改链上的dex合约来完成聚合swap。