mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 08:18:07 +00:00
feat: add scaleQuantityWithMinimum function to normalize order quantities and implement corresponding tests
This commit is contained in:
@@ -46,6 +46,18 @@ export function decimalToScaled(value: number | string | bigint, decimals: numbe
|
||||
return sign === -1 ? -result : result;
|
||||
}
|
||||
|
||||
export function scaleQuantityWithMinimum(value: number | string | bigint, decimals: number): bigint {
|
||||
const scaled = decimalToScaled(value, decimals);
|
||||
if (scaled !== 0n) {
|
||||
return scaled;
|
||||
}
|
||||
const numeric = typeof value === "bigint" ? Number(value) : Number(value);
|
||||
if (!Number.isFinite(numeric) || numeric === 0) {
|
||||
return scaled;
|
||||
}
|
||||
return numeric < 0 ? -1n : 1n;
|
||||
}
|
||||
|
||||
export function scaledToDecimalString(value: bigint | number | string, decimals: number): string {
|
||||
if (typeof value === "number") {
|
||||
if (!Number.isFinite(value)) throw new Error(`Invalid scaled number: ${value}`);
|
||||
|
||||
@@ -33,7 +33,7 @@ import {
|
||||
IMMEDIATE_OR_CANCEL_EXPIRY_PLACEHOLDER,
|
||||
type LighterEnvironment,
|
||||
} from "./constants";
|
||||
import { decimalToScaled, scaledToDecimalString } from "./decimal";
|
||||
import { decimalToScaled, scaledToDecimalString, scaleQuantityWithMinimum } from "./decimal";
|
||||
import { lighterOrderToAster, toAccountSnapshot, toDepth, toKlines, toOrders, toTicker } from "./mappers";
|
||||
|
||||
interface SimpleEvent<T> {
|
||||
@@ -888,7 +888,7 @@ export class LighterGateway {
|
||||
}
|
||||
const side = params.side;
|
||||
const isAsk = side === "SELL" ? 1 : 0;
|
||||
const baseAmount = decimalToScaled(params.quantity, this.sizeDecimals);
|
||||
const baseAmount = scaleQuantityWithMinimum(params.quantity, this.sizeDecimals);
|
||||
const baseAmountScaledString = scaledToDecimalString(baseAmount, this.sizeDecimals);
|
||||
const clientOrderIndex = BigInt(Date.now() % Number.MAX_SAFE_INTEGER);
|
||||
let priceScaled = params.price != null ? decimalToScaled(params.price, this.priceDecimals) : null;
|
||||
|
||||
Reference in New Issue
Block a user