Liquidity transfer from Fantom to Sonic

CrossCurve liquidity pools are starting their migration from the Fantom network to the Sonic network (learn more here). In this step-by-step guide, we will explore how to safely and profitably transfer your liquidity.

When migrating to Sonic, the architecture of the pools changes—instead of pools with 8 directions, paired pools are now used. Therefore, before transferring liquidity, please decide which paired pools you will transfer your liquidity to and how you will do it:

  • You can simply withdraw liquidity from a pool with 8 tokens and distribute it across 8 corresponding paired pools.

  • Alternatively, you can divert all liquidity from such a pool to a single paired pool or split it across several.

It’s also important to understand that, unlike the previous architecture, paired pools now include not only the directional token (synthetic) but also a "universal" token (xfrxUSD for USD, xfrxETH for ETH, and scBTC for BTC assets). Thus, transferring liquidity will require both the destination token and the "local universal" token.

Learn more about the changes in pool architecture.

Pool Hub-Chain Structure Update

This update will also affect the structure of the pool hub-chain. The previous pool system used Curve stable pools with 8 assets, connected via liquidity provider (LP) tokens from one or more pools:

V1 Pools (xSTABLE, xSTABLE2, xSTABLE3) consist of 8 synthetic derivatives backed by the original asset locked in LP tokens on Curve.

CrossCurve MetaLayer introduces a fundamentally new approach—liquidity isolation, where each pool contains liquidity for only one direction:

V2 Each paired pool in the hub-chain consists of two tokens:

  • A universal token—an asset from Sonic, common for all pools of the same type (xfrxUSD for USD assets, xfrxETH for ETH, and scBTC for BTC).

  • A synthetic derivative, backed by the original asset locked in the Consensus Bridge. This can be either a single asset or LP tokens from Curve.

As a result, all xSTABLE pools will transform into 20+ paired pools. When transferring liquidity, it won’t be possible to do a one-to-one transfer, as paired pools require an additional "universal" pool token.

There are numerous ways to transfer liquidity, and it’s impossible to describe every scenario, so we’ll outline the key general steps:

  1. Choose the pool to which liquidity will be transferred, for example, xsArbitrum.

  2. Determine how many of each token is needed. In the Arbitrum example, you’ll need 25% frxUSD tokens and 25% scUSD tokens to obtain 50% xfrxUSD and 50% sUSDC_arb (percentages are based on the total liquidity planned for transfer to the xsArbitrum pool).

  3. Obtain the synthetic token corresponding to this direction—in this case, sUSDC_arb.

  4. For USD and ETH pools, you’ll need to obtain xfrxUSD or xfrxETH tokens, respectively. To do this, in Sonic, you need to acquire frxUSD, scUSD, frxETH, and scETH accordingly. For example, you’ll need equal amounts of frxUSD and scUSD to deposit into the CrossCurve frxUSD pool.

  5. Deposit the universal token and the destination token (synthetic) into the paired pool. In our example, you’ll need to deposit xfrxUSD and sUSDC_arb into the CrossCurve Stable ARB pool.

Brief list of all actions for Liquidity Transfer

If you provided liquidity to CrossCurve pools on the Farms tab in the Fantom network, you’ll need to follow these steps to transfer your funds from the Fantom network to the Sonic network:

  1. Unstake your position on the Farms page.

  2. Decide which pools your liquidity will be transferred to:

  • You can distribute liquidity across 8 directions.

  • You can choose one or several directions.

  1. Decide which method you’ll use to transfer liquidity:

    • In Easy Mode, directly swap LP tokens from the pool for the required tokens.

Examples of swap directions in Easy Mode:

  • xSTABLE sUSDT_eth

  • xSTABLE3 sUSDC_arb

  • xSTABLE2 sUSDC_ba

    • In Balanced Mode, withdraw 8 synthetic tokens from the LP token and swap them directly.

Examples of swap directions in Balanced Mode:

  • s3CRV_e sUSDT_eth

  • s2CRV_ar sUSDC_arb

  • s4pool_b sUSDC_ba

  1. Swap your FTM for S (or obtain S) to pay for gas (gwei).

  2. Obtain the universal token for paired pools:

  • For USD pools, obtain the LP token xfrxUSD.

  • For ETH pools, obtain the LP token xfrxETH.

  • For BTC pools, obtain the scBTC token.

  1. Obtain a synthetic token corresponding to the desired direction (e.g., sUSDT_eth, sUSDC_arb, sUSDC_ba, etc.)

  2. Deposit liquidity into the pools:

  • To obtain xfrxUSD, deposit frxUSD and scUSD into the pool.

  • To obtain xfrxETH, deposit frxETH and scETH into the pool.

  1. Lock liquidity in the new pools on the Sonic network to earn profits.

Detailed description of Liquidity Transfer actions

Unstake LP tokens from CrossCurve Pools on Fantom

Go to the Farms staking page to view all available pools and the size of your positions in them.

  1. First, withdraw accumulated rewards by clicking Claim in all pools and signing the transaction in your wallet.

  1. After successfully claiming rewards from the pool, click Unstake to withdraw LP tokens from staking.

  1. In the modal window, to select the maximum number of LP tokens to withdraw, click MAX next to the token balance in your wallet, then click Unstake to withdraw your liquidity from the pool and receive LP tokens on the Fantom network.

  1. Sign the transaction in your wallet.

Withdraw Liquidity from LP Tokens in the Pool

After receiving LP tokens, there are two methods to withdraw your liquidity:

  • Easy Mode via CrossCurve into a single asset of your choice (may incur penalties due to slippage).

  • Balanced Mode on Curve into the assets composing the LP in the pool (the most cost-effective method).

  1. Easy Mode via CrossCurve

To quickly withdraw liquidity using Easy Mode, go to the Liquidity page under the Yield tab.

In the pool list, under Choose pool, select the pool where you provided liquidity and have LP tokens.

Select the withdrawal mode Withdraw, operation type Easy Mode, and click Next to proceed.

Choose the asset you want to swap your LP token for by opening the selection list.

Enter the amount of LP tokens to swap or click MAX to select the entire balance from your wallet. Click Approve and confirm the LP token spending operation in your wallet.

After confirming the spending operation, click Swap to perform the exchange and sign the transaction in your wallet.

Wait for the transaction to be processed on-chain.

  1. Balanced Mode via Curve

To withdraw liquidity in Balanced Mode, go to the page of the pool you’re interested in on the Curve app using the quick link.

If you haven’t performed an unstake in the CrossCurve app, go to the Withdrawal/Claim menu under the Unstake tab. Enter the number of LP tokens to unstake, click Unstake, and sign the transaction in your wallet.

After the transaction is successfully confirmed on-chain, you’ll see a notification: Unstake Complete.

Claim the rewards on the Claim Rewards tab by clicking Claim and signing the transaction in your wallet.

To withdraw liquidity, go to the Withdraw tab, enter the number of LP tokens, select Balanced mode, and click Withdraw. Sign the transaction in your wallet.

After the transaction is successfully confirmed on-chain, you’ll see a notification: Withdraw Complete.

Obtaining Universal tokens for paired pools

Each paired pool in the Sonic hub-chain consists of two tokens:

  • A universal token—an asset from Sonic, common for all pools of the same type (xfrxUSD for USD assets, xfrxETH for ETH, and scBTC for BTC).

  • A synthetic derivative, backed by the original asset locked in the Consensus Bridge. This can be either a single asset or LP tokens from Curve.

Universal tokens come in three types:

  • For USD pools: LP token xfrxUSD.

  • For ETH pools: LP token xfrxETH.

  • For BTC pools: scBTC token.

Obtaining LP xfrxUSD

To obtain xfrxUSD, follow these three steps:

  1. Obtain frxUSD on Sonic.

  2. Obtain scUSD on Sonic.

  3. Deposit frxUSD and scUSD into the CrossCurve frxUSD pool to receive xfrxUSD.

You can obtain frxUSD and scUSD in various ways; below are a few methods.

Obtaining frxUSD on Sonic using CrossCurve and Frax bridge

frxUSD tokens on the Fraxtal network can be swapped from any available asset in the CrossCurve app.

Then, bridge them to the Sonic network on Frax.com.

Obtaining scUSD on Sonic using CrossCurve and Rings app

In the CrossCurve app, you can transfer any available asset to the Ethereum network, receiving USDT, USDC, or DAI.

Then, scUSD tokens can be swapped in the Rings app by depositing the available assets as collateral.

Obtaining frxUSD and scUSD using other bridges for Sonic

Choose your preferred app from the list of bridges in the mySonic section under Apps in the Bridge category.

Obtaining frxUSD and scUSD Using the Jumper.exchange Aggregator

Swaps are also available on the Jumper.exchange aggregator for any available assets.

Obtaining xfrxUSD via the Curve App interface

To obtain the LP token xfrxUSD, you need to provide liquidity in the CrossCurve frxUSD pool: https://curve.finance/dex/sonic/pools/factory-stable-ng-25/deposit/.

Go to the CrossCurve frxUSD pool page and connect your wallet.

Enter the desired deposit amount on the Deposit tab. To avoid losses due to slippage, it’s recommended to deposit funds in a balanced manner by clicking Add all coins in a balanced proportion (learn more here).

In the first transaction, confirm the spending of funds by clicking Approve Spending and signing the transaction in your wallet.

In the second transaction, deposit the funds by clicking Deposit and signing the transaction in your wallet.

After the transaction is successfully confirmed on-chain, your wallet will display the amount of received xfrxUSD LP tokens.

Obtaining LP xfrxETH

To obtain xfrxETH, follow these three steps:

  1. Obtain frxETH on Sonic.

  2. Obtain scETH on Sonic.

  3. Deposit frxETH and scETH into the CrossCurve frxETH pool to receive xfrxETH.

You can obtain frxETH and scETH in various ways; below are a few methods.

Obtaining frxETH on Sonic using CrossCurve and Frax bridge

wfrxETH tokens on the Fraxtal network can be swapped from any available asset in the CrossCurve app.

Then, bridge them to the Sonic network on Frax.com.

Obtaining scETH on Sonic using CrossCurve and Rings app

In the CrossCurve app, you can transfer any available asset to the Ethereum network, receiving WETH or ETH.

Then, scETH tokens can be swapped in the Rings app by depositing the available assets as collateral.

Obtaining scETH or frxETH on Sonic using other bridges for Sonic

Choose your preferred app from the list of bridges in the mySonic section under Apps in the Bridge category.

Obtaining scETH or frxETH Using the Jumper.exchange aggregator

Swaps are also available on the Jumper.exchange aggregator for any available assets.

Obtaining xfrxETH via the Curve App Interface

To obtain the LP token xfrxETH, you need to provide liquidity in the CrossCurve frxETH pool: https://curve.finance/dex/sonic/pools/factory-stable-ng-26/deposit/.

Go to the CrossCurve frxETH pool page and connect your wallet.

Enter the desired deposit amount on the Deposit tab. To avoid losses due to slippage, it’s recommended to deposit funds in a balanced manner by clicking Add all coins in a balanced proportion (learn more here).

In the first transaction, confirm the spending of funds by clicking Approve Spending and signing the transaction in your wallet.

In the second transaction, deposit the funds by clicking Deposit and signing the transaction in your wallet.

After the transaction is successfully confirmed on-chain, your wallet will display the amount of received xfrxETH LP tokens.

Obtaining scBTC

You can obtain scBTC using the official Rings issuer app. Alternatively, you can use third-party services listed below.

Obtaining scBTC on Sonic using CrossCurve and Rings app

In the CrossCurve app, you can transfer any available asset to the Ethereum network, receiving WBTC.

Then, scBTC tokens can be swapped in the Rings app by depositing WBTC on the Ethereum network as collateral.

Obtaining scBTC on Sonic using other bridges for Sonic

Choose your preferred app from the list of bridges in the mySonic section under Apps in the Bridge category.

Obtaining scBTC using the Jumper.exchange aggregator

Swaps are also available on the Jumper.exchange aggregator for any available assets.

Obtaining a Synthetic Derivative

Each paired pool on the Sonic hub-chain consists of two tokens:

  • A universal token – an asset from Sonic, uniform across all pools of the same type (e.g., xfrxUSD for USD assets, xfrxETH for ETH, and scBTC for BTC).

  • A synthetic derivative, backed by the original asset locked in the Consensus Bridge. These can be either single assets or LP tokens from Curve.

Synthetic tokens are categorized into three types:

  • s_Stable_chain, where Stable represents a USD asset variant, and chain is the network where the asset is used.

  • s_WETH_network, where WETH represents ETH backing, and chain is the network where the asset is used.

  • s_WBTC_network, where WBTC represents BTC backing, and chain is the network where the asset is used.

Each type of synthetic token corresponds to a pool where it can be paired in an LP token:

  • xs_chain, where xs is a stable pool, and chain is the network where the asset is used.

  • xe_chain, where xe is a volatile pool, and chain is the network where the asset is used.

  • xb_chain, where xb is a volatile pool, and chain is the network where the asset is used.

Obtaining sUSDC_arb

sUSDC_arb tokens on the Sonic network can be swapped from any available asset in the xsArbitrum pool via the CrossCurve app.

  1. Navigate to the Liquidity tab in the Yield section. Select the Balanced mode and click Next.

Enter the desired amount to swap, approve the spending by clicking Approve, and sign the transaction in your wallet.

Click Swap to execute the exchange and confirm the transaction in your wallet.

  1. If you know the swap direction, you can also perform the exchange in the Trade tab using any available asset.

Providing Liquidity to pools on Sonic

To provide liquidity to Sonic pools:

  • Select the pool where you want to transfer liquidity, e.g., xsArbitrum.

  • Determine the required token amounts.

  • Obtain the synthetic token for this direction, in this case, sUSDC_arb.

  • For USD pools, acquire xfrxUSD tokens. For example, deposit an equal amount of frxUSD and scUSD into the CrossCurve frxUSD pool.

  • Deposit the universal token and the directional (synthetic) token into the paired pool.

Obtaining LP xsArbitrum via Curve

Navigate to the CrossCurve Stable ARB pool page: https://curve.finance/dex/sonic/pools/factory-stable-ng-73/deposit/ and connect your wallet.

Enter the desired deposit amount in the Deposit tab. To avoid losses due to slippage, it’s recommended to deposit using the balanced method by clicking Add all coins in a balanced proportion (more details here).

In the first transaction, approve the spending by clicking Approve Spending and sign the transaction in your wallet.

In the second transaction, deposit the funds by clicking Deposit and sign the transaction in your wallet.

After the transaction is confirmed on-chain, the amount of received xsArbitrum LP tokens will appear in your wallet.

Obtaining LP xsArbitrum via CrossCurve

LP xsArbitrum tokens on the Sonic network can be swapped from any available asset in the xsArbitrum pool via the CrossCurve app.

Go to the Liquidity tab in the Yield section. Select the Easy mode and click Next.

Choose the available asset for the swap.

Enter the desired amount to swap, approve the spending by clicking Approve, and sign the transaction in your wallet.

Click Swap to execute the exchange and confirm the transaction in your wallet.

Depositing LP xsArbitrum into the CrossCurve Stable ARB Pool

To provide liquidity to CrossCurve pools navigate to the Farms page in the Yield section: https://app.crosscurve.fi/farm and connect your wallet.

In the xsArbitrum pool tab, click Stake LP and get rewards.

Enter the deposit amount, approve the spending by clicking Approve, and sign the transaction in your wallet.

After successful confirmation, deposit the funds by clicking Stake and sign the transaction in your wallet.

The deposited amount will appear in the Staked field.

You can view the current vAPR and accrued rewards in the selected pool by clicking on the APY icon.

Last updated