@orca-so/whirlpool-sdk
Version:
Whirlpool SDK for the Orca protocol.
59 lines (58 loc) • 3.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRemoveLiquidityQuote = void 0;
const sdk_1 = require("@orca-so/sdk");
const whirlpool_client_sdk_1 = require("@orca-so/whirlpool-client-sdk");
const public_1 = require("../utils/public");
function getRemoveLiquidityQuote(param) {
const positionStatus = public_1.PositionUtil.getPositionStatus(param.tickCurrentIndex, param.tickLowerIndex, param.tickUpperIndex);
switch (positionStatus) {
case public_1.PositionStatus.BelowRange:
return getRemoveLiquidityQuoteWhenPositionIsBelowRange(param);
case public_1.PositionStatus.InRange:
return getRemoveLiquidityQuoteWhenPositionIsInRange(param);
case public_1.PositionStatus.AboveRange:
return getRemoveLiquidityQuoteWhenPositionIsAboveRange(param);
default:
throw new Error(`type ${positionStatus} is an unknown PositionStatus`);
}
}
exports.getRemoveLiquidityQuote = getRemoveLiquidityQuote;
function getRemoveLiquidityQuoteWhenPositionIsBelowRange(param) {
const { positionAddress, tickLowerIndex, tickUpperIndex, liquidity, slippageTolerance } = param;
const sqrtPriceLowerX64 = (0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickLowerIndex);
const sqrtPriceUpperX64 = (0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickUpperIndex);
const minTokenA = (0, public_1.adjustForSlippage)((0, public_1.getTokenAFromLiquidity)(liquidity, sqrtPriceLowerX64, sqrtPriceUpperX64, false), slippageTolerance, false);
return {
positionAddress,
minTokenA,
minTokenB: sdk_1.ZERO,
liquidity,
};
}
function getRemoveLiquidityQuoteWhenPositionIsInRange(param) {
const { positionAddress, sqrtPrice, tickLowerIndex, tickUpperIndex, liquidity, slippageTolerance, } = param;
const sqrtPriceX64 = sqrtPrice;
const sqrtPriceLowerX64 = (0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickLowerIndex);
const sqrtPriceUpperX64 = (0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickUpperIndex);
const minTokenA = (0, public_1.adjustForSlippage)((0, public_1.getTokenAFromLiquidity)(liquidity, sqrtPriceX64, sqrtPriceUpperX64, false), slippageTolerance, false);
const minTokenB = (0, public_1.adjustForSlippage)((0, public_1.getTokenBFromLiquidity)(liquidity, sqrtPriceLowerX64, sqrtPriceX64, false), slippageTolerance, false);
return {
positionAddress,
minTokenA,
minTokenB,
liquidity,
};
}
function getRemoveLiquidityQuoteWhenPositionIsAboveRange(param) {
const { positionAddress, tickLowerIndex, tickUpperIndex, liquidity, slippageTolerance: slippageTolerance, } = param;
const sqrtPriceLowerX64 = (0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickLowerIndex);
const sqrtPriceUpperX64 = (0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickUpperIndex);
const minTokenB = (0, public_1.adjustForSlippage)((0, public_1.getTokenBFromLiquidity)(liquidity, sqrtPriceLowerX64, sqrtPriceUpperX64, false), slippageTolerance, false);
return {
positionAddress,
minTokenA: sdk_1.ZERO,
minTokenB,
liquidity,
};
}
;