kamino-sdk-beta
Version:
Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol
72 lines • 3.93 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRemoveLiquidityQuote = getRemoveLiquidityQuote;
// Source: https://raw.githubusercontent.com/orca-so/whirlpool-sdk/main/src/position/quotes/remove-liquidity.ts
/**
* Added roundUp flag to accurately estimate token holdings for deposits
*/
const whirlpool_client_sdk_1 = require("@orca-so/whirlpool-client-sdk");
const whirlpool_sdk_1 = require("@orca-so/whirlpool-sdk");
const raydium_sdk_1 = require("@raydium-io/raydium-sdk");
function getRemoveLiquidityQuote(param, roundUp = false) {
const positionStatus = whirlpool_sdk_1.PositionUtil.getPositionStatus(param.tickCurrentIndex, param.tickLowerIndex, param.tickUpperIndex);
switch (positionStatus) {
case whirlpool_sdk_1.PositionStatus.BelowRange:
return getRemoveLiquidityQuoteWhenPositionIsBelowRange(param, roundUp);
case whirlpool_sdk_1.PositionStatus.InRange:
return getRemoveLiquidityQuoteWhenPositionIsInRange(param, roundUp);
case whirlpool_sdk_1.PositionStatus.AboveRange:
return getRemoveLiquidityQuoteWhenPositionIsAboveRange(param, roundUp);
default:
throw new Error(`type ${positionStatus} is an unknown PositionStatus`);
}
}
function getRemoveLiquidityQuoteWhenPositionIsBelowRange(param, roundUp = false) {
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 estTokenA = (0, whirlpool_sdk_1.getTokenAFromLiquidity)(liquidity, sqrtPriceLowerX64, sqrtPriceUpperX64, roundUp);
const minTokenA = (0, whirlpool_sdk_1.adjustForSlippage)(estTokenA, slippageTolerance, roundUp);
return {
positionAddress,
minTokenA,
minTokenB: raydium_sdk_1.ZERO,
estTokenA,
estTokenB: raydium_sdk_1.ZERO,
liquidity,
};
}
function getRemoveLiquidityQuoteWhenPositionIsInRange(param, roundUp = false) {
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 estTokenA = (0, whirlpool_sdk_1.getTokenAFromLiquidity)(liquidity, sqrtPriceX64, sqrtPriceUpperX64, roundUp);
const minTokenA = (0, whirlpool_sdk_1.adjustForSlippage)(estTokenA, slippageTolerance, roundUp);
const estTokenB = (0, whirlpool_sdk_1.getTokenBFromLiquidity)(liquidity, sqrtPriceLowerX64, sqrtPriceX64, roundUp);
const minTokenB = (0, whirlpool_sdk_1.adjustForSlippage)(estTokenB, slippageTolerance, roundUp);
return {
positionAddress,
minTokenA,
minTokenB,
estTokenA,
estTokenB,
liquidity,
};
}
function getRemoveLiquidityQuoteWhenPositionIsAboveRange(param, roundUp = false) {
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 estTokenB = (0, whirlpool_sdk_1.getTokenBFromLiquidity)(liquidity, sqrtPriceLowerX64, sqrtPriceUpperX64, roundUp);
const minTokenB = (0, whirlpool_sdk_1.adjustForSlippage)(estTokenB, slippageTolerance, roundUp);
return {
positionAddress,
minTokenA: raydium_sdk_1.ZERO,
minTokenB,
estTokenA: raydium_sdk_1.ZERO,
estTokenB,
liquidity,
};
}
//# sourceMappingURL=remove-liquidity.js.map