UNPKG

butterjs-sdk

Version:
71 lines (25 loc) 2 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 Swapmap上没有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。