@orca-so/whirlpool-sdk
Version:
Whirlpool SDK for the Orca protocol.
58 lines (57 loc) • 2.93 kB
JavaScript
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;
;