UNPKG

@kamino-finance/kliquidity-sdk

Version:

Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol

72 lines 3.89 kB
"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 utils_1 = require("./utils"); 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: utils_1.ZERO_BN, estTokenA, estTokenB: utils_1.ZERO_BN, 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: utils_1.ZERO_BN, minTokenB, estTokenA: utils_1.ZERO_BN, estTokenB, liquidity, }; } //# sourceMappingURL=whirlpools.js.map