UNPKG

@orca-so/whirlpool-sdk

Version:

Whirlpool SDK for the Orca protocol.

58 lines (57 loc) 2.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStartTickIndex = exports.priceToTickIndex = exports.tickIndexToPrice = exports.priceToSqrtX64 = exports.sqrtPriceX64ToPrice = exports.getPrevValidTickIndex = exports.getNextValidTickIndex = exports.getNearestValidTickIndex = exports.getNearestValidTickIndexFromTickIndex = void 0; const whirlpool_client_sdk_1 = require("@orca-so/whirlpool-client-sdk"); const decimal_js_1 = __importDefault(require("decimal.js")); const tick_util_1 = require("../whirlpool/tick-util"); function getNearestValidTickIndexFromTickIndex(tickIndex, tickSpacing) { return tick_util_1.TickUtil.toValid(tickIndex, tickSpacing); } exports.getNearestValidTickIndexFromTickIndex = getNearestValidTickIndexFromTickIndex; function getNearestValidTickIndex(price, decimalsA, decimalsB, tickSpacing) { return tick_util_1.TickUtil.toValid(priceToTickIndex(price, decimalsA, decimalsB), tickSpacing); } exports.getNearestValidTickIndex = getNearestValidTickIndex; function getNextValidTickIndex(tickIndex, tickSpacing) { return tickIndex + tickSpacing; } exports.getNextValidTickIndex = getNextValidTickIndex; function getPrevValidTickIndex(tickIndex, tickSpacing) { return tickIndex - tickSpacing; } exports.getPrevValidTickIndex = getPrevValidTickIndex; function sqrtPriceX64ToPrice(sqrtPriceX64, decimalsA, decimalsB) { return (0, whirlpool_client_sdk_1.fromX64)(sqrtPriceX64) .pow(2) .mul(decimal_js_1.default.pow(10, decimalsA - decimalsB)); } exports.sqrtPriceX64ToPrice = sqrtPriceX64ToPrice; function priceToSqrtX64(price, decimalsA, decimalsB) { return (0, whirlpool_client_sdk_1.toX64)(price.mul(decimal_js_1.default.pow(10, decimalsB - decimalsA)).sqrt()); } exports.priceToSqrtX64 = priceToSqrtX64; function tickIndexToPrice(tickIndex, decimalsA, decimalsB) { return sqrtPriceX64ToPrice((0, whirlpool_client_sdk_1.tickIndexToSqrtPriceX64)(tickIndex), decimalsA, decimalsB); } exports.tickIndexToPrice = tickIndexToPrice; function priceToTickIndex(price, decimalsA, decimalsB) { return (0, whirlpool_client_sdk_1.sqrtPriceX64ToTickIndex)(priceToSqrtX64(price, decimalsA, decimalsB)); } exports.priceToTickIndex = priceToTickIndex; /** * Get the startIndex of the tick array containing tickIndex. * * @param tickIndex * @param tickSpacing * @param offset can be used to get neighboring tick array startIndex. * @returns */ function getStartTickIndex(tickIndex, tickSpacing, offset = 0) { const realIndex = Math.floor(tickIndex / tickSpacing / whirlpool_client_sdk_1.TICK_ARRAY_SIZE); const startTickIndex = (realIndex + offset) * tickSpacing * whirlpool_client_sdk_1.TICK_ARRAY_SIZE; return startTickIndex; } exports.getStartTickIndex = getStartTickIndex;