@marinade.finance/kamino-sdk
Version:
93 lines • 5.47 kB
JavaScript
;
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