Deleveraging requires constructing a DeleverageStruct that specifies how to unwind your position:
// Define how much collateral to withdraw
const collateralAmount = ethers.utils.parseUnits('300', 18);
const repayAmount = ethers.utils.parseUnits('200', 18); // Amount of debt to repay
// Create swap data to convert collateral to borrow asset
// Note: This is an array of swaps, allowing for multi-hop routes
const swapData = [{
target: '0x1111111254EEB25477B68fb85Ed929f73A960582', // 1inch router
inputToken: underlyingAsset,
outputToken: borrowUnderlying,
inputAmount: ethers.utils.parseUnits('250', 18), // Amount needed to convert to repay debt
call: '0x...', // Encoded swap call data
}];
// Construct deleverage data
const deleverageData = {
positionToken: P_TOKEN,
collateralAmount: collateralAmount,
borrowToken: E_TOKEN,
swapData: swapData,
repayAmount: repayAmount,
auxData: '0x' // Optional for specialized protocols
};
// Set slippage tolerance (1%)
const slippage = ethers.utils.parseUnits('0.01', 18);
// Execute the deleverage transaction
const tx = await positionManagement.deleverage(
deleverageData,
slippage,
2000000
);
const receipt = await tx.wait();
console.log(`Position deleveraged! Tx hash: ${receipt.transactionHash}`);