@marinade.finance/kamino-sdk
Version:
218 lines • 11.5 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.deserializePricePercentageWithResetRebalanceWithStateOverride = exports.deserializePricePercentageWithResetRebalanceFromOnchainParams = exports.readPricePercentageWithResetRebalanceStateFromStrategy = exports.readRawPricePercentageWithResetRebalanceStateFromStrategy = exports.readPricePercentageWithResetRebalanceParamsFromStrategy = exports.getDefaultPricePercentageWithResetRebalanceFieldInfos = exports.getPositionResetRangeFromPricePercentageWithResetParams = exports.getPositionRangeFromPricePercentageWithResetParams = exports.getPricePercentageWithResetRebalanceFieldInfos = exports.PricePercentageWithResetRebalanceTypeName = void 0;
const decimal_js_1 = __importDefault(require("decimal.js"));
const CreationParameters_1 = require("../utils/CreationParameters");
const consts_1 = require("./consts");
const utils_1 = require("../utils");
const whirlpool_sdk_1 = require("@orca-so/whirlpool-sdk");
const bn_js_1 = __importDefault(require("bn.js"));
const utils_2 = require("./utils");
const math_utils_1 = require("./math_utils");
exports.PricePercentageWithResetRebalanceTypeName = 'pricePercentageWithReset';
function getPricePercentageWithResetRebalanceFieldInfos(price, lowerPercentageBPS, upperPercentageBPS, resetLowerPercentageBPS, resetUpperPercentageBPS, enabled = true) {
let rebalanceType = {
label: consts_1.RebalanceTypeLabelName,
type: 'string',
value: exports.PricePercentageWithResetRebalanceTypeName,
enabled,
};
let lowerBpsRebalanceFieldInfo = {
label: 'lowerRangeBps',
type: 'number',
value: lowerPercentageBPS,
enabled,
};
let upperBpsRebalanceFieldInfo = {
label: 'upperRangeBps',
type: 'number',
value: upperPercentageBPS,
enabled,
};
let resetLowerBpsRebalanceFieldInfo = {
label: 'resetLowerRangeBps',
type: 'number',
value: resetLowerPercentageBPS,
enabled,
};
let resetUpperBpsRebalanceFieldInfo = {
label: 'resetUpperRangeBps',
type: 'number',
value: resetUpperPercentageBPS,
enabled,
};
let { lowerPrice, upperPrice } = getPositionRangeFromPricePercentageWithResetParams(price, lowerPercentageBPS, upperPercentageBPS);
let lowerRangeRebalanceFieldInfo = {
label: 'rangePriceLower',
type: 'number',
value: lowerPrice,
enabled: false,
};
let upperRangeRebalanceFieldInfo = {
label: 'rangePriceUpper',
type: 'number',
value: upperPrice,
enabled: false,
};
let { lowerPrice: resetLowerPrice, upperPrice: resetUpperPrice } = getPositionResetRangeFromPricePercentageWithResetParams(price, lowerPercentageBPS, upperPercentageBPS, resetLowerPercentageBPS, resetUpperPercentageBPS);
let resetLowerRangeRebalanceFieldInfo = {
label: 'resetPriceLower',
type: 'number',
value: resetLowerPrice,
enabled: false,
};
let resetUpperRangeRebalanceFieldInfo = {
label: 'resetPriceUpper',
type: 'number',
value: resetUpperPrice,
enabled: false,
};
return [
rebalanceType,
lowerBpsRebalanceFieldInfo,
upperBpsRebalanceFieldInfo,
resetLowerBpsRebalanceFieldInfo,
resetUpperBpsRebalanceFieldInfo,
lowerRangeRebalanceFieldInfo,
upperRangeRebalanceFieldInfo,
resetLowerRangeRebalanceFieldInfo,
resetUpperRangeRebalanceFieldInfo,
];
}
exports.getPricePercentageWithResetRebalanceFieldInfos = getPricePercentageWithResetRebalanceFieldInfos;
function getPositionRangeFromPricePercentageWithResetParams(price, lowerPercentageBPS, upperPercentageBPS) {
return (0, math_utils_1.getPriceRangeFromPriceAndDiffBPS)(price, lowerPercentageBPS, upperPercentageBPS);
}
exports.getPositionRangeFromPricePercentageWithResetParams = getPositionRangeFromPricePercentageWithResetParams;
function getPositionResetRangeFromPricePercentageWithResetParams(price, lowerPercentageBPS, upperPercentageBPS, resetLowerPercentageBPS, resetUpperPercentageBPS) {
return (0, math_utils_1.getResetRangeFromPriceAndDiffBPS)(price, lowerPercentageBPS, upperPercentageBPS, resetLowerPercentageBPS, resetUpperPercentageBPS);
}
exports.getPositionResetRangeFromPricePercentageWithResetParams = getPositionResetRangeFromPricePercentageWithResetParams;
function getDefaultPricePercentageWithResetRebalanceFieldInfos(price) {
let fieldInfos = getPricePercentageWithResetRebalanceFieldInfos(price, CreationParameters_1.DefaultLowerPercentageBPSDecimal, CreationParameters_1.DefaultUpperPercentageBPSDecimal, CreationParameters_1.DefaultLowerPercentageBPSDecimal, CreationParameters_1.DefaultUpperPercentageBPSDecimal);
return fieldInfos;
}
exports.getDefaultPricePercentageWithResetRebalanceFieldInfos = getDefaultPricePercentageWithResetRebalanceFieldInfos;
function readPricePercentageWithResetRebalanceParamsFromStrategy(rebalanceRaw) {
let paramsBuffer = Buffer.from(rebalanceRaw.params);
let lowerBpsRebalanceFieldInfo = {
label: 'lowerRangeBps',
type: 'number',
value: new decimal_js_1.default(paramsBuffer.readUint16LE(0)),
enabled: true,
};
let upperBpsRebalanceFieldInfo = {
label: 'upperRangeBps',
type: 'number',
value: new decimal_js_1.default(paramsBuffer.readUint16LE(2)),
enabled: true,
};
let resetLowerBpsRebalanceFieldInfo = {
label: 'resetLowerRangeBps',
type: 'number',
value: new decimal_js_1.default(paramsBuffer.readUint16LE(4)),
enabled: true,
};
let resetUpperBpsRebalanceFieldInfo = {
label: 'resetUpperRangeBps',
type: 'number',
value: new decimal_js_1.default(paramsBuffer.readUint16LE(6)),
enabled: true,
};
return [
lowerBpsRebalanceFieldInfo,
upperBpsRebalanceFieldInfo,
resetLowerBpsRebalanceFieldInfo,
resetUpperBpsRebalanceFieldInfo,
];
}
exports.readPricePercentageWithResetRebalanceParamsFromStrategy = readPricePercentageWithResetRebalanceParamsFromStrategy;
function readRawPricePercentageWithResetRebalanceStateFromStrategy(rebalanceRaw) {
let stateBuffer = Buffer.from(rebalanceRaw.state);
let lowerRangeRebalanceFieldInfo = {
label: 'lastRebalanceLowerResetPoolPrice',
type: 'number',
value: new decimal_js_1.default((0, utils_1.readBigUint128LE)(stateBuffer, 0).toString()),
enabled: false,
};
let upperRangeRebalanceFieldInfo = {
label: 'lastRebalanceUpperResetPoolPrice',
type: 'number',
value: new decimal_js_1.default((0, utils_1.readBigUint128LE)(stateBuffer, 16).toString()),
enabled: false,
};
return [lowerRangeRebalanceFieldInfo, upperRangeRebalanceFieldInfo];
}
exports.readRawPricePercentageWithResetRebalanceStateFromStrategy = readRawPricePercentageWithResetRebalanceStateFromStrategy;
function readPricePercentageWithResetRebalanceStateFromStrategy(dex, tokenADecimals, tokenBDecimals, rebalanceRaw) {
let stateBuffer = Buffer.from(rebalanceRaw.state);
let params = readPricePercentageWithResetRebalanceParamsFromStrategy(rebalanceRaw);
let resetLowerRangeBps = new decimal_js_1.default(params.find((param) => param.label == 'resetLowerRangeBps')?.value.toString());
let resetUpperRangeBps = new decimal_js_1.default(params.find((param) => param.label == 'resetUpperRangeBps')?.value.toString());
let lowerResetSqrtPriceX64 = new decimal_js_1.default((0, utils_1.readBigUint128LE)(stateBuffer, 0).toString());
let upperResetSqrtPriceX64 = new decimal_js_1.default((0, utils_1.readBigUint128LE)(stateBuffer, 16).toString());
let lowerResetPrice, upperResetPrice;
if (dex == 'ORCA') {
lowerResetPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(lowerResetSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals);
upperResetPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(upperResetSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals);
}
else if (dex == 'RAYDIUM') {
lowerResetPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(lowerResetSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals);
upperResetPrice = (0, whirlpool_sdk_1.sqrtPriceX64ToPrice)(new bn_js_1.default(upperResetSqrtPriceX64.toString()), tokenADecimals, tokenBDecimals);
}
else {
throw new Error(`Unknown DEX ${dex}`);
}
let lowerPositionPrice = lowerResetPrice.mul(CreationParameters_1.FullBPSDecimal).div(resetLowerRangeBps);
let upperPositionPrice = upperResetPrice.div(CreationParameters_1.FullBPSDecimal).mul(resetUpperRangeBps);
let lowerBpsRebalanceFieldInfo = {
label: 'rangePriceLower',
type: 'number',
value: lowerPositionPrice,
enabled: true,
};
let upperBpsRebalanceFieldInfo = {
label: 'rangePriceUpper',
type: 'number',
value: upperPositionPrice,
enabled: true,
};
let resetLowerBpsRebalanceFieldInfo = {
label: 'resetPriceLower',
type: 'number',
value: lowerResetPrice,
enabled: true,
};
let resetUpperBpsRebalanceFieldInfo = {
label: 'resetPriceUpper',
type: 'number',
value: upperResetPrice,
enabled: true,
};
return [
lowerBpsRebalanceFieldInfo,
upperBpsRebalanceFieldInfo,
resetLowerBpsRebalanceFieldInfo,
resetUpperBpsRebalanceFieldInfo,
];
}
exports.readPricePercentageWithResetRebalanceStateFromStrategy = readPricePercentageWithResetRebalanceStateFromStrategy;
function deserializePricePercentageWithResetRebalanceFromOnchainParams(price, rebalanceRaw) {
let params = readPricePercentageWithResetRebalanceParamsFromStrategy(rebalanceRaw);
let lowerRangeBps = new decimal_js_1.default(params.find((param) => param.label == 'lowerRangeBps')?.value.toString());
let upperRangeBps = new decimal_js_1.default(params.find((param) => param.label == 'upperRangeBps')?.value.toString());
let lowerResetRangeBps = new decimal_js_1.default(params.find((param) => param.label == 'resetLowerRangeBps')?.value.toString());
let upperResetRangeBps = new decimal_js_1.default(params.find((param) => param.label == 'resetUpperRangeBps')?.value.toString());
return getPricePercentageWithResetRebalanceFieldInfos(price, lowerRangeBps, upperRangeBps, lowerResetRangeBps, upperResetRangeBps);
}
exports.deserializePricePercentageWithResetRebalanceFromOnchainParams = deserializePricePercentageWithResetRebalanceFromOnchainParams;
function deserializePricePercentageWithResetRebalanceWithStateOverride(dex, tokenADecimals, tokenBDecimals, price, rebalanceRaw) {
const stateFields = readPricePercentageWithResetRebalanceStateFromStrategy(dex, tokenADecimals, tokenBDecimals, rebalanceRaw);
let fields = deserializePricePercentageWithResetRebalanceFromOnchainParams(price, rebalanceRaw);
return (0, utils_2.upsertManyRebalanceFieldInfos)(fields, stateFields);
}
exports.deserializePricePercentageWithResetRebalanceWithStateOverride = deserializePricePercentageWithResetRebalanceWithStateOverride;
//# sourceMappingURL=pricePercentageWithResetRebalance.js.map