UNPKG

aftermath-ts-sdk

Version:
61 lines (60 loc) 2.3 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.PerpetualsOrderUtils = void 0; const __1 = require(".."); const types_1 = require("../../../types"); const BN = require("bn.js"); class PerpetualsOrderUtils { } exports.PerpetualsOrderUtils = PerpetualsOrderUtils; _a = PerpetualsOrderUtils; // Return order_id given price, counter and side PerpetualsOrderUtils.orderId = (price, counter, side) => { if (Boolean(side)) return _a.orderIdAsk(price, counter); else return _a.orderIdBid(price, counter); }; // Return order_id for ask order, given price, counter // (price << 64) | counter PerpetualsOrderUtils.orderIdAsk = (price, counter) => { let priceBn = new BN(price, 10); let counterBn = new BN(counter, 10); return BigInt(priceBn.shln(64).or(counterBn).toString()); }; // Return order_id for bid order, given price, counter and side // ((price ^ 0xffff_ffff_ffff_ffff) << 64) | counter PerpetualsOrderUtils.orderIdBid = (price, counter) => { let priceBn = new BN(price, 10); let counterBn = new BN(counter, 10); let mask_bn = new BN(`ffffffffffffffff`, 16); return BigInt(priceBn.xor(mask_bn).shln(64).or(counterBn).toString()); }; // Return price of given `order_id`, (works for ask or bid) PerpetualsOrderUtils.price = (orderId) => { const side = __1.Perpetuals.orderIdToSide(orderId); if (side === types_1.PerpetualsOrderSide.Ask) return _a.priceAsk(orderId); else return _a.priceBid(orderId); }; // Returns price of a given ask `order_id`. PerpetualsOrderUtils.priceAsk = (orderId) => { let orderIdBn = new BN(orderId, 10); return BigInt(orderIdBn.shrn(64).toString()); }; // Returns price of a given bid `order_id`. PerpetualsOrderUtils.priceBid = (orderId) => { let orderIdBn = new BN(orderId, 10); let mask_bn = new BN(`ffffffffffffffff`, 16); return BigInt(orderIdBn.shrn(64).xor(mask_bn).toString()); }; PerpetualsOrderUtils.counter = (orderId) => { let orderIdBn = new BN(orderId, 10); let mask_bn = new BN(`0000000000000000ffffffffffffffff`, 16); return BigInt(orderIdBn.and(mask_bn).toString()); }; PerpetualsOrderUtils.isAsk = (orderId) => { return new BN(orderId, 10).lt(new BN(`80000000000000000000000000000000`, 16)); };