UNPKG

@kamino-finance/kliquidity-sdk

Version:

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

95 lines 5.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RaydiumTickUtils = exports.RaydiumLiquidityMath = exports.RaydiumTickMath = exports.RaydiumSqrtPriceMath = void 0; exports.decodeRaydiumPersonalPosition = decodeRaydiumPersonalPosition; exports.i32ToBytes = i32ToBytes; exports.getPdaProtocolPositionAddress = getPdaProtocolPositionAddress; const lib_1 = require("@raydium-io/raydium-sdk-v2/lib"); const web3_js_1 = require("@solana/web3.js"); function decodeRaydiumPersonalPosition(data) { return lib_1.PersonalPositionLayout.decode(data); } // Big-endian on purpose: the on-chain CLMM program derives both protocol-position and // tick-array PDAs with tick_index.to_be_bytes(), and all existing mainnet // ProtocolPositionState accounts live at BE-derived addresses. raydium-sdk-v2 >= 0.2.x // switched its own getPdaProtocolPositionAddress to little-endian, which only works for // Raydium because the program now treats protocol_position as a deprecated unchecked // account — but we store and read this address, so we must keep the BE derivation. function i32ToBytes(num) { const arr = new ArrayBuffer(4); new DataView(arr).setInt32(0, num, false); return new Uint8Array(arr); } function getPdaProtocolPositionAddress(programId, poolId, tickLower, tickUpper) { const [publicKey, nonce] = web3_js_1.PublicKey.findProgramAddressSync([ Buffer.from('position', 'utf8'), poolId.toBuffer(), Buffer.from(i32ToBytes(tickLower)), Buffer.from(i32ToBytes(tickUpper)), ], programId); return { publicKey, nonce }; } class RaydiumSqrtPriceMath { static sqrtPriceX64ToPrice(sqrtPriceX64, decimalsA, decimalsB) { return lib_1.TickUtil.sqrtPriceX64ToPrice(sqrtPriceX64, decimalsA, decimalsB); } static priceToSqrtPriceX64(price, decimalsA, decimalsB) { return lib_1.TickUtil.priceToSqrtPriceX64(price, decimalsA, decimalsB); } static getSqrtPriceX64FromTick(tick) { return lib_1.TickUtil.getSqrtPriceAtTick(tick); } static getTickFromPrice(price, decimalsA, decimalsB) { return lib_1.TickUtil.priceToTick(price, decimalsA, decimalsB); } static getTickFromSqrtPriceX64(sqrtPriceX64) { return lib_1.TickUtil.getTickAtSqrtPrice(sqrtPriceX64); } } exports.RaydiumSqrtPriceMath = RaydiumSqrtPriceMath; class RaydiumTickMath { static getTickWithPriceAndTickspacing(price, tickSpacing, mintDecimalsA, mintDecimalsB) { const tick = RaydiumSqrtPriceMath.getTickFromPrice(price, mintDecimalsA, mintDecimalsB); const roundedTick = tick < 0 ? Math.floor(tick / tickSpacing) : Math.ceil(tick / tickSpacing); return roundedTick * tickSpacing; } static roundPriceWithTickspacing(price, tickSpacing, mintDecimalsA, mintDecimalsB) { const tick = this.getTickWithPriceAndTickspacing(price, tickSpacing, mintDecimalsA, mintDecimalsB); return RaydiumSqrtPriceMath.sqrtPriceX64ToPrice(RaydiumSqrtPriceMath.getSqrtPriceX64FromTick(tick), mintDecimalsA, mintDecimalsB); } } exports.RaydiumTickMath = RaydiumTickMath; class RaydiumLiquidityMath { static addDelta(x, y) { return lib_1.LiquidityMathUtil.addDelta(x, y); } static getTokenAmountAFromLiquidity(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp) { return lib_1.LiquidityMathUtil.getAmountForLiquidityA(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp); } static getTokenAmountBFromLiquidity(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp) { return lib_1.LiquidityMathUtil.getAmountForLiquidityB(sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp); } static getLiquidityFromTokenAmountA(sqrtPriceX64A, sqrtPriceX64B, amountA, _roundUp) { return lib_1.LiquidityMathUtil.getLiquidityFromAmountA(sqrtPriceX64A, sqrtPriceX64B, amountA); } static getLiquidityFromTokenAmountB(sqrtPriceX64A, sqrtPriceX64B, amountB) { return lib_1.LiquidityMathUtil.getLiquidityFromAmountB(sqrtPriceX64A, sqrtPriceX64B, amountB); } static getLiquidityFromTokenAmounts(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, amountA, amountB) { return lib_1.LiquidityMathUtil.getLiquidityFromAmounts(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, amountA, amountB); } static getAmountsFromLiquidity(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp) { return lib_1.LiquidityMathUtil.getAmountsForLiquidity(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, roundUp); } static getAmountsFromLiquidityWithSlippage(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, amountMax, roundUp, amountSlippage) { return lib_1.LiquidityMathUtil.getAmountsFromLiquidityWithSlippage(sqrtPriceCurrentX64, sqrtPriceX64A, sqrtPriceX64B, liquidity, amountMax, roundUp, amountSlippage); } } exports.RaydiumLiquidityMath = RaydiumLiquidityMath; class RaydiumTickUtils { static getTickArrayStartIndexByTick(tickIndex, tickSpacing) { return lib_1.TickArrayUtil.getTickArrayStartIndex(tickIndex, tickSpacing); } } exports.RaydiumTickUtils = RaydiumTickUtils; //# sourceMappingURL=raydiumSdkCompat.js.map