UNPKG

@marinade.finance/kamino-sdk

Version:
93 lines 5.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.deserializeTakeProfitRebalanceFromOnchainParams = exports.readTakeProfitRebalanceStateFromStrategy = exports.readTakeProfitRebalanceParamsFromStrategy = exports.getDefaultTakeProfitRebalanceFieldsInfos = exports.getPositionRangeFromTakeProfitParams = exports.getTakeProfitRebalanceFieldsInfos = exports.TakeProfitRebalanceTypeName = exports.DEFAULT_DESTINATION_TOKEN = exports.DEFAULT_UPPER_RANGE_PRICE_DIFF_BPS = exports.DEFAULT_LOWER_RANGE_PRICE_DIFF_BPS = void 0; const decimal_js_1 = __importDefault(require("decimal.js")); const CreationParameters_1 = require("../utils/CreationParameters"); const utils_1 = require("../utils"); const whirlpool_sdk_1 = require("@orca-so/whirlpool-sdk"); const bn_js_1 = __importDefault(require("bn.js")); const raydium_sdk_1 = require("@raydium-io/raydium-sdk"); exports.DEFAULT_LOWER_RANGE_PRICE_DIFF_BPS = new decimal_js_1.default(500); exports.DEFAULT_UPPER_RANGE_PRICE_DIFF_BPS = new decimal_js_1.default(500); exports.DEFAULT_DESTINATION_TOKEN = new decimal_js_1.default(1); exports.TakeProfitRebalanceTypeName = 'takeProfit'; function getTakeProfitRebalanceFieldsInfos(lowerRangePrice, upperRangePrice, destinationToken, enabled = true) { let rebalanceType = { label: 'rebalanceType', type: 'string', value: exports.TakeProfitRebalanceTypeName, enabled, }; let lowerRangePriceRebalanceFieldInfo = { label: 'rangePriceLower', type: 'number', value: lowerRangePrice, enabled, }; let upperRangePriceRebalanceFieldInfo = { label: 'rangePriceUpper', type: 'number', value: upperRangePrice, enabled, }; let destinationTokenRebalanceFieldInfo = { label: 'destinationToken', type: 'number', value: destinationToken, enabled, }; return [ rebalanceType, lowerRangePriceRebalanceFieldInfo, upperRangePriceRebalanceFieldInfo, destinationTokenRebalanceFieldInfo, ]; } exports.getTakeProfitRebalanceFieldsInfos = getTakeProfitRebalanceFieldsInfos; function getPositionRangeFromTakeProfitParams(dex, tokenADecimals, tokenBDecimals, lowerSqrtPriceX64, upperSqrtPriceX64) { if (dex == 'ORCA') { let lowerPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(lowerSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals); let upperPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(upperSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals); return { lowerPrice, upperPrice }; } else if (dex == 'RAYDIUM') { let lowerPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(lowerSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals); let upperPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(upperSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals); return { lowerPrice, upperPrice }; } else { throw new Error(`Unknown DEX ${dex}`); } } exports.getPositionRangeFromTakeProfitParams = getPositionRangeFromTakeProfitParams; function getDefaultTakeProfitRebalanceFieldsInfos(price) { let lowerPrice = price.mul(CreationParameters_1.FullBPSDecimal.sub(exports.DEFAULT_LOWER_RANGE_PRICE_DIFF_BPS)).div(CreationParameters_1.FullBPSDecimal); let upperPrice = price.mul(CreationParameters_1.FullBPSDecimal.add(exports.DEFAULT_UPPER_RANGE_PRICE_DIFF_BPS)).div(CreationParameters_1.FullBPSDecimal); return getTakeProfitRebalanceFieldsInfos(lowerPrice, upperPrice, price); } exports.getDefaultTakeProfitRebalanceFieldsInfos = getDefaultTakeProfitRebalanceFieldsInfos; function readTakeProfitRebalanceParamsFromStrategy(tokenADecimals, tokenBDecimals, rebalanceRaw) { let paramsBuffer = Buffer.from(rebalanceRaw.params); let params = {}; params['lowerRangePrice'] = raydium_sdk_1.SqrtPriceMath.sqrtPriceX64ToPrice(new bn_js_1.default((0, utils_1.readBigUint128LE)(paramsBuffer, 0).toString()), tokenADecimals, tokenBDecimals); params['upperRangePrice'] = raydium_sdk_1.SqrtPriceMath.sqrtPriceX64ToPrice(new bn_js_1.default((0, utils_1.readBigUint128LE)(paramsBuffer, 16).toString()), tokenADecimals, tokenBDecimals); params['destinationToken'] = new decimal_js_1.default(paramsBuffer.readUint8(32)); return params; } exports.readTakeProfitRebalanceParamsFromStrategy = readTakeProfitRebalanceParamsFromStrategy; function readTakeProfitRebalanceStateFromStrategy(rebalanceRaw) { let stateBuffer = Buffer.from(rebalanceRaw.state); let state = {}; state['step'] = new decimal_js_1.default(stateBuffer.readUInt8(0)); return state; } exports.readTakeProfitRebalanceStateFromStrategy = readTakeProfitRebalanceStateFromStrategy; function deserializeTakeProfitRebalanceFromOnchainParams(tokenADecimals, tokenBDecimals, rebalanceRaw) { let params = readTakeProfitRebalanceParamsFromStrategy(tokenADecimals, tokenBDecimals, rebalanceRaw); return getTakeProfitRebalanceFieldsInfos(params['lowerRangePrice'], params['upperRangePrice'], params['destinationToken']); } exports.deserializeTakeProfitRebalanceFromOnchainParams = deserializeTakeProfitRebalanceFromOnchainParams; //# sourceMappingURL=takeProfitRebalance.js.map