Use these routes to simplify the process of exiting a yield farming position, automatically unwinding complex vault or LP tokens back into a base asset like a stablecoin or native token.
Note on Route Mechanics: The steps listed below are illustrative of a possible path. Enso’s API dynamically calculates the most efficient route at the moment of execution, so the exact swaps and bridges may vary based on real-time market conditions.
Table of Contents

Withdraw Yearn Curve mUSD Vault to USDC

Unwind a Yearn Curve mUSD vault position back to the base asset, USDC, on Ethereum. Try this route →
const CurveMUSD_yVault = "0x8cc94ccd0f3841a468184aca3cc478d2148e1757" as Address; // Yearn Curve mUSD Pool yVault
const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: ETHEREUM_CHAIN,
 amountIn: ["1000000000000000000"], // Example amount for yVault token
 tokenIn: [CurveMUSD_yVault],
 tokenOut: [USDC],
 routingStrategy: "delegate",
 slippage: "100", // 1% slippage
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Redeem from Yearn Curve mUSD Pool yVault ( 0x8cc94ccd0f3841a468184aca3cc478d2148e1757 ) to receive Curve mUSD LP tokens
  • Redeem from Curve.fi mUSD Pool ( 0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6 ) to receive Curve 3pool LP tokens
  • Redeem from Curve.fi 3pool ( 0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7 ) to receive USDC

Withdraw Yearn Curve alUSD Vault to USDC

Unwind a Yearn Curve alUSD vault position back to the base asset, USDC, on Ethereum. Try this route →
const CurveAlUSD_yVault = "0xa74d4b67b3368e83797a35382afb776baae4f5c8" as Address; // Yearn Curve alUSD Pool yVault
const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: ETHEREUM_CHAIN,
 amountIn: ["1000000000000000000"], // Example amount for yVault token
 tokenIn: [CurveAlUSD_yVault],
 tokenOut: [USDC],
 routingStrategy: "delegate",
 slippage: "100", // 1% slippage
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Redeem from Yearn Curve alUSD Pool yVault ( 0xa74d4b67b3368e83797a35382afb776baae4f5c8 ) to receive Curve alUSD LP tokens
  • Redeem from Curve.fi alUSD Pool ( 0x43b4fdfd4ff969587185cdb6f0bd875c5fc83f8c ) to receive Curve 3pool LP tokens
  • Redeem from Curve.fi 3pool ( 0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7 ) to receive USDC

Unstake styHONEY to BERA

Unstake a styHONEY position and convert it back to the native gas token, BERA, on Berachain. Try this route →
import { Address, EnsoClient, RouteParams } from "@ensofinance/sdk";

const BERACHAIN_MAINNET = 80094;
const userAddress = "your-wallet-address" as Address;

const styHONEY = "0x99d6A0FB9420F3995fD07dCc36AC827a8E146cf9" as Address;
const yHONEY = "0xC82971BcFF09171e16Ac08AEE9f4EA3fB16C3BDC" as Address;
const HONEY = "0xfcbd14dc51f0a4d49d5e53c2e0950e0bc26d0dce" as Address;
const BERA = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: BERACHAIN_MAINNET,
 amountIn: ["1000000000000000000"], // 1 styHONEY
 tokenIn: [styHONEY],
 tokenOut: [BERA],
 routingStrategy: "delegate",
 slippage: "300", // 3% slippage for redemption
 referralCode: "styhoney-bera",
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Redeem styHONEY to receive yHONEY.
  • Redeem yHONEY to receive HONEY.
  • Swap HONEY to BERA through Enso’s routing.

Withdraw Rooster LP (nALPHA/pUSD) to Native Plume

Completely unwind a Rooster YAP LP (nALPHA/pUSD) position back to the native Plume token on Plume. Try this route →
const ROOSTER_YAP_NALPHA_PUSD = "0xfc3bd0e01b4e755aedd2a4087ccdb90c4d28f038" as Address;
const PLUME = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: ROOSTER_CHAIN,
 amountIn: ["100000000000000000000"], // 100 Rooster YAP tokens
 tokenIn: [ROOSTER_YAP_NALPHA_PUSD],
 tokenOut: [PLUME],
 routingStrategy: "delegate",
 slippage: "100", // 1% slippage
 referralCode: "rooster-exit-native",
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Redeem Rooster YAP pool tokens to underlying PUSD and nALPHA
  • Merge tokens using the enso.merge action
  • Swap PUSD to native Plume via internal exchange
  • Swap nALPHA to native Plume via internal exchange
  • Consolidate native Plume tokens in user wallet

Unstake kHYPE to USDT0

Unstake kHYPE and convert the underlying assets to the USDT0 stablecoin on HyperEVM. Try this route →
const KHYPE = "0xfd739d4e423301ce9385c1fb8850539d657c296d" as Address;
const USDT0 = "0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: HYPEREVM_CHAIN,
 amountIn: ["1000000000000000000"], // 1 kHYPE
 tokenIn: [KHYPE],
 tokenOut: [USDT0],
 routingStrategy: "delegate",
 slippage: "100", // 1% slippage
 referralCode: "kinetiq-withdraw",
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Unstake kHYPE to HYPE via Kinetiq Protocol
  • Swap HYPE to USDT0 via internal exchange
  • Transfer USDT0 to user wallet

Unstake kHYPE to Native HYPE

Unstake kHYPE back to the native HYPE token on HyperEVM. Try this route →
const KHYPE = "0xfd739d4e423301ce9385c1fb8850539d657c296d" as Address;
const HYPE = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: HYPEREVM_CHAIN,
 amountIn: ["1000000000000000000"], // 1 kHYPE
 tokenIn: [KHYPE],
 tokenOut: [HYPE],
 routingStrategy: "delegate",
 slippage: "50", // 0.5% slippage
 referralCode: "kinetiq-unstake-native",
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Unstake kHYPE to native HYPE.

Unstake kHYPE to KEI

Unstake kHYPE and convert the underlying assets to Wrapped Ethereum (KEI) on HyperEVM. Try this route →
const KHYPE = "0xfd739d4e423301ce9385c1fb8850539d657c296d" as Address;
const KEI = "0xb5fe77d323d69eb352a02006ea8ecc38d882620c" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: HYPEREVM_CHAIN,
 amountIn: ["1000000000000000000"], // 1 kHYPE
 tokenIn: [KHYPE],
 tokenOut: [KEI],
 routingStrategy: "delegate",
 slippage: "100", // 1% slippage
 referralCode: "kinetiq-unstake-weth",
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Unstake kHYPE to HYPE and swap to KEI (WETH).

Unstake kHYPE to UBTC

Unstake kHYPE and convert the underlying assets to Wrapped Bitcoin (UBTC) on HyperEVM. Try this route →
const KHYPE = "0xfd739d4e423301ce9385c1fb8850539d657c296d" as Address;
const UBTC = "0x9fdbda0a5e284c32744d2f17ee5c74b284993463" as Address;

const routeParams: RouteParams = {
 fromAddress: userAddress,
 receiver: userAddress,
 chainId: HYPEREVM_CHAIN,
 amountIn: ["1000000000000000000"], // 1 kHYPE
 tokenIn: [KHYPE],
 tokenOut: [UBTC],
 routingStrategy: "delegate",
 slippage: "100", // 1% slippage
 referralCode: "kinetiq-unstake-wbtc",
};

const route = await client.getRouteData(routeParams);
await sendSmartWallet(route.tx, route.gas);
Route Mechanics:
  • Unstake kHYPE to HYPE and swap to UBTC.