aftermath-ts-sdk
Version:
Aftermath TypeScript SDK
61 lines (60 loc) • 2.3 kB
JavaScript
;
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));
};