UNPKG

@orca-so/whirlpool-sdk

Version:

Whirlpool SDK for the Orca protocol.

59 lines (58 loc) 3.2 kB
"use strict"; 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, }; }